src/ui/canvas.h

changeset 296
38f6fad61bad
parent 295
4241d948af28
child 297
bc92f97498f7
equal deleted inserted replaced
295:4241d948af28 296:38f6fad61bad
1 #pragma once
2 #include <QPainter>
3 #include <QBrush>
4 #include <QPen>
5 #include "gl/partrenderer.h"
6 #include "gl/gridprogram.h"
7 #include "gl/axesprogram.h"
8 #include "gl/vertexprogram.h"
9
10 class EditTools;
11
12 class Canvas : public PartRenderer
13 {
14 Q_OBJECT
15 public:
16 using OverpaintCallback = std::function<void(Canvas*, QPainter*)>;
17 Canvas(
18 Model* model,
19 EditTools* document,
20 DocumentManager* documents,
21 const ColorTable& colorTable,
22 QWidget* parent = nullptr);
23 void setOverpaintCallback(OverpaintCallback fn);
24 void drawWorldPoint(QPainter* painter, const glm::vec3& worldPoint) const;
25 void drawWorldPolyline(QPainter* painter, const std::vector<glm::vec3>& points);
26 void drawWorldPolygon(QPainter* painter, const std::vector<glm::vec3>& points);
27 Winding worldPolygonWinding(const std::vector<glm::vec3>& points) const;
28 const std::optional<glm::vec3>& getWorldPosition() const;
29 const QSet<ModelId> selectedObjects() const;
30 const glm::mat4& getGridMatrix() const;
31 void closeShape();
32 glm::vec3 cameraVector() const;
33 std::optional<glm::vec3> worldPosition;
34 DrawState* drawState = nullptr;
35 public Q_SLOTS:
36 void handleSelectionChange(const QSet<ModelId>& selectedIds, const QSet<ModelId>& deselectedIds);
37 void rebuildVertices(VertexMap* vertexMap);
38 void setGridMatrix(const glm::mat4 &newMatrix);
39 protected:
40 void mouseMoveEvent(QMouseEvent* event) override;
41 void mousePressEvent(QMouseEvent* event) override;
42 void mouseReleaseEvent(QMouseEvent* event) override;
43 void initializeGL() override;
44 void paintGL() override;
45 Q_SIGNALS:
46 void newStatusText(const QString& newStatusText);
47 void mouseClick(QMouseEvent* event);
48 void mouseMove(QMouseEvent* event);
49 private:
50 bool isGridPerpendicularToScreen(float threshold) const;
51 QVector<QPointF> convertWorldPointsToScreenPoints(const std::vector<glm::vec3>& worldPoints) const;
52 Q_SLOT void updateCanvasRenderPreferences();
53 void renderAxesLabels(QPainter& painter);
54 std::optional<GridProgram> gridProgram;
55 std::optional<AxesProgram> axesProgram;
56 std::optional<VertexProgram> vertexProgram;
57 glm::mat4 gridMatrix;
58 Plane gridPlane;
59 int totalMouseMove = 0;
60 bool isDark = true;
61 QSet<ModelId> selection;
62 OverpaintCallback overpaintCallback = nullptr;
63 EditTools* document;
64 };
65
66 void adjustGridToView(Canvas* canvas);

mercurial