Fri, 16 Mar 2018 11:50:35 +0200
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
829
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
1 | /* |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1072 | 3 | * Copyright (C) 2013 - 2017 Teemu Piippo |
829
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
4 | * |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
1006
a6b462051ae0
Copyright header fix, some minor stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
986
diff
changeset
|
8 | * (at your option) any later version. |
829
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
9 | * |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
13 | * GNU General Public License for more details. |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
14 | * |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
17 | */ |
bb903e89e23c
- now with license headers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
827
diff
changeset
|
18 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #include <QPainter> |
830
a741a0b9df49
- updated filenames
Santeri Piippo <crimsondusk64@gmail.com>
parents:
829
diff
changeset
|
20 | #include "circleMode.h" |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include "../miscallenous.h" |
1145
02264bf0108d
Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1139
diff
changeset
|
22 | #include "../lddocument.h" |
842
e1c9010eb9e8
- moved ringFinder into root source directory, clearing the src/misc/ directory
Teemu Piippo <crimsondusk64@gmail.com>
parents:
840
diff
changeset
|
23 | #include "../ringFinder.h" |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
24 | #include "../primitives.h" |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1088
diff
changeset
|
25 | #include "../canvas.h" |
962
a4b463a7ee82
Rename MainWindow files
Teemu Piippo <crimsondusk64@gmail.com>
parents:
958
diff
changeset
|
26 | #include "../mainwindow.h" |
1025
4949da3fb4b3
Renamed ldObjectMath.cpp/.h to mathfunctions.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1024
diff
changeset
|
27 | #include "../mathfunctions.h" |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
28 | #include "../miscallenous.h" |
1151
0eddb5bcf25b
Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
29 | #include "../documentmanager.h" |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1019
diff
changeset
|
30 | #include "../grid.h" |
1149
502c866b8512
Moved LDQuadrilateral into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
31 | #include "../linetypes/modelobject.h" |
502c866b8512
Moved LDQuadrilateral into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
32 | #include "../linetypes/quadrilateral.h" |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
33 | |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1088
diff
changeset
|
34 | CircleMode::CircleMode(Canvas* canvas) : |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1088
diff
changeset
|
35 | Super {canvas} {} |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | |
1030
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
37 | |
827 | 38 | EditModeType CircleMode::type() const |
39 | { | |
40 | return EditModeType::Circle; | |
41 | } | |
42 | ||
1030
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
43 | |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
44 | double CircleMode::getCircleDrawDist(int position) const |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
46 | if (countof(m_drawedVerts) >= position + 1) |
958
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
47 | { |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1019
diff
changeset
|
48 | Vertex v1; |
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1019
diff
changeset
|
49 | |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
50 | if (countof(m_drawedVerts) >= position + 2) |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
51 | v1 = m_drawedVerts[position + 1]; |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1019
diff
changeset
|
52 | else |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
53 | v1 = renderer()->currentCamera().convert2dTo3d(renderer()->mousePosition(), grid()); |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1019
diff
changeset
|
54 | |
958
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
55 | Axis localx, localy; |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
56 | renderer()->getRelativeAxes(localx, localy); |
958
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
57 | double dx = m_drawedVerts[0][localx] - v1[localx]; |
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
58 | double dy = m_drawedVerts[0][localy] - v1[localy]; |
1180
2005e4147ad6
Grid::snap now snaps points.
Teemu Piippo <teemu@hecknology.net>
parents:
1179
diff
changeset
|
59 | return grid()->snap({hypot(dx, dy), 0}).x(); |
958
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
60 | } |
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
61 | |
1dc890c73e01
Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
62 | return 0.0; |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
63 | } |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
64 | |
1030
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
65 | |
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
66 | void CircleMode::endDraw() |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
67 | { |
1079
67c6e5d32e68
More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.
Teemu Piippo <teemu@hecknology.net>
parents:
1077
diff
changeset
|
68 | Model model {m_documents}; |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
69 | PrimitiveModel primitiveModel; |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
70 | primitiveModel.segments = m_window->ringToolSegments(); |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
71 | primitiveModel.divisions = m_window->ringToolHiRes() ? HighResolution : LowResolution; |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
72 | primitiveModel.ringNumber = 0; |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
73 | double dist0 (getCircleDrawDist (0)); |
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
74 | double dist1 (getCircleDrawDist (1)); |
1053 | 75 | LDDocument* primitiveFile; |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
76 | Matrix transform; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
77 | bool circleOrDisc = false; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
78 | |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
79 | if (dist1 < dist0) |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
80 | qSwap(dist0, dist1); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
81 | |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
82 | if (dist0 == dist1) |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
83 | { |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
84 | // If the radii are the same, there's no ring space to fill. Use a circle. |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
85 | primitiveModel.type = PrimitiveModel::Circle; |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
86 | primitiveFile = primitives()->getPrimitive(primitiveModel); |
1151
0eddb5bcf25b
Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
87 | transform = Matrix::fromRotationMatrix(renderer()->currentCamera().transformationMatrix(dist0)); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
88 | circleOrDisc = true; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
89 | } |
967 | 90 | else if (dist0 == 0 or dist1 == 0) |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
91 | { |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
92 | // If either radii is 0, use a disc. |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
93 | primitiveModel.type = PrimitiveModel::Disc; |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
94 | primitiveFile = primitives()->getPrimitive(primitiveModel); |
1151
0eddb5bcf25b
Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
95 | transform = Matrix::fromRotationMatrix(renderer()->currentCamera().transformationMatrix((dist0 != 0) ? dist0 : dist1)); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
96 | circleOrDisc = true; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
97 | } |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
98 | else if (g_RingFinder.findRings(dist0, dist1)) |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
99 | { |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
100 | // The ring finder found a solution, use that. Add the component rings to the file. |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
101 | primitiveModel.type = PrimitiveModel::Ring; |
1019
a2e4286adb0d
Split PrimitivePrompt into its new source files, renamed it to GeneratePrimitivePrompt
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1018
diff
changeset
|
102 | |
1053 | 103 | for (const RingFinder::Component& component : g_RingFinder.bestSolution()->getComponents()) |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
104 | { |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
105 | primitiveModel.ringNumber = component.num; |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
106 | primitiveFile = primitives()->getPrimitive(primitiveModel); |
1151
0eddb5bcf25b
Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
107 | Matrix matrix = Matrix::fromRotationMatrix(renderer()->currentCamera().transformationMatrix(component.scale)); |
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:
1261
diff
changeset
|
108 | model.emplace<LDSubfileReference>(primitiveFile->name(), matrix, m_drawedVerts.first()); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
109 | } |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
110 | } |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
111 | else |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
112 | { |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
113 | // Ring finder failed, last resort: draw the ring with quads |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
114 | Axis localx, localy, localz; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
115 | renderer()->getRelativeAxes (localx, localy); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
116 | localz = (Axis) (3 - localx - localy); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
117 | double x0 = m_drawedVerts[0][localx]; |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
118 | double y0 = m_drawedVerts[0][localy]; |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
119 | |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
120 | Vertex templ; |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
121 | templ.setCoordinate(localx, x0); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
122 | templ.setCoordinate(localy, y0); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
123 | templ.setCoordinate(localz, renderer()->getDepthValue()); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
124 | |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
125 | // Calculate circle coords |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
126 | QVector<QLineF> c0 = makeCircle(primitiveModel.segments, primitiveModel.divisions, dist0); |
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
127 | QVector<QLineF> c1 = makeCircle(primitiveModel.segments, primitiveModel.divisions, dist1); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
128 | |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
129 | for (int i = 0; i < primitiveModel.segments; ++i) |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
130 | { |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
131 | Vertex v0, v1, v2, v3; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
132 | v0 = v1 = v2 = v3 = templ; |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
133 | v0.setCoordinate (localx, v0[localx] + c0[i].x1()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
134 | v0.setCoordinate (localy, v0[localy] + c0[i].y1()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
135 | v1.setCoordinate (localx, v1[localx] + c0[i].x2()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
136 | v1.setCoordinate (localy, v1[localy] + c0[i].y2()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
137 | v2.setCoordinate (localx, v2[localx] + c1[i].x2()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
138 | v2.setCoordinate (localy, v2[localy] + c1[i].y2()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
139 | v3.setCoordinate (localx, v3[localx] + c1[i].x1()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
140 | v3.setCoordinate (localy, v3[localy] + c1[i].y1()); |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
141 | |
1261
5d2c9d36da9d
Removed LDObject::invert, inversion code moved to basic toolset
Santeri Piippo
parents:
1180
diff
changeset
|
142 | // Ensure the quads always are BFC-front towards the camera |
5d2c9d36da9d
Removed LDObject::invert, inversion code moved to basic toolset
Santeri Piippo
parents:
1180
diff
changeset
|
143 | if (static_cast<int>(renderer()->camera()) % 3 <= 0) |
5d2c9d36da9d
Removed LDObject::invert, inversion code moved to basic toolset
Santeri Piippo
parents:
1180
diff
changeset
|
144 | qSwap(v1, v3); |
5d2c9d36da9d
Removed LDObject::invert, inversion code moved to basic toolset
Santeri Piippo
parents:
1180
diff
changeset
|
145 | |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1134
diff
changeset
|
146 | LDQuadrilateral* quad = model.emplace<LDQuadrilateral>(v0, v1, v2, v3); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
147 | quad->setColor(MainColor); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
148 | } |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
149 | } |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
150 | |
1053 | 151 | if (circleOrDisc and primitiveFile) |
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:
1261
diff
changeset
|
152 | model.emplace<LDSubfileReference>(primitiveFile->name(), transform, m_drawedVerts.first()); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
153 | |
1077
952d6b3e7d11
Replaced uses of LDSpawn with the Model class in edit modes
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
154 | finishDraw (model); |
825
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
155 | } |
f7649c9bfd9a
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
824
diff
changeset
|
156 | |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
157 | /* |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
158 | * Which way around will we place our circle primitive? This only makes a difference if we're not drawing a full circle. |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
159 | * Result is an angle offset in radians. |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
160 | */ |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
161 | double CircleMode::orientation() const |
869
7184f3bae695
- circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents:
866
diff
changeset
|
162 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
163 | if (not m_drawedVerts.isEmpty()) |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
164 | { |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
165 | int divisions = m_window->ringToolHiRes() ? HighResolution : LowResolution; |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
166 | QPointF originSpot = renderer()->currentCamera().convert3dTo2d(m_drawedVerts.first()); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
167 | // Line from the origin of the circle to current mouse position |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
168 | QLineF hand1 = {originSpot, renderer()->mousePositionF()}; |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
169 | // Line from the origin spot to |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
170 | QLineF hand2 = {{0, 0}, {1, 0}}; |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
171 | // Calculate the angle between these hands and round it to whole divisions. |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
172 | double angleoffset = roundToInterval(-hand1.angleTo(hand2), 360.0 / divisions); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
173 | // Take the camera's depth coefficient into account here. This way, the preview is flipped if the |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
174 | // primitive also would be. |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
175 | return angleoffset * pi / 180.0 * renderer()->depthNegateFactor(); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
176 | } |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
177 | else |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
178 | { |
873
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
179 | return 0.0; |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
180 | } |
869
7184f3bae695
- circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents:
866
diff
changeset
|
181 | } |
7184f3bae695
- circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents:
866
diff
changeset
|
182 | |
1030
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
183 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
184 | void CircleMode::render (QPainter& painter) const |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
185 | { |
827 | 186 | QFontMetrics metrics = QFontMetrics (QFont()); |
824
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
187 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
188 | // If we have not specified the center point of the circle yet, preview it on the screen. |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
848
diff
changeset
|
189 | if (m_drawedVerts.isEmpty()) |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
190 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
191 | QPoint position2d = renderer()->currentCamera().convert3dTo2d(renderer()->position3D()); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
192 | renderer()->drawPoint(painter, position2d); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
193 | renderer()->drawBlipCoordinates(painter, renderer()->position3D(), position2d); |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
194 | return; |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
195 | } |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
196 | |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
197 | QVector<Vertex> innerverts, outerverts; |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
198 | QVector<QPointF> innerverts2d, outerverts2d; |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
199 | double innerdistance = getCircleDrawDist(0); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
200 | double outerdistance = countof(m_drawedVerts) >= 2 ? getCircleDrawDist (1) : -1; |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
201 | int divisions = m_window->ringToolHiRes() ? HighResolution : LowResolution; |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
202 | int segments = m_window->ringToolSegments(); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
203 | double angleUnit = 2 * pi / divisions; |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
204 | Axis relX, relY; |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
205 | renderer()->getRelativeAxes(relX, relY); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
206 | double angleoffset = (countof(m_drawedVerts) < 3 ? orientation() : m_angleOffset); |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
207 | |
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
208 | // Calculate the preview positions of vertices |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
209 | for (int i = 0; i < segments + 1; ++i) |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
210 | { |
869
7184f3bae695
- circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents:
866
diff
changeset
|
211 | const double sinangle (sin (angleoffset + i * angleUnit)); |
7184f3bae695
- circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents:
866
diff
changeset
|
212 | const double cosangle (cos (angleoffset + i * angleUnit)); |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
213 | Vertex vertex; |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
214 | vertex.setCoordinate (relX, m_drawedVerts[0][relX] + (cosangle * innerdistance)); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
215 | vertex.setCoordinate (relY, m_drawedVerts[0][relY] + (sinangle * innerdistance)); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
216 | innerverts << vertex; |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
217 | innerverts2d << renderer()->currentCamera().convert3dTo2d(vertex); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
218 | |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
219 | if (outerdistance != -1) |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
220 | { |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
221 | vertex.setCoordinate (relX, m_drawedVerts[0][relX] + (cosangle * outerdistance)); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
222 | vertex.setCoordinate (relY, m_drawedVerts[0][relY] + (sinangle * outerdistance)); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
223 | outerverts << vertex; |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
224 | outerverts2d << renderer()->currentCamera().convert3dTo2d(vertex); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
225 | } |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
226 | } |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
227 | |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
228 | QVector<QLineF> lines {segments}; |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
229 | |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
230 | if (outerdistance != -1 and outerdistance != innerdistance) |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
231 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
232 | painter.setBrush(m_polybrush); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
233 | painter.setPen(Qt::NoPen); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
234 | |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
235 | // Compile polygons |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
236 | for (int i = 0; i < segments; ++i) |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
237 | { |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
238 | QVector<QPointF> points; |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
239 | points << innerverts2d[i] |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
240 | << innerverts2d[i + 1] |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
241 | << outerverts2d[i + 1] |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
242 | << outerverts2d[i]; |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
243 | painter.drawPolygon (QPolygonF (points)); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
244 | lines.append({innerverts2d[i], innerverts2d[i + 1]}); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
245 | lines.append({outerverts2d[i], outerverts2d[i + 1]}); |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
246 | } |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
247 | |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
248 | // Add bordering edges for unclosed rings/discs |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
249 | if (segments != divisions) |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
250 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
251 | lines.append({innerverts2d.first(), outerverts2d.first()}); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
252 | lines.append({innerverts2d.last(), outerverts2d.last()}); |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
253 | } |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
254 | } |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
255 | else |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
256 | { |
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
257 | for (int i = 0; i < segments; ++i) |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
258 | lines.append({innerverts2d[i], innerverts2d[i + 1]}); |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
259 | } |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
260 | |
1008
74cb432812d3
Fixed circle, rectangle and line path modes not working anymore. Add blip coordinates to curve and line path modes. Circle mode for now only can show the coordinates of the initial blip
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
261 | // Draw green blips at where the points are |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
262 | for (const QPointF& point : innerverts2d + outerverts2d) |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
263 | renderer()->drawPoint(painter, point); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
264 | |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
265 | // Draw edge lines |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
266 | painter.setPen(renderer()->linePen()); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
267 | painter.drawLines(lines); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
268 | |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
269 | // Draw the current radius in the middle of the circle. |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
270 | QPoint origin = renderer()->currentCamera().convert3dTo2d (m_drawedVerts[0]); |
866
4951b737f8cb
- now able to spawn partial circular primitives
Teemu Piippo <crimsondusk64@gmail.com>
parents:
865
diff
changeset
|
271 | QString label = QString::number (innerdistance); |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
272 | painter.setPen(renderer()->textPen()); |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
273 | painter.drawText(origin.x() - (metrics.width(label) / 2), origin.y(), label); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
274 | |
1065
c8ecddbd99e9
Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents:
1063
diff
changeset
|
275 | if (countof(m_drawedVerts) >= 2) |
865
6d68840fcb26
- circle mode can now do hi-res
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
276 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
277 | painter.drawText(origin.x() - (metrics.width(label) / 2), |
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
278 | origin.y() + metrics.height(), QString::number(outerdistance)); |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
279 | } |
824
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
280 | } |
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
281 | |
873
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
282 | |
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
283 | bool CircleMode::preAddVertex (const Vertex&) |
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
284 | { |
1088
c6d242d2b619
Reworked and cleaned up the circle mode
Teemu Piippo <teemu@compsta2.com>
parents:
1082
diff
changeset
|
285 | m_angleOffset = orientation(); |
873
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
286 | return false; |
201083693300
- circle mode now locks the angle offset on final confirmation stage
Teemu Piippo <crimsondusk64@gmail.com>
parents:
870
diff
changeset
|
287 | } |
1030
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
288 | |
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
289 | |
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
290 | int CircleMode::maxVertices() const |
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
291 | { |
d931a7547578
Fixed circle mode not building the circle anymore
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1026
diff
changeset
|
292 | return 3; |
1045
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1030
diff
changeset
|
293 | } |