diff -r 3dbdc243f053 -r d355d4c52d51 src/ui/canvas.h --- a/src/ui/canvas.h Wed May 25 13:49:45 2022 +0300 +++ b/src/ui/canvas.h Wed May 25 17:24:51 2022 +0300 @@ -7,6 +7,20 @@ #include "gl/axesprogram.h" #include "gl/vertexprogram.h" +enum EditingMode +{ + SelectMode, + DrawMode +}; + +struct DrawState +{ + std::vector polygon; + std::vector previewPolygon; + glm::vec3 previewPoint; + bool isconcave = false; +}; + class Canvas : public PartRenderer { Q_OBJECT @@ -14,6 +28,7 @@ using OverpaintCallback = std::function; Canvas( Model* model, + Document* document, DocumentManager* documents, const ldraw::ColorTable& colorTable, QWidget* parent = nullptr); @@ -24,14 +39,17 @@ void drawWorldPolyline(QPainter* painter, const std::vector& points); void drawWorldPolygon(QPainter* painter, const std::vector& points); Winding worldPolygonWinding(const std::vector& points) const; - const std::optional& getWorldPosition() const; - void adjustGridToView(); + const std::optional& getWorldPosition() const; const QSet selectedObjects() const; const glm::mat4& getGridMatrix() const; + void closeShape(); + glm::vec3 cameraVector() const; + DrawState drawState; + EditingMode mode = SelectMode; public Q_SLOTS: void handleSelectionChange(const QSet& selectedIds, const QSet& deselectedIds); void rebuildVertices(Document *document); - void setGridMatrix(const glm::mat4 &newMatrix); + void setGridMatrix(const glm::mat4 &newMatrix); protected: void mouseMoveEvent(QMouseEvent* event) override; void mousePressEvent(QMouseEvent* event) override; @@ -44,7 +62,6 @@ void mouseClick(Canvas* canvas, QMouseEvent* event); void mouseMove(Canvas* canvas, QMouseEvent* event); private: - glm::vec3 cameraVector() const; bool isGridPerpendicularToScreen(float threshold) const; QVector convertWorldPointsToScreenPoints(const std::vector& worldPoints) const; Q_SLOT void updateCanvasRenderPreferences(); @@ -59,4 +76,7 @@ bool isDark = true; QSet selection; OverpaintCallback overpaintCallback = nullptr; + Document* document; }; + +void adjustGridToView(Canvas* canvas);