diff -r c7241f504117 -r 6d95c1a41e6e src/document.h --- a/src/document.h Mon Jun 13 02:18:25 2022 +0300 +++ b/src/document.h Tue Jun 14 17:55:50 2022 +0300 @@ -22,6 +22,7 @@ #include #include "model.h" #include "vertexmap.h" +#include "gl/common.h" enum EditingMode { @@ -31,15 +32,6 @@ Q_DECLARE_METATYPE(EditingMode); -struct DrawState -{ - std::vector polygon; - std::vector previewPolygon; - glm::vec3 previewPoint; - bool isconcave = false; - EditingMode mode = SelectMode; -}; - struct AppendToModel { ModelElement newElement; @@ -54,30 +46,37 @@ Q_DECLARE_METATYPE(ModelAction) -class EditTools : public QObject +class EditTools final : public QObject, public RenderLayer { Q_OBJECT + std::vector polygon; + std::vector previewPolygon; + glm::vec3 previewPoint; + bool isconcave = false; + EditingMode mode = SelectMode; + glm::mat4 mvpMatrix; + glm::mat4 gridMatrix{1}; + Plane gridPlane; + opt worldPosition; public: - explicit EditTools( - Model* model, - const ColorTable& colorTable, - QObject *parent = nullptr); + explicit EditTools(QObject *parent = nullptr); ~EditTools() override; void applyToVertices(VertexMap::ApplyFunction fn) const; const QSet selectedObjects() const; - const ColorTable& colorTable; - Model* const model; EditingMode currentEditingMode() const; Q_SLOT void setEditMode(EditingMode mode); - Q_SLOT void canvasMouseClick(QMouseEvent* event); - Q_SLOT void canvasMouseMove(QMouseEvent* event); + Q_SLOT void setGridMatrix(const glm::mat4& gridMatrix); Q_SIGNALS: void newStatusText(const QString& newStatusText); - void splitterChanged(); void modelAction(const ModelAction& action); - void drawStateChanged(const DrawState& drawState); + void select(const QSet& ids, bool retain); +protected: + void mvpMatrixChanged(const glm::mat4& matrix) override; + void mouseMoved(const QMouseEvent* event) override; + void mouseClick(const QMouseEvent* event) override; + void overpaint(QPainter* painter) override; private: void closeShape(); - DrawState drawState; - VertexMap vertexMap; + void updatePreviewPolygon(); + void removeLastPoint(); };