From 06a21821b49115cefd7e04cd9e8dc41ff1df11d8 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Tue, 9 Dec 2025 18:38:04 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9E=D1=87=D0=B8=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8=20=D1=83=20params?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Canvas.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Canvas.cpp b/Canvas.cpp index b57d5d4..5a299e5 100644 --- a/Canvas.cpp +++ b/Canvas.cpp @@ -117,7 +117,9 @@ void Canvas::mousePressEvent(QMouseEvent* event) points.pop_back(); points.pop_back(); + delete params.back(); params.pop_back(); + delete params.back(); params.pop_back(); mode = Mode::None; -- 2.49.1 From 71a2a382f10a5bda688eb991faf786fba4da15f6 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Tue, 9 Dec 2025 18:40:53 +0300 Subject: [PATCH 2/3] QVector to QVector --- Canvas.cpp | 16 ++++++++++------ Canvas.h | 4 ++-- GCS/Geo.h | 3 +++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Canvas.cpp b/Canvas.cpp index 5a299e5..cbfd5a0 100644 --- a/Canvas.cpp +++ b/Canvas.cpp @@ -97,13 +97,15 @@ void Canvas::mousePressEvent(QMouseEvent* event) params.push_back(x1); params.push_back(y1); - points.push_back(Point(x1, y1, obj_count)); - points.push_back(Point(x2, y2, obj_count)); + points.push_back(new Point(x1, y1, obj_count)); + points.push_back(new Point(x2, y2, obj_count)); current_line->p1.x = x1; current_line->p1.y = y1; current_line->p2.x = x2; current_line->p2.y = y2; + current_line->p1_ref = points[points.size() - 2]; + current_line->p2_ref = points[points.size() - 1]; } else { *current_line->p2.x = scene.x(); @@ -115,7 +117,9 @@ void Canvas::mousePressEvent(QMouseEvent* event) delete current_line; current_line = nullptr; + delete points.back(); points.pop_back(); + delete points.back(); points.pop_back(); delete params.back(); params.pop_back(); @@ -237,10 +241,10 @@ void Canvas::mouseMoveEvent(QMouseEvent* event) { if (draggedPoint) { QPointF pos = event->pos() - dragOffset; - for (Point pair : points) { - if (areCoincident(draggedPoint, &pair)) { - *pair.x = pos.x(); - *pair.y = pos.y(); + for (Point* pair : points) { + if (areCoincident(draggedPoint, pair)) { + *pair->x = pos.x(); + *pair->y = pos.y(); } } *draggedPoint->x = pos.x(); diff --git a/Canvas.h b/Canvas.h index d750778..567652c 100644 --- a/Canvas.h +++ b/Canvas.h @@ -49,7 +49,7 @@ protected: private: // ====================== Поиск и выбор ====================== Line* findAt(QPointF&); // ищет линию под курсором - Point* findPointAt(QPointF, qreal tolerance = 10.0); + Point* findPointAt(QPointF, qreal tolerance = 5.0); bool areCoincident(Point*, Point*, bool mode = false); // ====================== Параллельность ====================== bool areAlreadyParallel(Line* l1, Line* l2); // проверка на дубликат @@ -61,7 +61,7 @@ private: // ====================== Данные сцены ====================== System sys; // геометрический солвер QVector lines; // завершённые линии - QVector points; // все точки (для удобного доступа) + QVector points; // все точки (для удобного доступа) std::vector params; // все параметры, передаваемые в солвер std::set parallelPairs; // уже запараллеленные пары (защита от дублей) diff --git a/GCS/Geo.h b/GCS/Geo.h index 229df9a..faf6efa 100644 --- a/GCS/Geo.h +++ b/GCS/Geo.h @@ -228,6 +228,8 @@ public: {} Point p1; Point p2; + Point* p1_ref; + Point* p2_ref; DeriVector2 CalculateNormal(const Point& p, const double* derivparam = nullptr) const override; DeriVector2 Value(double u, double du, const double* derivparam = nullptr) const override; int PushOwnParams(VEC_pD& pvec) override; @@ -237,6 +239,7 @@ public: void set_tag(int); int get_tag(); bool contains(QPointF, qreal tol = 10.0) const; + }; class Circle: public Curve -- 2.49.1 From 9d383f6410ffa2f75dae2774b2f46ba683a3bf54 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Tue, 9 Dec 2025 18:53:35 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20point=5Fref?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Canvas.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Canvas.cpp b/Canvas.cpp index cbfd5a0..fe7af21 100644 --- a/Canvas.cpp +++ b/Canvas.cpp @@ -34,9 +34,9 @@ Point* Canvas::findPointAt(QPointF pos, qreal tolerance) QPointF p2(*line->p2.x, *line->p2.y); if (dist_P2P(p1, pos) <= tolerance) - temp = &line->p1; + temp = line->p1_ref; else if (dist_P2P(p2, pos) <= tolerance) - temp = &line->p2; + temp = line->p2_ref; } return temp; } @@ -214,8 +214,8 @@ void Canvas::mousePressEvent(QMouseEvent* event) Line *l1 = nullptr, *l2 = nullptr; for (Line* l : lines) { - if (&l->p1 == firstPoint || &l->p2 == firstPoint) l1 = l; - if (&l->p1 == clickedPoint || &l->p2 == clickedPoint) l2 = l; + if (l->p1_ref == firstPoint || l->p2_ref == firstPoint) l1 = l; + if (l->p1_ref == clickedPoint || l->p2_ref == clickedPoint) l2 = l; } if (l1 == l2 || -- 2.49.1