Mon, 19 Jul 2021 19:28:16 +0300
Add connections
47 | 1 | #pragma once |
2 | #include "gl/partrenderer.h" | |
61
4585d8d7a7ec
moved GridProgram to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
57
diff
changeset
|
3 | #include "gl/gridprogram.h" |
70 | 4 | #include "gl/axesprogram.h" |
47 | 5 | |
6 | class Canvas : public PartRenderer | |
7 | { | |
8 | Q_OBJECT | |
9 | public: | |
104 | 10 | struct MouseClickInfo; |
47 | 11 | Canvas( |
12 | Model* model, | |
13 | DocumentManager* documents, | |
14 | const ldraw::ColorTable& colorTable, | |
15 | QWidget* parent = nullptr); | |
51 | 16 | public slots: |
73
97df974b5ed5
ldraw::Id is now templated for extra type safety
Teemu Piippo <teemu@hecknology.net>
parents:
70
diff
changeset
|
17 | void handleSelectionChange(const QSet<ldraw::id_t>& selectedIds, const QSet<ldraw::id_t>& deselectedIds); |
47 | 18 | protected: |
19 | void mouseMoveEvent(QMouseEvent* event) override; | |
51 | 20 | void mousePressEvent(QMouseEvent* event) override; |
21 | void mouseReleaseEvent(QMouseEvent* event) override; | |
61
4585d8d7a7ec
moved GridProgram to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
57
diff
changeset
|
22 | void initializeGL() override; |
57
5c0005f63319
use glm::unProject to implement screenToModelCoordinates
Teemu Piippo <teemu@hecknology.net>
parents:
51
diff
changeset
|
23 | void paintGL() override; |
47 | 24 | signals: |
25 | void newStatusText(const QString& newStatusText); | |
73
97df974b5ed5
ldraw::Id is now templated for extra type safety
Teemu Piippo <teemu@hecknology.net>
parents:
70
diff
changeset
|
26 | void selectionChanged(const QSet<ldraw::id_t>& newSelection); |
104 | 27 | void mouseClick(const MouseClickInfo& info); |
51 | 28 | private: |
64
f99d52b1646b
grid snapping now also works with transformed grids
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
29 | void updateGridMatrix(); |
67 | 30 | glm::vec3 cameraVector() const; |
66
77c819262b7a
added a method to find out if the view is perpendicular to grid
Teemu Piippo <teemu@hecknology.net>
parents:
64
diff
changeset
|
31 | bool isGridPerpendicularToScreen(float threshold) const; |
61
4585d8d7a7ec
moved GridProgram to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
57
diff
changeset
|
32 | std::optional<GridProgram> gridProgram; |
70 | 33 | std::optional<AxesProgram> axesProgram; |
57
5c0005f63319
use glm::unProject to implement screenToModelCoordinates
Teemu Piippo <teemu@hecknology.net>
parents:
51
diff
changeset
|
34 | std::optional<glm::vec3> worldPosition; |
64
f99d52b1646b
grid snapping now also works with transformed grids
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
35 | glm::mat4 gridMatrix; |
f99d52b1646b
grid snapping now also works with transformed grids
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
36 | geom::Plane gridPlane; |
51 | 37 | int totalMouseMove = 0; |
73
97df974b5ed5
ldraw::Id is now templated for extra type safety
Teemu Piippo <teemu@hecknology.net>
parents:
70
diff
changeset
|
38 | QSet<ldraw::id_t> selection; |
47 | 39 | }; |
104 | 40 | |
41 | struct Canvas::MouseClickInfo | |
42 | { | |
43 | bool click; | |
44 | }; |