P2P + Horizontal + Vertical
Очередное исправление багов
This commit is contained in:
39
Canvas.cpp
39
Canvas.cpp
@@ -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();
|
||||
}
|
||||
if (areHorizontalVertical(draggedPoint, pair, true)) { // vertical
|
||||
*pair->x = pos.x();
|
||||
}
|
||||
if (areHorizontalVertical(draggedPoint, pair, false)) { // horizontal
|
||||
*pair->y = pos.y();
|
||||
auto coincidentGroup = getCoincidentGroup(draggedPoint);
|
||||
|
||||
for (Point* pt : coincidentGroup) {
|
||||
*pt->x = pos.x();
|
||||
*pt->y = pos.y();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user