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*)>; |
29 Canvas( |
29 Canvas( |
30 Model* model, |
30 Model* model, |
31 Document* document, |
31 EditorTabWidget* document, |
32 DocumentManager* documents, |
32 DocumentManager* documents, |
33 const ldraw::ColorTable& colorTable, |
33 const ldraw::ColorTable& colorTable, |
34 QWidget* parent = nullptr); |
34 QWidget* parent = nullptr); |
35 void setOverpaintCallback(OverpaintCallback fn); |
35 void setOverpaintCallback(OverpaintCallback fn); |
36 void drawWorldPoint(QPainter* painter, const glm::vec3& worldPoint) const; |
36 void drawWorldPoint(QPainter* painter, const glm::vec3& worldPoint) const; |
37 void drawWorldPolyline(QPainter* painter, const std::vector<glm::vec3>& points); |
37 void drawWorldPolyline(QPainter* painter, const std::vector<glm::vec3>& points); |
38 void drawWorldPolygon(QPainter* painter, const std::vector<glm::vec3>& points); |
38 void drawWorldPolygon(QPainter* painter, const std::vector<glm::vec3>& points); |
39 Winding worldPolygonWinding(const std::vector<glm::vec3>& points) const; |
39 Winding worldPolygonWinding(const std::vector<glm::vec3>& points) const; |
40 const std::optional<glm::vec3>& getWorldPosition() const; |
40 const std::optional<glm::vec3>& getWorldPosition() const; |
41 const QSet<ldraw::id_t> selectedObjects() const; |
41 const QSet<ModelId> selectedObjects() const; |
42 const glm::mat4& getGridMatrix() const; |
42 const glm::mat4& getGridMatrix() const; |
43 void closeShape(); |
43 void closeShape(); |
44 glm::vec3 cameraVector() const; |
44 glm::vec3 cameraVector() const; |
45 std::optional<glm::vec3> worldPosition; |
45 std::optional<glm::vec3> worldPosition; |
46 DrawState* drawState = nullptr; |
46 DrawState* drawState = nullptr; |
47 public Q_SLOTS: |
47 public Q_SLOTS: |
48 void handleSelectionChange(const QSet<ldraw::id_t>& selectedIds, const QSet<ldraw::id_t>& deselectedIds); |
48 void handleSelectionChange(const QSet<ModelId>& selectedIds, const QSet<ModelId>& deselectedIds); |
49 void rebuildVertices(Document *document); |
49 void rebuildVertices(EditorTabWidget *document); |
50 void setGridMatrix(const glm::mat4 &newMatrix); |
50 void setGridMatrix(const glm::mat4 &newMatrix); |
51 protected: |
51 protected: |
52 void mouseMoveEvent(QMouseEvent* event) override; |
52 void mouseMoveEvent(QMouseEvent* event) override; |
53 void mousePressEvent(QMouseEvent* event) override; |
53 void mousePressEvent(QMouseEvent* event) override; |
54 void mouseReleaseEvent(QMouseEvent* event) override; |
54 void mouseReleaseEvent(QMouseEvent* event) override; |
68 std::optional<VertexProgram> vertexProgram; |
68 std::optional<VertexProgram> vertexProgram; |
69 glm::mat4 gridMatrix; |
69 glm::mat4 gridMatrix; |
70 geom::Plane gridPlane; |
70 geom::Plane gridPlane; |
71 int totalMouseMove = 0; |
71 int totalMouseMove = 0; |
72 bool isDark = true; |
72 bool isDark = true; |
73 QSet<ldraw::id_t> selection; |
73 QSet<ModelId> selection; |
74 OverpaintCallback overpaintCallback = nullptr; |
74 OverpaintCallback overpaintCallback = nullptr; |
75 Document* document; |
75 EditorTabWidget* document; |
76 }; |
76 }; |
77 |
77 |
78 void adjustGridToView(Canvas* canvas); |
78 void adjustGridToView(Canvas* canvas); |