Fri, 28 Dec 2018 00:03:47 +0200
moved GL stuff into a new gl namespace
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
1 | /* |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1326 | 3 | * Copyright (C) 2013 - 2018 Teemu Piippo |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
4 | * |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
9 | * |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
14 | * |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
17 | */ |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
18 | |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
19 | #include <QMouseEvent> |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
20 | #include "canvas.h" |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
21 | #include "grid.h" |
1145
02264bf0108d
Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1129
diff
changeset
|
22 | #include "lddocument.h" |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
23 | #include "primitives.h" |
1319 | 24 | #include "algorithms/geometry.h" |
25 | #include "generics/ring.h" | |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
26 | |
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
27 | Canvas::Canvas(LDDocument* document, QWidget* parent) : |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
28 | gl::Renderer {document, parent}, |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
29 | m_document {*document}, |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
30 | m_currentEditMode {AbstractEditMode::createByType (this, EditModeType::Select)} {} |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
31 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
32 | Canvas::~Canvas() |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
33 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
34 | delete m_currentEditMode; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
35 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
36 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
37 | void Canvas::overpaint(QPainter& painter) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
38 | { |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
39 | gl::Renderer::overpaint(painter); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
40 | QFontMetrics metrics {QFont {}}; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
41 | |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
42 | if (camera() != gl::FreeCamera) |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
43 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
44 | // Paint the coordinates onto the screen. |
1177
8661b9237ed5
Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents:
1168
diff
changeset
|
45 | Vertex idealized = currentCamera().idealize(m_position3D); |
8661b9237ed5
Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents:
1168
diff
changeset
|
46 | QString text = format(tr("X: %1, Y: %2, Z: %3, %4"), m_position3D[X], m_position3D[Y], m_position3D[Z], |
8661b9237ed5
Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents:
1168
diff
changeset
|
47 | idealized.toString(true)); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
48 | QFontMetrics metrics {font()}; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
49 | QRect textSize = metrics.boundingRect (0, 0, width(), height(), Qt::AlignCenter, text); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
50 | painter.setPen(textPen()); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
51 | painter.drawText(width() - textSize.width(), height() - 16, textSize.width(), textSize.height(), Qt::AlignCenter, text); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
52 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
53 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
54 | // Draw edit mode HUD |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
55 | m_currentEditMode->render(painter); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
56 | |
1105
4f4d219e527d
Moved triangle count rendering to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1104
diff
changeset
|
57 | // Render triangle count |
4f4d219e527d
Moved triangle count rendering to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1104
diff
changeset
|
58 | { |
4f4d219e527d
Moved triangle count rendering to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1104
diff
changeset
|
59 | QPoint renderPoint {4, height() - 4 - metrics.height() - metrics.descent()}; |
1350
eb2d3bc4fc73
better representation of fractions and large numbers
Teemu Piippo <teemu@hecknology.net>
parents:
1326
diff
changeset
|
60 | painter.drawText(renderPoint, format("△ %1", largeNumberRep(m_document.triangleCount()))); |
1105
4f4d219e527d
Moved triangle count rendering to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1104
diff
changeset
|
61 | } |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
62 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
63 | |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
64 | /* |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
65 | * Assuming we're currently viewing from a fixed camera, draw a backdrop into it. Currently this means drawing the grid. |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
66 | */ |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
67 | void Canvas::drawFixedCameraBackdrop() |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
68 | { |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
69 | // Find the top left corner of the grid |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
70 | Vertex topLeft = currentCamera().idealize(currentCamera().convert2dTo3d({0, 0})); |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
71 | Vertex bottomRight = currentCamera().idealize(currentCamera().convert2dTo3d({width(), height()})); |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
72 | qreal gridSize = grid()->coordinateSnap(); |
1376
83dd6cbd7f1a
added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents:
1369
diff
changeset
|
73 | |
83dd6cbd7f1a
added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents:
1369
diff
changeset
|
74 | if (config::useLineStipple()) |
83dd6cbd7f1a
added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents:
1369
diff
changeset
|
75 | glEnable(GL_LINE_STIPPLE); |
83dd6cbd7f1a
added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents:
1369
diff
changeset
|
76 | |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
77 | glBegin(GL_LINES); |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
78 | |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
79 | switch (grid()->type()) |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
80 | { |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
81 | case Grid::Cartesian: |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
82 | { |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
83 | qreal x0 = sign(topLeft.x) * (abs(topLeft.x) - fmod(abs(topLeft.x), gridSize)); |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
84 | qreal y0 = sign(topLeft.y) * (abs(topLeft.y) - fmod(abs(topLeft.y), gridSize)); |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
85 | |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
86 | static const auto prepareGridLine = [](qreal value) -> bool |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
87 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
88 | if (not isZero(value)) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
89 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
90 | if (isZero(fmod(value, 10.0))) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
91 | glColor4f(0, 0, 0, 0.6); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
92 | else |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
93 | glColor4f(0, 0, 0, 0.25); |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
94 | |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
95 | return true; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
96 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
97 | else |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
98 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
99 | return false; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
100 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
101 | }; |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
102 | |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
103 | for (qreal x = x0; x < bottomRight.x; x += gridSize) |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
104 | { |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
105 | if (prepareGridLine(x)) |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
106 | { |
1405
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
107 | xyz(glVertex3f, currentCamera().realize({x, -10000, 999})); |
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
108 | xyz(glVertex3f, currentCamera().realize({x, 10000, 999})); |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
109 | } |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
110 | } |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
111 | |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
112 | for (qreal y = y0; y < bottomRight.y; y += gridSize) |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
113 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
114 | if (prepareGridLine(y)) |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
115 | { |
1405
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
116 | xyz(glVertex3f, currentCamera().realize({-10000, y, 999})); |
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
117 | xyz(glVertex3f, currentCamera().realize({10000, y, 999})); |
1181
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
118 | } |
ca6d0ef9aadb
Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents:
1178
diff
changeset
|
119 | } |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
120 | } |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
121 | break; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
122 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
123 | case Grid::Polar: |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
124 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
125 | const QPointF pole = grid()->pole(); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
126 | const qreal size = grid()->coordinateSnap(); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
127 | Vertex topLeft = currentCamera().idealize(currentCamera().convert2dTo3d({0, 0})); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
128 | Vertex bottomRight = currentCamera().idealize(currentCamera().convert2dTo3d({width(), height()})); |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
129 | QPointF topLeft2d {topLeft.x, topLeft.y}; |
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
130 | QPointF bottomLeft2d {topLeft.x, bottomRight.y}; |
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
131 | QPointF bottomRight2d {bottomRight.x, bottomRight.y}; |
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1283
diff
changeset
|
132 | QPointF topRight2d {bottomRight.x, topLeft.y}; |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
133 | qreal smallestRadius = distanceFromPointToRectangle(pole, QRectF{topLeft2d, bottomRight2d}); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
134 | qreal largestRadius = max(QLineF {topLeft2d, pole}.length(), |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
135 | QLineF {bottomLeft2d, pole}.length(), |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
136 | QLineF {bottomRight2d, pole}.length(), |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
137 | QLineF {topRight2d, pole}.length()); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
138 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
139 | // Snap the radii to the grid. |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
140 | smallestRadius = round(smallestRadius / size) * size; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
141 | largestRadius = round(largestRadius / size) * size; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
142 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
143 | // Is the pole at (0, 0)? If so, then don't render the polar axes above the real ones. |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
144 | bool poleIsOrigin = isZero(pole.x()) and isZero(pole.y()); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
145 | glColor4f(0, 0, 0, 0.25); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
146 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
147 | // Render the axes |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
148 | for (int i = 0; i < grid()->polarDivisions() / 2; ++i) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
149 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
150 | qreal azimuth = (2.0 * pi) * i / grid()->polarDivisions(); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
151 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
152 | if (not poleIsOrigin or not isZero(fmod(azimuth, pi / 2))) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
153 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
154 | QPointF extremum = {cos(azimuth) * 10000, sin(azimuth) * 10000}; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
155 | QPointF A = pole + extremum; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
156 | QPointF B = pole - extremum; |
1405
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
157 | xyz(glVertex3f, currentCamera().realize({A.x(), A.y(), 999})); |
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
158 | xyz(glVertex3f, currentCamera().realize({B.x(), B.y(), 999})); |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
159 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
160 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
161 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
162 | for (qreal radius = smallestRadius; radius <= largestRadius; radius += size) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
163 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
164 | if (not isZero(radius)) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
165 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
166 | Vertex points[48]; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
167 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
168 | for (int i = 0; i < grid()->polarDivisions(); ++i) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
169 | { |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
170 | qreal azimuth = (2.0 * pi) * i / grid()->polarDivisions(); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
171 | QPointF point = pole + QPointF {radius * cos(azimuth), radius * sin(azimuth)}; |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
172 | points[i] = currentCamera().realize({point.x(), point.y(), 999}); |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
173 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
174 | |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
175 | for (int i = 0; i < grid()->polarDivisions(); ++i) |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
176 | { |
1405
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
177 | xyz(glVertex3f, points[i]); |
d2bf2e59a3ef
replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
178 | xyz(glVertex3f, ring(points, grid()->polarDivisions())[i + 1]); |
1184
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
179 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
180 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
181 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
182 | } |
393babf1319d
Polar grid is now togglable.
Teemu Piippo <teemu@hecknology.net>
parents:
1182
diff
changeset
|
183 | break; |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
184 | } |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
185 | |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
186 | glEnd(); |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
187 | glDisable(GL_LINE_STIPPLE); |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
188 | |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
189 | if (this->camera() < gl::FreeCamera) |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
190 | { |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
191 | GLfloat cullz = this->cullValues[static_cast<int>(this->camera())]; |
1404
16eb4257e662
replaced GLRotationMatrix with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents:
1392
diff
changeset
|
192 | QMatrix4x4 matrix = { |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
193 | 1, 0, 0, cullz, |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
194 | 0, 1, 0, 0, |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
195 | 0, 0, 1, 0, |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
196 | 0, 0, 0, 1, |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
197 | }; |
1404
16eb4257e662
replaced GLRotationMatrix with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents:
1392
diff
changeset
|
198 | glMultMatrixf(matrix.constData()); |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
199 | } |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
200 | } |
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1177
diff
changeset
|
201 | |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
202 | bool Canvas::freeCameraAllowed() const |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
203 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
204 | return m_currentEditMode->allowFreeCamera(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
205 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
206 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
207 | void Canvas::setEditMode(EditModeType a) |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
208 | { |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
209 | if (m_currentEditMode and m_currentEditMode->type() == a) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
210 | return; |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
211 | |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
212 | delete m_currentEditMode; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
213 | m_currentEditMode = AbstractEditMode::createByType(this, a); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
214 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
215 | // If we cannot use the free camera, use the top one instead. |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
216 | if (camera() == gl::FreeCamera and not m_currentEditMode->allowFreeCamera()) |
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
217 | setCamera(gl::TopCamera); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
218 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
219 | m_window->updateEditModeActions(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
220 | update(); |
1103
ac7db4c076c3
Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
221 | } |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
222 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
223 | EditModeType Canvas::currentEditModeType() const |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
224 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
225 | return m_currentEditMode->type(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
226 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
227 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
228 | LDDocument* Canvas::document() const |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
229 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
230 | return &m_document; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
231 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
232 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
233 | void Canvas::mouseDoubleClickEvent(QMouseEvent* event) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
234 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
235 | if (m_currentEditMode->mouseDoubleClicked (event)) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
236 | event->accept(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
237 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
238 | |
1392 | 239 | void Canvas::dropEvent(QDropEvent* /*event*/) |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
240 | { |
1283
3c3a5eb965f7
added an MVC interface to the primitives tree
Teemu Piippo <teemu@hecknology.net>
parents:
1274
diff
changeset
|
241 | /* |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
242 | if (m_window and event->source() == m_window->getPrimitivesTree()) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
243 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
244 | PrimitiveTreeItem* item = static_cast<PrimitiveTreeItem*> (m_window->getPrimitivesTree()->currentItem()); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
245 | QString primitiveName = item->primitive()->name; |
1257 | 246 | int position = m_window->suggestInsertPoint(); |
1263
0256edecda54
LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents:
1257
diff
changeset
|
247 | currentDocument()->emplaceAt<LDSubfileReference>( |
0256edecda54
LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents:
1257
diff
changeset
|
248 | position, |
0256edecda54
LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents:
1257
diff
changeset
|
249 | primitiveName, |
0256edecda54
LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents:
1257
diff
changeset
|
250 | Matrix {}, |
0256edecda54
LDSubfileReference now contains the name of the subfile and not a pointer anymore. Some methods now require a DocumentManager* for context on resolving the name.
Santeri Piippo
parents:
1257
diff
changeset
|
251 | Vertex {}); |
1257 | 252 | m_window->select(currentDocument()->index(position)); |
1168
0b450b4559b8
Removed GLRenderer::refresh(), update() does the job just as fine.
Teemu Piippo <teemu@hecknology.net>
parents:
1145
diff
changeset
|
253 | update(); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
254 | event->acceptProposedAction(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
255 | } |
1283
3c3a5eb965f7
added an MVC interface to the primitives tree
Teemu Piippo <teemu@hecknology.net>
parents:
1274
diff
changeset
|
256 | */ |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
257 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
258 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
259 | void Canvas::keyReleaseEvent(QKeyEvent* event) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
260 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
261 | m_currentEditMode->keyReleased(event); |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
262 | gl::Renderer::keyReleaseEvent(event); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
263 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
264 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
265 | void Canvas::mouseMoveEvent(QMouseEvent* event) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
266 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
267 | // Calculate 3d position of the cursor |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
268 | m_position3D = currentCamera().convert2dTo3d(mousePosition(), grid()); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
269 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
270 | if (not m_currentEditMode->mouseMoved(event)) |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
271 | gl::Renderer::mouseMoveEvent(event); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
272 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
273 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
274 | void Canvas::mouseReleaseEvent(QMouseEvent *event) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
275 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
276 | AbstractEditMode::MouseEventData data; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
277 | data.ev = event; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
278 | data.mouseMoved = mouseHasMoved(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
279 | data.keymods = keyboardModifiers(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
280 | data.releasedButtons = lastButtons() & ~event->buttons(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
281 | m_currentEditMode->mouseReleased(data); |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
282 | gl::Renderer::mouseReleaseEvent(event); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
283 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
284 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
285 | void Canvas::mousePressEvent(QMouseEvent *event) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
286 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
287 | if (m_currentEditMode->mousePressed(event)) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
288 | event->accept(); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
289 | |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
290 | gl::Renderer::mousePressEvent(event); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
291 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
292 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
293 | const Vertex& Canvas::position3D() const |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
294 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
295 | return m_position3D; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1103
diff
changeset
|
296 | } |
1106
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
297 | |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
298 | void Canvas::drawPoint(QPainter& painter, QPointF pos, QColor color) const |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
299 | { |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
300 | int pointSize = 8; |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
301 | QPen pen = gl::thinBorderPen; |
1106
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
302 | pen.setWidth(1); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
303 | painter.setPen(pen); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
304 | painter.setBrush(color); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
305 | painter.drawEllipse(pos.x() - pointSize / 2, pos.y() - pointSize / 2, pointSize, pointSize); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
306 | } |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
307 | |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
308 | void Canvas::drawBlipCoordinates(QPainter& painter, const Vertex& pos3d) const |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
309 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
310 | drawBlipCoordinates(painter, pos3d, currentCamera().convert3dTo2d(pos3d)); |
1106
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
311 | } |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
312 | |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
313 | void Canvas::drawBlipCoordinates(QPainter& painter, const Vertex& pos3d, QPointF pos) const |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
314 | { |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
315 | painter.setPen (textPen()); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
316 | painter.drawText (pos.x(), pos.y() - 8, pos3d.toString (true)); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
317 | } |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
318 | |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
319 | QPen Canvas::linePen() const |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
320 | { |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
321 | QPen linepen = gl::thinBorderPen; |
1106
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
322 | linepen.setWidth(2); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
323 | linepen.setColor(luma(backgroundColor()) < 40 ? Qt::white : Qt::black); |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
324 | return linepen; |
7541b0209057
Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents:
1105
diff
changeset
|
325 | } |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
326 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
327 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
328 | int Canvas::depthNegateFactor() const |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
329 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
330 | return currentCamera().isAxisNegated(Z) ? -1 : 1; |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
331 | } |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
332 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
333 | // ============================================================================= |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
334 | // |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
335 | void Canvas::getRelativeAxes(Axis& relativeX, Axis& relativeY) const |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
336 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
337 | relativeX = currentCamera().axisX(); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
338 | relativeY = currentCamera().axisY(); |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
339 | } |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
340 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
341 | // ============================================================================= |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
342 | // |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
343 | Axis Canvas::getRelativeZ() const |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
344 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
345 | return currentCamera().axisZ(); |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
346 | } |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
347 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
348 | // ============================================================================= |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
349 | // |
1390
3eace926af7f
added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents:
1380
diff
changeset
|
350 | void Canvas::setDrawPlane(const Plane& plane) |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
351 | { |
1390
3eace926af7f
added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents:
1380
diff
changeset
|
352 | m_drawPlane = plane; |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
353 | } |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
354 | |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
355 | // ============================================================================= |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
356 | // |
1390
3eace926af7f
added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents:
1380
diff
changeset
|
357 | const Plane& Canvas::drawPlane() const |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
358 | { |
1390
3eace926af7f
added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents:
1380
diff
changeset
|
359 | return m_drawPlane; |
1108
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
360 | } |
90d6f4b7782e
Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents:
1106
diff
changeset
|
361 | |
1110
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
362 | void Canvas::contextMenuEvent(QContextMenuEvent* event) |
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
363 | { |
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
364 | m_window->spawnContextMenu(event->globalPos()); |
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
365 | } |
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
366 | |
1392 | 367 | void Canvas::dragEnterEvent(QDragEnterEvent* /*event*/) |
1110
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
368 | { |
1283
3c3a5eb965f7
added an MVC interface to the primitives tree
Teemu Piippo <teemu@hecknology.net>
parents:
1274
diff
changeset
|
369 | /* |
1110
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
370 | if (m_window and event->source() == m_window->getPrimitivesTree() and m_window->getPrimitivesTree()->currentItem()) |
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
371 | event->acceptProposedAction(); |
1283
3c3a5eb965f7
added an MVC interface to the primitives tree
Teemu Piippo <teemu@hecknology.net>
parents:
1274
diff
changeset
|
372 | */ |
1110
ec3ee7da7806
Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
373 | } |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
374 | |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
375 | double Canvas::currentCullValue() const |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
376 | { |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
377 | if (this->camera() < gl::FreeCamera) |
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
378 | return gl::far - this->cullValues[static_cast<int>(this->camera())]; |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
379 | else |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
380 | return 0.0; |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
381 | } |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
382 | |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
383 | void Canvas::setCullValue(double value) |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
384 | { |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
385 | if (this->camera() < gl::FreeCamera) |
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
386 | this->cullValues[static_cast<int>(this->camera())] = gl::far - value; |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
387 | } |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
388 | |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
389 | void Canvas::clearCurrentCullValue() |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
390 | { |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1405
diff
changeset
|
391 | if (this->camera() < gl::FreeCamera) |
1369
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
392 | this->cullValues[static_cast<int>(this->camera())] = 0.0; |
1e2391b78d17
added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents:
1368
diff
changeset
|
393 | } |