P2P + Horizontal + Vertical

Очередное исправление багов
This commit is contained in:
2025-12-15 18:53:12 +03:00
parent 0f064bf48e
commit cc1f891d90
2 changed files with 30 additions and 12 deletions

View File

@@ -451,17 +451,21 @@ void Canvas::mouseMoveEvent(QMouseEvent* event)
if (draggedPoint) {
QPointF pos = UCS_POSITION - dragOffset;
// Обновляем все связанные точки (совпадающие, горизонтальные, вертикальные)
for (Point* pair : points) {
if (areCoincident(draggedPoint, pair)) {
*pair->x = pos.x();
*pair->y = pos.y();
auto coincidentGroup = getCoincidentGroup(draggedPoint);
for (Point* pt : coincidentGroup) {
*pt->x = pos.x();
*pt->y = pos.y();
}
if (areHorizontalVertical(draggedPoint, pair, true)) { // vertical
*pair->x = pos.x();
for (Point* basePt : coincidentGroup) {
for (Point* other : points) {
if (areHorizontalVertical(basePt, other, true)) {
*other->x = pos.x();
}
if (areHorizontalVertical(basePt, other, false)) {
*other->y = pos.y();
}
if (areHorizontalVertical(draggedPoint, pair, false)) { // horizontal
*pair->y = pos.y();
}
}
@@ -634,3 +638,16 @@ QPointF Canvas::screenToLogical(const QPointF& screenPos) const
return logical;
}
std::vector<Point*> Canvas::getCoincidentGroup(Point* p)
{
std::vector<Point*> group;
group.push_back(p);
for (Point* other : points) {
if (other != p && areCoincident(p, other)) {
group.push_back(other);
}
}
return group;
}

View File

@@ -69,6 +69,7 @@ private:
#endif
QPointF screenToLogical(const QPointF& screenPos) const;
std::vector<Point*> getCoincidentGroup(Point* p);
// ====================== Методы поиска и выбора ======================
/// Найти линию под указанной позицией