src/ui/canvas.h

changeset 191
d355d4c52d51
parent 188
64ea7282611e
child 197
0e729e681a2c
--- 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<glm::vec3> polygon;
+	std::vector<glm::vec3> previewPolygon;
+	glm::vec3 previewPoint;
+	bool isconcave = false;
+};
+
 class Canvas : public PartRenderer
 {
 	Q_OBJECT
@@ -14,6 +28,7 @@
 	using OverpaintCallback = std::function<void(Canvas*, QPainter*)>;
 	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<glm::vec3>& points);
 	void drawWorldPolygon(QPainter* painter, const std::vector<glm::vec3>& points);
 	Winding worldPolygonWinding(const std::vector<glm::vec3>& points) const;
-        const std::optional<glm::vec3>& getWorldPosition() const;
-	void adjustGridToView();
+	const std::optional<glm::vec3>& getWorldPosition() const;
 	const QSet<ldraw::id_t> 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<ldraw::id_t>& selectedIds, const QSet<ldraw::id_t>& 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<QPointF> convertWorldPointsToScreenPoints(const std::vector<glm::vec3>& worldPoints) const;
 	Q_SLOT void updateCanvasRenderPreferences();
@@ -59,4 +76,7 @@
 	bool isDark = true;
 	QSet<ldraw::id_t> selection;
 	OverpaintCallback overpaintCallback = nullptr;
+	Document* document;
 };
+
+void adjustGridToView(Canvas* canvas);

mercurial