Make parallel lines
And make TODO for P2P
This commit is contained in:
66
Canvas.h
66
Canvas.h
@@ -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 }; // òåã äëÿ íîâûõ îãðàíè÷åíèé
|
||||
};
|
||||
Reference in New Issue
Block a user