P2P constraint fix

Но по-хорошему стоит придумать, как после P2P соединить линии одной точкой
This commit is contained in:
2025-12-08 23:01:02 +03:00
parent a238b11db7
commit 24316cdd4f
5 changed files with 51 additions and 13 deletions

View File

@@ -24,6 +24,7 @@ enum class Mode : int
// Удобный тип для хранения пары параллельных линий (порядок не важен)
using LinePair = std::pair<Line*, Line*>;
using PointPair = std::pair<Point*, Point*>;
// ===================================================================
// Основной класс холста
@@ -49,9 +50,8 @@ private:
// ====================== Поиск и выбор ======================
Line* findAt(QPointF&); // ищет линию под курсором
Point* findPointAt(QPointF, qreal tolerance = 10.0);
bool areCoincident(Point*, Point*, bool mode = false);
// ====================== Параллельность ======================
LinePair makeOrderedPair(Line* l1, Line* l2);
bool areAlreadyParallel(Line* l1, Line* l2); // проверка на дубликат
// ====================== Перемещение ======================
@@ -65,6 +65,7 @@ private:
std::vector<double*> params; // все параметры, передаваемые в солвер
std::set<LinePair> parallelPairs; // уже запараллеленные пары (защита от дублей)
std::set<PointPair> P2Ppairs;
Line* current_line{ nullptr };
Point* firstPoint{ nullptr };
@@ -72,5 +73,5 @@ private:
bool after_constraint{ false };
int obj_count{ 0 }; // тег для новых объектов
int constraints_count{ 0 }; // тег для новых ограничений
int constraints_count{ 0 }; // тег для новых ограничений
};