Sun, 04 Oct 2015 16:45:30 +0300
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
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
968 | 3 | * Copyright (C) 2013 - 2015 Teemu Piippo |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
19 | #include <QMouseEvent> |
830
a741a0b9df49
- updated filenames
Santeri Piippo <crimsondusk64@gmail.com>
parents:
828
diff
changeset
|
20 | #include "magicWandMode.h" |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
21 | #include "../ldDocument.h" |
962
a4b463a7ee82
Rename MainWindow files
Teemu Piippo <crimsondusk64@gmail.com>
parents:
952
diff
changeset
|
22 | #include "../mainwindow.h" |
827 | 23 | #include "../glRenderer.h" |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
25 | MagicWandMode::MagicWandMode (GLRenderer* renderer) : |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
26 | Super (renderer) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | // Get vertex<->object data |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
977
diff
changeset
|
29 | for (LDObject* obj : currentDocument()->objects()) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | // Note: this deliberately only takes vertex-objects into account. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | // The magic wand does not process subparts. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
33 | for (int i = 0; i < obj->numVertices(); ++i) |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
34 | m_vertices[obj->vertex (i)] << obj; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
35 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
37 | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
38 | EditModeType MagicWandMode::type() const |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
39 | { |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
40 | return EditModeType::MagicWand; |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
41 | } |
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
42 | |
944 | 43 | void MagicWandMode::fillBoundaries (LDObject* obj, QVector<BoundaryType>& boundaries, QVector<LDObject*>& candidates) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
44 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | // All boundaries obviously share vertices with the object, therefore they're all in the list |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
46 | // of candidates. |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
47 | for (LDObject* candidate : candidates) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
48 | { |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
49 | if (not isOneOf (candidate->type(), OBJ_Line, OBJ_CondLine) or candidate->vertex (0) == candidate->vertex (1)) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
50 | continue; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
51 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
52 | int matches = 0; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
53 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
54 | for (int i = 0; i < obj->numVertices(); ++i) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
55 | { |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
56 | if (not isOneOf (obj->vertex (i), candidate->vertex (0), candidate->vertex (1))) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
57 | continue; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
58 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
59 | if (++matches == 2) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
60 | { |
833
ad681d97d341
- magic wand: when flood-selecting surfaces, also pick any matching conditional lines
Santeri Piippo <crimsondusk64@gmail.com>
parents:
830
diff
changeset
|
61 | // Boundary found. If it's an edgeline, add it to the boundaries list, if a |
ad681d97d341
- magic wand: when flood-selecting surfaces, also pick any matching conditional lines
Santeri Piippo <crimsondusk64@gmail.com>
parents:
830
diff
changeset
|
62 | // conditional line, select it. |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
63 | if (candidate->type() == OBJ_CondLine) |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
64 | m_selection << candidate; |
833
ad681d97d341
- magic wand: when flood-selecting surfaces, also pick any matching conditional lines
Santeri Piippo <crimsondusk64@gmail.com>
parents:
830
diff
changeset
|
65 | else |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
66 | boundaries.append (std::make_tuple (candidate->vertex (0), candidate->vertex (1))); |
833
ad681d97d341
- magic wand: when flood-selecting surfaces, also pick any matching conditional lines
Santeri Piippo <crimsondusk64@gmail.com>
parents:
830
diff
changeset
|
67 | |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
68 | break; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
69 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
70 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
71 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
72 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
73 | |
944 | 74 | void MagicWandMode::doMagic (LDObject* obj, MagicWandMode::MagicType type) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
75 | { |
984 | 76 | if (obj == nullptr) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
77 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
78 | if (type == Set) |
819
e3d59b6bf053
- update the object list when the magic wand empties the selection when clicking on background
Santeri Piippo <crimsondusk64@gmail.com>
parents:
818
diff
changeset
|
79 | { |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
977
diff
changeset
|
80 | currentDocument()->clearSelection(); |
981
5d5d84ab2c48
Refactor MainWindow's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
81 | m_window->buildObjectList(); |
819
e3d59b6bf053
- update the object list when the magic wand empties the selection when clicking on background
Santeri Piippo <crimsondusk64@gmail.com>
parents:
818
diff
changeset
|
82 | } |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
83 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
84 | return; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
85 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
86 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
87 | int matchesneeded = 0; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
88 | QVector<BoundaryType> boundaries; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
89 | LDObjectType objtype = obj->type(); |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | if (type != InternalRecursion) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
92 | { |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
93 | m_selection.clear(); |
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
94 | m_selection.append (obj); |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
96 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
97 | switch (obj->type()) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
98 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
99 | case OBJ_Line: |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
100 | case OBJ_CondLine: |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
101 | matchesneeded = 1; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
102 | break; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
103 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
104 | case OBJ_Triangle: |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
105 | case OBJ_Quad: |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
106 | matchesneeded = 2; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
107 | break; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
108 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
109 | default: |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
110 | return; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
111 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
112 | |
944 | 113 | QVector<LDObject*> candidates; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
114 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
115 | // Get the list of objects that touch this object, i.e. share a vertex |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
116 | // with this. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
117 | for (int i = 0; i < obj->numVertices(); ++i) |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
118 | candidates += m_vertices[obj->vertex (i)]; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
119 | |
966
a834e43a57da
Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
962
diff
changeset
|
120 | removeDuplicates (candidates); |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
121 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
122 | // If we're dealing with surfaces, get a list of boundaries. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
123 | if (matchesneeded > 1) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
124 | fillBoundaries (obj, boundaries, candidates); |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
125 | |
944 | 126 | for (LDObject* candidate : candidates) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
127 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
128 | try |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
129 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
130 | // If we're doing this on lines, we need exact type match. Surface types (quads and |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
131 | // triangles) can be mixed. Also don't consider self a candidate, and don't consider |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
132 | // objects we have already processed. |
840
d077dd19bf9a
- changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents:
833
diff
changeset
|
133 | if ((candidate == obj) or |
d077dd19bf9a
- changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents:
833
diff
changeset
|
134 | (candidate->color() != obj->color()) or |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
135 | (m_selection.contains (candidate)) or |
840
d077dd19bf9a
- changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents:
833
diff
changeset
|
136 | (matchesneeded == 1 and (candidate->type() != objtype)) or |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
137 | ((candidate->numVertices() > 2) ^ (matchesneeded == 2))) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
138 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
139 | throw 0; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
140 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
141 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
142 | // Now ensure the two objects share enough vertices. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
143 | QVector<Vertex> matches; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
144 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
145 | for (int i = 0; i < obj->numVertices(); ++i) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
146 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
147 | for (int j = 0; j < candidate->numVertices(); ++j) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
148 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
149 | if (obj->vertex(i) == candidate->vertex(j)) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
150 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
151 | matches << obj->vertex(i); |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
152 | break; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
153 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
154 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
155 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
156 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
157 | if (matches.size() < matchesneeded) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
158 | throw 0; // Not enough matches. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
159 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
160 | // Check if a boundary gets in between the objects. |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
161 | for (auto boundary : boundaries) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
162 | { |
966
a834e43a57da
Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
962
diff
changeset
|
163 | if (isOneOf (matches[0], std::get<0> (boundary), std::get<1> (boundary)) and |
a834e43a57da
Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
962
diff
changeset
|
164 | isOneOf (matches[1], std::get<0> (boundary), std::get<1> (boundary))) |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
165 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
166 | throw 0; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
167 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
168 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
169 | |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
844
diff
changeset
|
170 | m_selection.append (candidate); |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
171 | doMagic (candidate, InternalRecursion); |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
172 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
173 | catch (int&) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
174 | { |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
175 | continue; |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
176 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
177 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
178 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
179 | switch (type) |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
180 | { |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
181 | case Set: |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
977
diff
changeset
|
182 | currentDocument()->clearSelection(); |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
183 | case Additive: |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
184 | for (LDObject* obj : m_selection) |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
185 | obj->select(); |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
186 | break; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
187 | |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
188 | case Subtractive: |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
189 | for (LDObject* obj : m_selection) |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
190 | obj->deselect(); |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
191 | break; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
192 | |
977
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
193 | case InternalRecursion: |
dc3ceb65cda7
More refactor and removal of g_win uses
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
194 | break; |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
195 | } |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
196 | |
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
197 | if (type != InternalRecursion) |
981
5d5d84ab2c48
Refactor MainWindow's API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
198 | m_window->buildObjectList(); |
818
748ba8818af8
- added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
199 | } |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
200 | |
824
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
201 | bool MagicWandMode::mouseReleased (MouseEventData const& data) |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
202 | { |
824
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
203 | if (Super::mouseReleased (data)) |
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
204 | return true; |
6add2126e7ff
- more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents:
823
diff
changeset
|
205 | |
840
d077dd19bf9a
- changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents:
833
diff
changeset
|
206 | if (data.releasedButtons & Qt::LeftButton and not data.mouseMoved) |
827 | 207 | { |
208 | MagicType wandtype = MagicWandMode::Set; | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
209 | |
827 | 210 | if (data.keymods & Qt::ShiftModifier) |
211 | wandtype = MagicWandMode::Additive; | |
967 | 212 | else if (data.keymods & Qt::ControlModifier) |
827 | 213 | wandtype = MagicWandMode::Subtractive; |
214 | ||
215 | doMagic (renderer()->pickOneObject (data.ev->x(), data.ev->y()), wandtype); | |
216 | return true; | |
217 | } | |
218 | ||
219 | return false; | |
823
1a2f593f0c02
- saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents:
819
diff
changeset
|
220 | } |