src/document.h

changeset 217
6d95c1a41e6e
parent 215
34c6e7bc4ee1
child 222
72b456f2f3c2
equal deleted inserted replaced
216:c7241f504117 217:6d95c1a41e6e
20 #include <memory> 20 #include <memory>
21 #include <QWidget> 21 #include <QWidget>
22 #include <QToolBar> 22 #include <QToolBar>
23 #include "model.h" 23 #include "model.h"
24 #include "vertexmap.h" 24 #include "vertexmap.h"
25 #include "gl/common.h"
25 26
26 enum EditingMode 27 enum EditingMode
27 { 28 {
28 SelectMode, 29 SelectMode,
29 DrawMode 30 DrawMode
30 }; 31 };
31 32
32 Q_DECLARE_METATYPE(EditingMode); 33 Q_DECLARE_METATYPE(EditingMode);
33
34 struct DrawState
35 {
36 std::vector<glm::vec3> polygon;
37 std::vector<glm::vec3> previewPolygon;
38 glm::vec3 previewPoint;
39 bool isconcave = false;
40 EditingMode mode = SelectMode;
41 };
42 34
43 struct AppendToModel 35 struct AppendToModel
44 { 36 {
45 ModelElement newElement; 37 ModelElement newElement;
46 }; 38 };
52 44
53 using ModelAction = std::variant<AppendToModel, DeleteFromModel>; 45 using ModelAction = std::variant<AppendToModel, DeleteFromModel>;
54 46
55 Q_DECLARE_METATYPE(ModelAction) 47 Q_DECLARE_METATYPE(ModelAction)
56 48
57 class EditTools : public QObject 49 class EditTools final : public QObject, public RenderLayer
58 { 50 {
59 Q_OBJECT 51 Q_OBJECT
52 std::vector<glm::vec3> polygon;
53 std::vector<glm::vec3> previewPolygon;
54 glm::vec3 previewPoint;
55 bool isconcave = false;
56 EditingMode mode = SelectMode;
57 glm::mat4 mvpMatrix;
58 glm::mat4 gridMatrix{1};
59 Plane gridPlane;
60 opt<glm::vec3> worldPosition;
60 public: 61 public:
61 explicit EditTools( 62 explicit EditTools(QObject *parent = nullptr);
62 Model* model,
63 const ColorTable& colorTable,
64 QObject *parent = nullptr);
65 ~EditTools() override; 63 ~EditTools() override;
66 void applyToVertices(VertexMap::ApplyFunction fn) const; 64 void applyToVertices(VertexMap::ApplyFunction fn) const;
67 const QSet<ModelId> selectedObjects() const; 65 const QSet<ModelId> selectedObjects() const;
68 const ColorTable& colorTable;
69 Model* const model;
70 EditingMode currentEditingMode() const; 66 EditingMode currentEditingMode() const;
71 Q_SLOT void setEditMode(EditingMode mode); 67 Q_SLOT void setEditMode(EditingMode mode);
72 Q_SLOT void canvasMouseClick(QMouseEvent* event); 68 Q_SLOT void setGridMatrix(const glm::mat4& gridMatrix);
73 Q_SLOT void canvasMouseMove(QMouseEvent* event);
74 Q_SIGNALS: 69 Q_SIGNALS:
75 void newStatusText(const QString& newStatusText); 70 void newStatusText(const QString& newStatusText);
76 void splitterChanged();
77 void modelAction(const ModelAction& action); 71 void modelAction(const ModelAction& action);
78 void drawStateChanged(const DrawState& drawState); 72 void select(const QSet<ModelId>& ids, bool retain);
73 protected:
74 void mvpMatrixChanged(const glm::mat4& matrix) override;
75 void mouseMoved(const QMouseEvent* event) override;
76 void mouseClick(const QMouseEvent* event) override;
77 void overpaint(QPainter* painter) override;
79 private: 78 private:
80 void closeShape(); 79 void closeShape();
81 DrawState drawState; 80 void updatePreviewPolygon();
82 VertexMap vertexMap; 81 void removeLastPoint();
83 }; 82 };

mercurial