Make parallel lines

And make TODO for P2P
This commit is contained in:
ParkSuMin
2025-12-07 15:54:59 +03:00
parent 94761fecbc
commit 5c0e04df5b
7 changed files with 199 additions and 39 deletions

View File

@@ -2,33 +2,65 @@
#include <QWidget>
#include <QMouseEvent>
#include <QPointF>
#include <QMessageBox>
#ifdef _DEBUG
#include <QDebug>
#endif
// GCS — ãåîìåòðè÷åñêèé ñîëâåð èç FreeCAD
#include "GCS/Geo.h"
#include "GCS/GCS.h"
using namespace GCS;
enum Mode {
None,
DrawingLine
enum class Mode : int
{
None = 0,
DrawingLine = 1,
Parallel = 2
};
// Óäîáíûé òèï äëÿ õðàíåíèÿ ïàðû ïàðàëëåëüíûõ ëèíèé (ïîðÿäîê íå âàæåí)
using LinePair = std::pair<Line*, Line*>;
// ===================================================================
// Îñíîâíîé êëàññ õîëñòà
// ===================================================================
class Canvas : public QWidget
{
Q_OBJECT
private:
void changeMode(Mode);
Mode mode = Mode::None;
QVector<Line*> lines;
QVector<Point> points;
QVector<double*> params;
Line* current_line;
protected:
void mousePressEvent(QMouseEvent*) override;
public:
Canvas(QWidget *parent);
~Canvas();
};
Q_OBJECT
public:
explicit Canvas(QWidget* parent = nullptr);
~Canvas() override;
void changeMode(Mode newMode);
protected:
void mousePressEvent(QMouseEvent* event) override;
void paintEvent(QPaintEvent* event) override;
private:
// ====================== Ïîèñê è âûáîð ======================
Line* findAt(QPointF&); // èùåò ëèíèþ ïîä êóðñîðîì
// ====================== Ïàðàëëåëüíîñòü ======================
LinePair makeOrderedPair(Line* l1, Line* l2);
bool areAlreadyParallel(Line* l1, Line* l2); // ïðîâåðêà íà äóáëèêàò
// ====================== Äàííûå ñöåíû ======================
System sys; // ãåîìåòðè÷åñêèé ñîëâåð
QVector<Line*> lines; // çàâåðø¸ííûå ëèíèè
QVector<Point> points; // âñå òî÷êè (äëÿ óäîáíîãî äîñòóïà)
std::vector<double*> params; // âñå ïàðàìåòðû, ïåðåäàâàåìûå â ñîëâåð
std::set<LinePair> parallelPairs; // óæå çàïàðàëëåëåííûå ïàðû (çàùèòà îò äóáëåé)
Line* current_line{ nullptr };
Mode mode{ Mode::None };
int obj_count{ 0 }; // òåã äëÿ íîâûõ îáúåêòîâ
int constraints_count{ 0 }; // òåã äëÿ íîâûõ îãðàíè÷åíèé
};