17 { |
17 { |
18 std::vector<glm::vec3> polygon; |
18 std::vector<glm::vec3> polygon; |
19 std::vector<glm::vec3> previewPolygon; |
19 std::vector<glm::vec3> previewPolygon; |
20 glm::vec3 previewPoint; |
20 glm::vec3 previewPoint; |
21 bool isconcave = false; |
21 bool isconcave = false; |
|
22 EditingMode mode = SelectMode; |
22 }; |
23 }; |
23 |
|
24 class Canvas : public PartRenderer |
24 class Canvas : public PartRenderer |
25 { |
25 { |
26 Q_OBJECT |
26 Q_OBJECT |
27 public: |
27 public: |
28 using OverpaintCallback = std::function<void(Canvas*, QPainter*)>; |
28 using OverpaintCallback = std::function<void(Canvas*, QPainter*)>; |
42 const std::optional<glm::vec3>& getWorldPosition() const; |
42 const std::optional<glm::vec3>& getWorldPosition() const; |
43 const QSet<ldraw::id_t> selectedObjects() const; |
43 const QSet<ldraw::id_t> selectedObjects() const; |
44 const glm::mat4& getGridMatrix() const; |
44 const glm::mat4& getGridMatrix() const; |
45 void closeShape(); |
45 void closeShape(); |
46 glm::vec3 cameraVector() const; |
46 glm::vec3 cameraVector() const; |
47 DrawState drawState; |
47 std::optional<glm::vec3> worldPosition; |
48 EditingMode mode = SelectMode; |
48 DrawState* drawState = nullptr; |
49 public Q_SLOTS: |
49 public Q_SLOTS: |
50 void handleSelectionChange(const QSet<ldraw::id_t>& selectedIds, const QSet<ldraw::id_t>& deselectedIds); |
50 void handleSelectionChange(const QSet<ldraw::id_t>& selectedIds, const QSet<ldraw::id_t>& deselectedIds); |
51 void rebuildVertices(Document *document); |
51 void rebuildVertices(Document *document); |
52 void setGridMatrix(const glm::mat4 &newMatrix); |
52 void setGridMatrix(const glm::mat4 &newMatrix); |
53 protected: |
53 protected: |
57 void initializeGL() override; |
57 void initializeGL() override; |
58 void paintGL() override; |
58 void paintGL() override; |
59 Q_SIGNALS: |
59 Q_SIGNALS: |
60 void newStatusText(const QString& newStatusText); |
60 void newStatusText(const QString& newStatusText); |
61 void selectionChanged(const QSet<ldraw::id_t>& newSelection); |
61 void selectionChanged(const QSet<ldraw::id_t>& newSelection); |
62 void mouseClick(Canvas* canvas, QMouseEvent* event); |
62 void mouseClick(QMouseEvent* event); |
63 void mouseMove(Canvas* canvas, QMouseEvent* event); |
63 void mouseMove(QMouseEvent* event); |
64 private: |
64 private: |
65 bool isGridPerpendicularToScreen(float threshold) const; |
65 bool isGridPerpendicularToScreen(float threshold) const; |
66 QVector<QPointF> convertWorldPointsToScreenPoints(const std::vector<glm::vec3>& worldPoints) const; |
66 QVector<QPointF> convertWorldPointsToScreenPoints(const std::vector<glm::vec3>& worldPoints) const; |
67 Q_SLOT void updateCanvasRenderPreferences(); |
67 Q_SLOT void updateCanvasRenderPreferences(); |
68 void renderAxesLabels(QPainter& painter); |
68 void renderAxesLabels(QPainter& painter); |
69 std::optional<GridProgram> gridProgram; |
69 std::optional<GridProgram> gridProgram; |
70 std::optional<AxesProgram> axesProgram; |
70 std::optional<AxesProgram> axesProgram; |
71 std::optional<VertexProgram> vertexProgram; |
71 std::optional<VertexProgram> vertexProgram; |
72 std::optional<glm::vec3> worldPosition; |
|
73 glm::mat4 gridMatrix; |
72 glm::mat4 gridMatrix; |
74 geom::Plane gridPlane; |
73 geom::Plane gridPlane; |
75 int totalMouseMove = 0; |
74 int totalMouseMove = 0; |
76 bool isDark = true; |
75 bool isDark = true; |
77 QSet<ldraw::id_t> selection; |
76 QSet<ldraw::id_t> selection; |