Sat, 24 Mar 2018 11:57:24 +0200
reorganized headers
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1072 | 3 | * Copyright (C) 2013 - 2017 Teemu Piippo |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #include <limits> |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <QDir> |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include <QInputDialog> |
1156
c20ee66b6705
Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
22 | #include <QMessageBox> |
1294
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
23 | #include <QPushButton> |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | #include "../mainwindow.h" |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
25 | #include "../main.h" |
1145
02264bf0108d
Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1144
diff
changeset
|
26 | #include "../lddocument.h" |
1144
4f226fd97826
Renamed glRenderer.cpp → glrenderer.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1143
diff
changeset
|
27 | #include "../glrenderer.h" |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | #include "../colors.h" |
1025
4949da3fb4b3
Renamed ldObjectMath.cpp/.h to mathfunctions.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1017
diff
changeset
|
29 | #include "../mathfunctions.h" |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | #include "../ldobjectiterator.h" |
998 | 31 | #include "../documentmanager.h" |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1116
diff
changeset
|
32 | #include "../linetypes/comment.h" |
1141
7dc2c981937e
Split LDConditionalEdge and LDEdgeLine into new source pairs
Teemu Piippo <teemu@hecknology.net>
parents:
1139
diff
changeset
|
33 | #include "../linetypes/conditionaledge.h" |
7dc2c981937e
Split LDConditionalEdge and LDEdgeLine into new source pairs
Teemu Piippo <teemu@hecknology.net>
parents:
1139
diff
changeset
|
34 | #include "../linetypes/edgeline.h" |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1116
diff
changeset
|
35 | #include "../linetypes/empty.h" |
1149
502c866b8512
Moved LDQuadrilateral into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1148
diff
changeset
|
36 | #include "../linetypes/quadrilateral.h" |
1148
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1145
diff
changeset
|
37 | #include "../linetypes/triangle.h" |
1288
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
38 | #include "../parser.h" |
1164
eabcd749759a
Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents:
1163
diff
changeset
|
39 | #include "ui_replacecoordinatesdialog.h" |
eabcd749759a
Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents:
1163
diff
changeset
|
40 | #include "ui_editrawdialog.h" |
eabcd749759a
Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents:
1163
diff
changeset
|
41 | #include "ui_flipdialog.h" |
1294
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
42 | #include "ui_fixroundingerrors.h" |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
43 | #include "algorithmtoolset.h" |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
44 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | AlgorithmToolset::AlgorithmToolset (MainWindow* parent) : |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
46 | Toolset (parent) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
47 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
48 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
49 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
50 | void AlgorithmToolset::splitQuads() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
51 | { |
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
52 | int count = 0; |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
53 | |
1258 | 54 | for (LDObject* object : selectedObjects()) |
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
55 | { |
1258 | 56 | QModelIndex index = currentDocument()->indexOf(object); |
57 | ||
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
58 | if (object->numVertices() != 4) |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
59 | continue; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
60 | |
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
61 | Vertex v0 = object->vertex(0); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
62 | Vertex v1 = object->vertex(1); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
63 | Vertex v2 = object->vertex(2); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
64 | Vertex v3 = object->vertex(3); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
65 | LDColor color = object->color(); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
66 | |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
67 | // Create the two triangles based on this quadrilateral: |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
68 | // 0───3 0───3 3 |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
69 | // │ │ --→ │ ╱ ╱│ |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
70 | // │ │ --→ │ ╱ ╱ │ |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
71 | // │ │ --→ │╱ ╱ │ |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
72 | // 1───2 1 1───2 |
1269
ec691d9472b3
Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents:
1263
diff
changeset
|
73 | int row = index.row(); |
ec691d9472b3
Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents:
1263
diff
changeset
|
74 | currentDocument()->removeAt(index); |
ec691d9472b3
Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents:
1263
diff
changeset
|
75 | LDTriangle* triangle1 = currentDocument()->emplaceAt<LDTriangle>(row, v0, v1, v3); |
ec691d9472b3
Added LDObject serialization and refactored the internal resource managing to use it. No more tearing objects from one model into another, and this provides a stable way to keep an object's state in memory such as the edit history.
Santeri Piippo
parents:
1263
diff
changeset
|
76 | LDTriangle* triangle2 = currentDocument()->emplaceAt<LDTriangle>(row + 1, v1, v2, v3); |
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
77 | |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
78 | // The triangles also inherit the quad's color |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
79 | triangle1->setColor(color); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
80 | triangle2->setColor(color); |
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
81 | count += 1; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
82 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
83 | |
1074
a62f810ca26f
Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
Teemu Piippo <teemu@hecknology.net>
parents:
1073
diff
changeset
|
84 | print ("%1 quadrilaterals split", count); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
85 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
86 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
87 | void AlgorithmToolset::editRaw() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
88 | { |
1288
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
89 | if (countof(m_window->selectedIndexes()) != 1) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | |
1288
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
92 | QModelIndex index = *(m_window->selectedIndexes().begin()); |
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
93 | LDObject* object = currentDocument()->lookup(index); |
1142
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
94 | QDialog dialog; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | Ui::EditRawUI ui; |
1142
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
96 | ui.setupUi(&dialog); |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
97 | ui.code->setText (object->asText()); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
98 | |
1142
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
99 | if (object->type() == LDObjectType::Error) |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
100 | { |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
101 | ui.errorDescription->setText(static_cast<LDError*>(object)->reason()); |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
102 | } |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
103 | else |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
104 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
105 | ui.errorDescription->hide(); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
106 | ui.errorIcon->hide(); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
107 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
108 | |
1142
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
109 | if (dialog.exec() == QDialog::Accepted) |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
110 | { |
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
111 | // Reinterpret it from the text of the input field |
1288
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
112 | int row = index.row(); |
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
113 | currentDocument()->removeAt(row); |
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
114 | Parser::parseFromString(*currentDocument(), row, ui.code->text()); |
1142
19fe87c796f8
Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
115 | } |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
116 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
117 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
118 | void AlgorithmToolset::makeBorders() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
119 | { |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
120 | int count = 0; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
121 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
122 | for (LDObject* object : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
123 | { |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
124 | const LDObjectType type = object->type(); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
125 | |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
126 | if (type != LDObjectType::Quadrilateral and type != LDObjectType::Triangle) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
127 | continue; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
128 | |
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:
1078
diff
changeset
|
129 | Model lines {m_documents}; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
130 | |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
131 | if (type == LDObjectType::Quadrilateral) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
132 | { |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
133 | LDQuadrilateral* quad = static_cast<LDQuadrilateral*>(object); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
134 | lines.emplace<LDEdgeLine>(quad->vertex (0), quad->vertex (1)); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
135 | lines.emplace<LDEdgeLine>(quad->vertex (1), quad->vertex (2)); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
136 | lines.emplace<LDEdgeLine>(quad->vertex (2), quad->vertex (3)); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
137 | lines.emplace<LDEdgeLine>(quad->vertex (3), quad->vertex (0)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
138 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
139 | else |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
140 | { |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
141 | LDTriangle* triangle = static_cast<LDTriangle*>(object); |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
142 | lines.emplace<LDEdgeLine>(triangle->vertex (0), triangle->vertex (1)); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
143 | lines.emplace<LDEdgeLine>(triangle->vertex (1), triangle->vertex (2)); |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
144 | lines.emplace<LDEdgeLine>(triangle->vertex (2), triangle->vertex (0)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
145 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
146 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
147 | count += countof(lines.objects()); |
1258 | 148 | currentDocument()->merge(lines, currentDocument()->indexOf(object).row() + 1); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
149 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
150 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
151 | print(tr("Added %1 border lines"), count); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
152 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
153 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
154 | void AlgorithmToolset::roundCoordinates() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
155 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
156 | setlocale (LC_ALL, "C"); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
157 | int num = 0; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
158 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
159 | for (LDObject* obj : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
160 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
161 | LDMatrixObject* mo = dynamic_cast<LDMatrixObject*> (obj); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
162 | |
985
ed7b31b9f904
Remove "!= nullptr" expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
163 | if (mo) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
164 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
165 | Vertex v = mo->position(); |
1045
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1028
diff
changeset
|
166 | Matrix t = mo->transformationMatrix(); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
167 | |
971
c00f9665a9f8
Now compiles and links but crashes shortly after startup.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
970
diff
changeset
|
168 | v.apply ([&](Axis, double& a) |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
169 | { |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
170 | roundToDecimals (a, m_config->roundPositionPrecision()); |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
171 | }); |
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
172 | |
1013
fa025ba493d8
Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1012
diff
changeset
|
173 | applyToMatrix (t, [&](int, double& a) |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
174 | { |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
175 | roundToDecimals (a, m_config->roundMatrixPrecision()); |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
176 | }); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
177 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
178 | mo->setPosition (v); |
1045
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1028
diff
changeset
|
179 | mo->setTransformationMatrix (t); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
180 | num += 12; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
181 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
182 | else |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
183 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
184 | for (int i = 0; i < obj->numVertices(); ++i) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
185 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
186 | Vertex v = obj->vertex (i); |
971
c00f9665a9f8
Now compiles and links but crashes shortly after startup.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
970
diff
changeset
|
187 | v.apply ([&](Axis, double& a) |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
188 | { |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
189 | roundToDecimals (a, m_config->roundPositionPrecision()); |
970
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
969
diff
changeset
|
190 | }); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
191 | obj->setVertex (i, v); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
192 | num += 3; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
193 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
194 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
195 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
196 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
197 | print (tr ("Rounded %1 values"), num); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
198 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
199 | |
1294
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
200 | void AlgorithmToolset::fixRoundingErrors() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
201 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
202 | QDialog dialog {m_window}; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
203 | Ui::FixRoundingErrors ui; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
204 | ui.setupUi(&dialog); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
205 | auto updateDialogButtonBox = [&]() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
206 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
207 | QPushButton* button = ui.buttonBox->button(QDialogButtonBox::Ok); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
208 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
209 | if (button) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
210 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
211 | button->setEnabled( |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
212 | ui.checkboxX->isChecked() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
213 | or ui.checkboxY->isChecked() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
214 | or ui.checkboxZ->isChecked() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
215 | ); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
216 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
217 | }; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
218 | updateDialogButtonBox(); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
219 | connect(ui.checkboxX, &QCheckBox::clicked, updateDialogButtonBox); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
220 | connect(ui.checkboxY, &QCheckBox::clicked, updateDialogButtonBox); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
221 | connect(ui.checkboxZ, &QCheckBox::clicked, updateDialogButtonBox); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
222 | const int result = dialog.exec(); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
223 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
224 | if (result == QDialog::Accepted) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
225 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
226 | const Vertex referencePoint = { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
227 | ui.valueX->value(), |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
228 | ui.valueY->value(), |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
229 | ui.valueZ->value() |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
230 | }; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
231 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
232 | // Find out which axes to consider |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
233 | QSet<Axis> axes; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
234 | if (ui.checkboxX->isChecked()) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
235 | axes << X; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
236 | if (ui.checkboxY->isChecked()) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
237 | axes << Y; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
238 | if (ui.checkboxZ->isChecked()) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
239 | axes << Z; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
240 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
241 | // Make a reference distance from the threshold value. |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
242 | // If we're only comparing one dimension, this is the square of the threshold. |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
243 | // If we're comparing multiple dimensions, the distance is multiplied to adjust. |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
244 | double thresholdDistanceSquared = countof(axes) * std::pow(ui.threshold->value(), 2); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
245 | // Add some tiny leeway to fix rounding errors in the rounding error fixer. |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
246 | thresholdDistanceSquared += 1e-10; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
247 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
248 | auto fixVertex = [&](Vertex& vertex) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
249 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
250 | double distanceSquared = 0.0; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
251 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
252 | for (Axis axis : axes) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
253 | distanceSquared += std::pow(vertex[axis] - referencePoint[axis], 2); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
254 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
255 | if (distanceSquared < thresholdDistanceSquared) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
256 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
257 | // It's close enough, so clamp it |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
258 | for (Axis axis : axes) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
259 | vertex.setCoordinate(axis, referencePoint[axis]); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
260 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
261 | }; |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
262 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
263 | for (const QModelIndex& index : m_window->selectedIndexes()) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
264 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
265 | LDObject* object = currentDocument()->lookup(index); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
266 | |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
267 | if (object) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
268 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
269 | for (int i : range(0, 1, object->numVertices() - 1)) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
270 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
271 | Vertex point = object->vertex(i); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
272 | fixVertex(point); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
273 | object->setVertex(i, point); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
274 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
275 | if (object->type() == LDObjectType::SubfileReference) |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
276 | { |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
277 | LDSubfileReference* reference = static_cast<LDSubfileReference*>(object); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
278 | Vertex point = reference->position(); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
279 | fixVertex(point); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
280 | reference->setPosition(point); |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
281 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
282 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
283 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
284 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
285 | } |
adaad0b329e2
Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents:
1293
diff
changeset
|
286 | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
287 | void AlgorithmToolset::replaceCoordinates() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
288 | { |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
289 | QDialog dialog {m_window}; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
290 | Ui::ReplaceCoordsUI ui; |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
291 | ui.setupUi (&dialog); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
292 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
293 | if (not dialog.exec()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
294 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
295 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
296 | const double needle = ui.search->value(); |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
297 | const double replacement = ui.replacement->value(); |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
298 | const bool replaceAllValues= ui.any->isChecked(); |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
299 | const bool relative = ui.relative->isChecked(); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
300 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
301 | QList<Axis> selectedAxes; |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
302 | int count = 0; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
303 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
304 | if (ui.x->isChecked()) |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
305 | selectedAxes << X; |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
306 | if (ui.y->isChecked()) |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
307 | selectedAxes << Y; |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
308 | if (ui.z->isChecked()) |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
309 | selectedAxes << Z; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
310 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
311 | for (LDObject* obj : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
312 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
313 | for (int i = 0; i < obj->numVertices(); ++i) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
314 | { |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
315 | Vertex vertex = obj->vertex(i); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
316 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
317 | vertex.apply([&](Axis axis, double& coordinate) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
318 | { |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
319 | if (selectedAxes.contains(axis) and (replaceAllValues or isZero(coordinate - needle))) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
320 | { |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
321 | if (relative) |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
322 | coordinate += replacement; |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
323 | else |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
324 | coordinate = replacement; |
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
325 | count += 1; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
326 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
327 | }); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
328 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
329 | obj->setVertex(i, vertex); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
330 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
331 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
332 | |
1143
2008959603c9
Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents:
1142
diff
changeset
|
333 | print(tr("Altered %1 values"), count); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
334 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
335 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
336 | void AlgorithmToolset::flip() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
337 | { |
1165
e6974c4d9e55
Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents:
1164
diff
changeset
|
338 | QDialog dialog {m_window}; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
339 | Ui::FlipUI ui; |
1165
e6974c4d9e55
Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents:
1164
diff
changeset
|
340 | ui.setupUi(&dialog); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
341 | |
1165
e6974c4d9e55
Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents:
1164
diff
changeset
|
342 | if (not dialog.exec()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
343 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
344 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
345 | QList<Axis> sel; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
346 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
347 | if (ui.x->isChecked()) sel << X; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
348 | if (ui.y->isChecked()) sel << Y; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
349 | if (ui.z->isChecked()) sel << Z; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
350 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
351 | for (LDObject* obj : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
352 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
353 | for (int i = 0; i < obj->numVertices(); ++i) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
354 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
355 | Vertex v = obj->vertex (i); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
356 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
357 | v.apply ([&](Axis ax, double& a) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
358 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
359 | if (sel.contains (ax)) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
360 | a = -a; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
361 | }); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
362 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
363 | obj->setVertex (i, v); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
364 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
365 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
366 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
367 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
368 | void AlgorithmToolset::demote() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
369 | { |
1242 | 370 | int count = 0; |
371 | ||
372 | for (int i = 0; i < currentDocument()->size(); ++i) | |
373 | { | |
374 | LDObject* object = currentDocument()->objects()[i]; | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
375 | |
1242 | 376 | if (object->type() == LDObjectType::ConditionalEdge) |
377 | { | |
378 | Vertex v1 = object->vertex(0); | |
379 | Vertex v2 = object->vertex(1); | |
380 | LDColor color = object->color(); | |
381 | currentDocument()->removeAt(i); | |
382 | LDEdgeLine* edge = currentDocument()->emplaceAt<LDEdgeLine>(i, v1, v2); | |
383 | edge->setColor(color); | |
384 | count += 1; | |
385 | } | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
386 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
387 | |
1242 | 388 | print (tr ("Converted %1 conditional lines"), count); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
389 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
390 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
391 | bool AlgorithmToolset::isColorUsed (LDColor color) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
392 | { |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
393 | for (LDObject* obj : currentDocument()->objects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
394 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
395 | if (obj->isColored() and obj->color() == color) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
396 | return true; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
397 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
398 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
399 | return false; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
400 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
401 | |
1259
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
402 | LDObject* AlgorithmToolset::next(LDObject* object) |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
403 | { |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
404 | QModelIndex index = currentDocument()->indexOf(object); |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
405 | |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
406 | if (index.isValid()) |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
407 | return currentDocument()->getObject(index.row() + 1); |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
408 | else |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
409 | return nullptr; |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
410 | } |
0384b1d49786
moved LDObject::next to the algorithm toolset
Santeri Piippo
parents:
1258
diff
changeset
|
411 | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
412 | void AlgorithmToolset::autocolor() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
413 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
414 | LDColor color; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
415 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
416 | for (color = 0; color.isLDConfigColor(); ++color) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
417 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
418 | if (color.isValid() and not isColorUsed (color)) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
419 | break; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
420 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
421 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
422 | if (not color.isLDConfigColor()) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
423 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
424 | print (tr ("Cannot auto-color: all colors are in use!")); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
425 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
426 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
427 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
428 | for (LDObject* obj : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
429 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
430 | if (not obj->isColored()) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
431 | continue; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
432 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
433 | obj->setColor (color); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
434 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
435 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
436 | print (tr ("Auto-colored: new color is [%1] %2"), color.index(), color.name()); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
437 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
438 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
439 | void AlgorithmToolset::splitLines() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
440 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
441 | bool ok; |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
442 | int numSegments = QInputDialog::getInt (m_window, APPNAME, "Amount of segments:", |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
443 | m_config->splitLinesSegments(), 0, std::numeric_limits<int>::max(), 1, &ok); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
444 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
445 | if (not ok) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
446 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
447 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
448 | m_config->setSplitLinesSegments (numSegments); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
449 | |
978
4603d8fd063e
Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents:
972
diff
changeset
|
450 | for (LDObject* obj : selectedObjects()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
451 | { |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
452 | if (not isOneOf (obj->type(), LDObjectType::EdgeLine, LDObjectType::ConditionalEdge)) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
453 | continue; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
454 | |
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:
1078
diff
changeset
|
455 | Model segments {m_documents}; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
456 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
457 | for (int i = 0; i < numSegments; ++i) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
458 | { |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
459 | Vertex v0; |
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
460 | Vertex v1; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
461 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
462 | v0.apply ([&](Axis ax, double& a) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
463 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
464 | double len = obj->vertex (1)[ax] - obj->vertex (0)[ax]; |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
465 | a = (obj->vertex (0)[ax] + ((len * i) / numSegments)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
466 | }); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
467 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
468 | v1.apply ([&](Axis ax, double& a) |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
469 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
470 | double len = obj->vertex (1)[ax] - obj->vertex (0)[ax]; |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
471 | a = (obj->vertex (0)[ax] + ((len * (i + 1)) / numSegments)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
472 | }); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
473 | |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
474 | if (obj->type() == LDObjectType::EdgeLine) |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
475 | segments.emplace<LDEdgeLine>(v0, v1); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
476 | else |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
477 | segments.emplace<LDConditionalEdge>(v0, v1, obj->vertex (2), obj->vertex (3)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
478 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
479 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
480 | currentDocument()->replace(obj, segments); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
481 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
482 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
483 | m_window->refresh(); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
484 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
485 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
486 | void AlgorithmToolset::subfileSelection() |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
487 | { |
1063
1f15c52c11f6
Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents:
1062
diff
changeset
|
488 | if (selectedObjects().isEmpty()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
489 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
490 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
491 | // Determine the title of the new subfile |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
492 | QString subfileTitle; |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
493 | LDComment* titleObject = dynamic_cast<LDComment*>(currentDocument()->getObject(0)); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
494 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
495 | if (titleObject) |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
496 | subfileTitle = "~" + titleObject->text(); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
497 | else |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
498 | subfileTitle = "~subfile"; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
499 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
500 | // Remove duplicate tildes |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
501 | while (subfileTitle.startsWith("~~")) |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
502 | subfileTitle.remove(0, 1); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
503 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
504 | // If this the parent document isn't already in s/, we need to stuff it into |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
505 | // a subdirectory named s/. Ensure it exists! |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
506 | QString topDirectoryName = Basename(Dirname(currentDocument()->fullPath())); |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
507 | QString parentDocumentPath = currentDocument()->fullPath(); |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
508 | QString subfileDirectory = Dirname(parentDocumentPath); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
509 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
510 | if (topDirectoryName != "s") |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
511 | { |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
512 | QString desiredPath = subfileDirectory + "/s"; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
513 | QString title = tr ("Create subfile directory?"); |
1156
c20ee66b6705
Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
514 | QString text = format(tr("The directory <b>%1</b> is suggested for subfiles. " |
c20ee66b6705
Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
515 | "This directory does not exist, do you want to create it?"), desiredPath); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
516 | |
1156
c20ee66b6705
Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
517 | if (QDir(desiredPath).exists() |
c20ee66b6705
Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1149
diff
changeset
|
518 | or QMessageBox::question(m_window, title, text, (QMessageBox::Yes | QMessageBox::No), QMessageBox::No) == QMessageBox::Yes) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
519 | { |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
520 | subfileDirectory = desiredPath; |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
521 | QDir().mkpath(subfileDirectory); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
522 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
523 | else |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
524 | return; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
525 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
526 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
527 | // Determine the body of the name of the subfile |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
528 | QString fullSubfileName; |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
529 | |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
530 | if (not parentDocumentPath.isEmpty()) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
531 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
532 | // Chop existing '.dat' suffix |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
533 | if (parentDocumentPath.endsWith (".dat")) |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
534 | parentDocumentPath.chop (4); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
535 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
536 | // Remove the s?? suffix if it's there, otherwise we'll get filenames |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
537 | // like s01s01.dat when subfiling subfiles. |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
538 | QRegExp subfilesuffix {"s[0-9][0-9]$"}; |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
539 | if (subfilesuffix.indexIn(parentDocumentPath) != -1) |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
540 | parentDocumentPath.chop(subfilesuffix.matchedLength()); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
541 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
542 | int subfileIndex = 1; |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
543 | QString digits; |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
544 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
545 | // Now find the appropriate filename. Increase the number of the subfile until we find a name which isn't already taken. |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
546 | do |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
547 | { |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
548 | digits.setNum(subfileIndex++); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
549 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
550 | // Pad it with a zero |
1065
c8ecddbd99e9
Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents:
1064
diff
changeset
|
551 | if (countof(digits) == 1) |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
552 | digits.prepend("0"); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
553 | |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
554 | fullSubfileName = subfileDirectory + "/" + Basename(parentDocumentPath) + "s" + digits + ".dat"; |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
555 | } while (m_documents->findDocumentByName("s\\" + Basename(fullSubfileName)) != nullptr or QFile {fullSubfileName}.exists()); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
556 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
557 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
558 | // Create the new subfile document |
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
559 | LDDocument* subfile = m_window->newDocument(); |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
560 | subfile->setFullPath(fullSubfileName); |
1312 | 561 | subfile->header.description = subfileTitle; |
562 | subfile->header.type = LDHeader::Subpart; | |
563 | subfile->header.name = LDDocument::shortenName(fullSubfileName); | |
564 | subfile->header.author = format("%1 [%2]", m_config->defaultName(), m_config->defaultUser()); | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
565 | |
1312 | 566 | if (::config->useCaLicense()) |
567 | subfile->header.license = LDHeader::CaLicense; | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
568 | |
1312 | 569 | subfile->setWinding(currentDocument()->winding()); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
570 | |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
571 | // Copy the body over to the new document |
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
572 | for (LDObject* object : selectedObjects()) |
1288
d1e45f90654b
Header parsing complete, moved all parsing code into a new class. Documents are now all loaded in one go.
Teemu Piippo <teemu@hecknology.net>
parents:
1269
diff
changeset
|
573 | Parser::parseFromString(*subfile, Parser::EndOfModel, object->asText()); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
574 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
575 | // Try save it |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
576 | if (m_window->save(subfile, true)) |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
577 | { |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
578 | // Where to insert the subfile reference? |
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
579 | // TODO: the selection really should be sorted by position... |
1258 | 580 | int referencePosition = m_window->selectedIndexes().begin()->row(); |
1166
d2e78bb77763
Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents:
1165
diff
changeset
|
581 | |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
582 | // Save was successful. Delete the original selection now from the |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
583 | // main document. |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
584 | for (LDObject* object : selectedObjects().toList()) |
1073
a0a0d581309b
Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents:
1072
diff
changeset
|
585 | currentDocument()->remove(object); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
586 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
587 | // Add a reference to the new subfile to where the selection was |
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:
1259
diff
changeset
|
588 | currentDocument()->emplaceAt<LDSubfileReference>(referencePosition, subfile->name(), Matrix::identity, Vertex {0, 0, 0}); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
589 | |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
590 | // Refresh stuff |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
591 | m_window->updateDocumentList(); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
592 | m_window->doFullRefresh(); |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
593 | } |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
594 | else |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
595 | { |
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
596 | // Failed to save. |
1078
c72e3115a297
Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents:
1074
diff
changeset
|
597 | subfile->close(); |
969
b1742ee91d5b
Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
598 | } |
1125
d8f94e56d42e
Moved the definitions of all configuration options into a new text file and made the configuration collector read that.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
599 | } |