src/toolsets/algorithmtoolset.cpp

Sat, 04 Aug 2018 21:46:58 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sat, 04 Aug 2018 21:46:58 +0300
changeset 1428
ece049033adc
parent 1419
f7c53002a990
permissions
-rw-r--r--

fixed a crash when trying to open a document for the 3rd time after closing it 2 times

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
1326
69a90bd2dba2 Happy new year 2018
Teemu Piippo <teemu@hecknology.net>
parents: 1324
diff changeset
3 * Copyright (C) 2013 - 2018 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"
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 #include "../ldobjectiterator.h"
998
5be0ce31ce60 Now compiles again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 988
diff changeset
30 #include "../documentmanager.h"
1117
efcb47c64a72 Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
31 #include "../linetypes/comment.h"
1141
7dc2c981937e Split LDConditionalEdge and LDEdgeLine into new source pairs
Teemu Piippo <teemu@hecknology.net>
parents: 1139
diff changeset
32 #include "../linetypes/conditionaledge.h"
7dc2c981937e Split LDConditionalEdge and LDEdgeLine into new source pairs
Teemu Piippo <teemu@hecknology.net>
parents: 1139
diff changeset
33 #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
34 #include "../linetypes/empty.h"
1149
502c866b8512 Moved LDQuadrilateral into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents: 1148
diff changeset
35 #include "../linetypes/quadrilateral.h"
1148
96cb15a7611f Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
36 #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
37 #include "../parser.h"
1164
eabcd749759a Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents: 1163
diff changeset
38 #include "ui_replacecoordinatesdialog.h"
eabcd749759a Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents: 1163
diff changeset
39 #include "ui_editrawdialog.h"
eabcd749759a Moved all UI files from ui/ into src/dialogs/.
Teemu Piippo <teemu@hecknology.net>
parents: 1163
diff changeset
40 #include "ui_flipdialog.h"
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
41 #include "ui_fixroundingerrors.h"
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42 #include "algorithmtoolset.h"
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 AlgorithmToolset::AlgorithmToolset (MainWindow* parent) :
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 Toolset (parent)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
46 {
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 void AlgorithmToolset::splitQuads()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 {
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
51 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
52
1258
f5921a474d57 removed LDObject::lineNumber
Santeri Piippo
parents: 1242
diff changeset
53 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
54 {
1258
f5921a474d57 removed LDObject::lineNumber
Santeri Piippo
parents: 1242
diff changeset
55 QModelIndex index = currentDocument()->indexOf(object);
f5921a474d57 removed LDObject::lineNumber
Santeri Piippo
parents: 1242
diff changeset
56
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
57 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
58 continue;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59
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
60 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
61 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
62 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
63 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
64 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
65
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 // 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
67 // 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
68 // │ │ --→ │ ╱ ╱│
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 // 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
72 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
73 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
74 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
75 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
76
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 // 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
78 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
79 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
80 count += 1;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82
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
83 print ("%1 quadrilaterals split", count);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 }
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 void AlgorithmToolset::editRaw()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 {
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
88 if (countof(m_window->selectedIndexes()) != 1)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 return;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90
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
91 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
92 LDObject* object = currentDocument()->lookup(index);
1142
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
93 QDialog dialog;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94 Ui::EditRawUI ui;
1142
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
95 ui.setupUi(&dialog);
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
96 ui.code->setText (object->asText());
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97
1142
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
98 if (object->type() == LDObjectType::Error)
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
99 {
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
100 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
101 }
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 else
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 ui.errorDescription->hide();
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 ui.errorIcon->hide();
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107
1142
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
108 if (dialog.exec() == QDialog::Accepted)
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
109 {
19fe87c796f8 Fixed possible memory leak in AlgorithmToolset::editRaw().
Teemu Piippo <teemu@hecknology.net>
parents: 1141
diff changeset
110 // 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
111 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
112 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
113 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
114 }
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 }
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 void AlgorithmToolset::makeBorders()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 {
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
119 int count = 0;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
121 for (LDObject* object : selectedObjects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122 {
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
123 const LDObjectType type = object->type();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
124
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
125 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
126 continue;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
127
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
128 Model lines {m_documents};
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
129
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
130 if (type == LDObjectType::Quadrilateral)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
131 {
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
132 LDQuadrilateral* quad = static_cast<LDQuadrilateral*>(object);
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
133 lines.emplace<LDEdgeLine>(quad->vertex (0), quad->vertex (1));
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
134 lines.emplace<LDEdgeLine>(quad->vertex (1), quad->vertex (2));
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
135 lines.emplace<LDEdgeLine>(quad->vertex (2), quad->vertex (3));
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
136 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
137 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
138 else
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
139 {
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
140 LDTriangle* triangle = static_cast<LDTriangle*>(object);
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
141 lines.emplace<LDEdgeLine>(triangle->vertex (0), triangle->vertex (1));
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
142 lines.emplace<LDEdgeLine>(triangle->vertex (1), triangle->vertex (2));
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
143 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
144 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
146 count += countof(lines.objects());
1258
f5921a474d57 removed LDObject::lineNumber
Santeri Piippo
parents: 1242
diff changeset
147 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
148 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
149
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
150 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
151 }
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 void AlgorithmToolset::roundCoordinates()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
155 setlocale (LC_ALL, "C");
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
156 int num = 0;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
157
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
158 for (LDObject* object : selectedObjects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 {
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
160 LDMatrixObject* mo = dynamic_cast<LDMatrixObject*> (object);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
161
985
ed7b31b9f904 Remove "!= nullptr" expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents: 984
diff changeset
162 if (mo)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
163 {
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
164 QMatrix4x4 matrix = mo->transformationMatrix();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
166 for (int i : {0, 1, 2, 3})
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
167 for (int j : {0, 1, 2, 3})
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
168 matrix(i, j) = roundToDecimals(matrix(i, j), config::roundMatrixPrecision());
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
170 mo->setTransformationMatrix(matrix);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171 num += 12;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
172 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
173 else
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
174 {
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
175 for (int i = 0; i < object->numVertices(); ++i)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176 {
1324
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
177 Vertex vertex = object->vertex (i);
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
178 for (Axis axis : {X, Y, Z})
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
179 vertex[axis] = roundToDecimals(vertex[axis], config::roundPositionPrecision());
563a9b65777b roundToDecimals no longer needs an lvalue. applyToMatrix removed.
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
180 object->setVertex(i, vertex);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 num += 3;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
182 }
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 }
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 print (tr ("Rounded %1 values"), num);
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
189 void AlgorithmToolset::fixRoundingErrors()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
190 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
191 QDialog dialog {m_window};
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
192 Ui::FixRoundingErrors ui;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
193 ui.setupUi(&dialog);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
194 auto updateDialogButtonBox = [&]()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
195 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
196 QPushButton* button = ui.buttonBox->button(QDialogButtonBox::Ok);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
197
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
198 if (button)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
199 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
200 button->setEnabled(
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
201 ui.checkboxX->isChecked()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
202 or ui.checkboxY->isChecked()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
203 or ui.checkboxZ->isChecked()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
204 );
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
205 }
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 updateDialogButtonBox();
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
208 connect(ui.checkboxX, &QCheckBox::clicked, updateDialogButtonBox);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
209 connect(ui.checkboxY, &QCheckBox::clicked, updateDialogButtonBox);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
210 connect(ui.checkboxZ, &QCheckBox::clicked, updateDialogButtonBox);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
211 const int result = dialog.exec();
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
212
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
213 if (result == QDialog::Accepted)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
214 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
215 const Vertex referencePoint = {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
216 ui.valueX->value(),
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
217 ui.valueY->value(),
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
218 ui.valueZ->value()
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
219 };
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
220
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
221 // Find out which axes to consider
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
222 QSet<Axis> axes;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
223 if (ui.checkboxX->isChecked())
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
224 axes << X;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
225 if (ui.checkboxY->isChecked())
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
226 axes << Y;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
227 if (ui.checkboxZ->isChecked())
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
228 axes << Z;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
229
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
230 // 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
231 // 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
232 // If we're comparing multiple dimensions, the distance is multiplied to adjust.
1320
bdb4804bc09c Moved includes, added squared() function
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
233 double thresholdDistanceSquared = countof(axes) * pow(ui.threshold->value(), 2);
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
234 // 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
235 thresholdDistanceSquared += 1e-10;
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
236
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
237 auto fixVertex = [&](Vertex& vertex)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
238 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
239 double distanceSquared = 0.0;
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 for (Axis axis : axes)
1320
bdb4804bc09c Moved includes, added squared() function
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
242 distanceSquared += pow(vertex[axis] - referencePoint[axis], 2);
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
243
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
244 if (distanceSquared < thresholdDistanceSquared)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
245 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
246 // It's close enough, so clamp it
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
247 for (Axis axis : axes)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
248 vertex.setCoordinate(axis, referencePoint[axis]);
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 };
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 (const QModelIndex& index : m_window->selectedIndexes())
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
253 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
254 LDObject* object = currentDocument()->lookup(index);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
255
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
256 if (object)
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
257 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
258 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
259 {
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
260 Vertex point = object->vertex(i);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
261 fixVertex(point);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
262 object->setVertex(i, point);
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
263 }
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
264 if (object->hasMatrix())
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
265 {
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
266 LDMatrixObject* reference = static_cast<LDMatrixObject*>(object);
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
267 Vertex point = reference->position();
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
268 fixVertex(point);
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
269 QMatrix4x4 matrix = reference->transformationMatrix();
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
270 matrix.setColumn(3, {(float) point.x, (float) point.y, (float) point.z, 1});
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
271 reference->setTransformationMatrix(matrix);
1294
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
272 }
adaad0b329e2 Added a new tool for clamping vertices
Teemu Piippo <teemu@hecknology.net>
parents: 1293
diff changeset
273 }
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 }
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
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
278 void AlgorithmToolset::replaceCoordinates()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
279 {
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
280 QDialog dialog {m_window};
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
281 Ui::ReplaceCoordsUI ui;
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
282 ui.setupUi (&dialog);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
283
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
284 if (not dialog.exec())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
285 return;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
286
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
287 const double needle = ui.search->value();
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
288 const double replacement = ui.replacement->value();
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
289 const bool replaceAllValues= ui.any->isChecked();
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
290 const bool relative = ui.relative->isChecked();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
291
1419
f7c53002a990 replaced uses of QList with QVector
Teemu Piippo <teemu@hecknology.net>
parents: 1403
diff changeset
292 QVector<Axis> selectedAxes;
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
293 int count = 0;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
294
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
295 if (ui.x->isChecked())
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
296 selectedAxes << X;
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
297 if (ui.y->isChecked())
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
298 selectedAxes << Y;
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
299 if (ui.z->isChecked())
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
300 selectedAxes << Z;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
301
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
302 for (LDObject* obj : selectedObjects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
303 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
304 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
305 {
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
306 Vertex vertex = obj->vertex(i);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
307
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
308 vertex.apply([&](Axis axis, double& coordinate)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
309 {
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
310 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
311 {
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
312 if (relative)
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
313 coordinate += replacement;
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
314 else
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
315 coordinate = replacement;
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
316 count += 1;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
317 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
318 });
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
319
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
320 obj->setVertex(i, vertex);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
321 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
322 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
323
1143
2008959603c9 Cleanup AlgorithmToolset::replaceCoordinates()
Teemu Piippo <teemu@hecknology.net>
parents: 1142
diff changeset
324 print(tr("Altered %1 values"), count);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
325 }
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 void AlgorithmToolset::flip()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
328 {
1165
e6974c4d9e55 Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents: 1164
diff changeset
329 QDialog dialog {m_window};
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
330 Ui::FlipUI ui;
1165
e6974c4d9e55 Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents: 1164
diff changeset
331 ui.setupUi(&dialog);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
332
1165
e6974c4d9e55 Fixed more dialog instances in AlgorithmToolset.
Teemu Piippo <teemu@hecknology.net>
parents: 1164
diff changeset
333 if (not dialog.exec())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
334 return;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
335
1419
f7c53002a990 replaced uses of QList with QVector
Teemu Piippo <teemu@hecknology.net>
parents: 1403
diff changeset
336 QVector<Axis> sel;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
337
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
338 if (ui.x->isChecked()) sel << X;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
339 if (ui.y->isChecked()) sel << Y;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
340 if (ui.z->isChecked()) sel << Z;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
341
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
342 for (LDObject* obj : selectedObjects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
343 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
344 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
345 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
346 Vertex v = obj->vertex (i);
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
347
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
348 v.apply ([&](Axis ax, double& a)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
349 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
350 if (sel.contains (ax))
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
351 a = -a;
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
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
354 obj->setVertex (i, v);
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
355 }
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 }
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 void AlgorithmToolset::demote()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
360 {
1242
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
361 int count = 0;
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
362
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
363 for (int i = 0; i < currentDocument()->size(); ++i)
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
364 {
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
365 LDObject* object = currentDocument()->objects()[i];
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
366
1242
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
367 if (object->type() == LDObjectType::ConditionalEdge)
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
368 {
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
369 Vertex v1 = object->vertex(0);
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
370 Vertex v2 = object->vertex(1);
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
371 LDColor color = object->color();
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
372 currentDocument()->removeAt(i);
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
373 LDEdgeLine* edge = currentDocument()->emplaceAt<LDEdgeLine>(i, v1, v2);
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
374 edge->setColor(color);
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
375 count += 1;
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
376 }
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
377 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
378
1242
725cb1084044 Removed LDConditionalEdge::becomeEdgeLine
Santeri Piippo
parents: 1240
diff changeset
379 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
380 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
381
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
382 bool AlgorithmToolset::isColorUsed (LDColor color)
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
383 {
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
384 for (LDObject* obj : currentDocument()->objects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
385 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
386 if (obj->isColored() and obj->color() == color)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
387 return true;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
388 }
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 return false;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
391 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
392
1259
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
393 LDObject* AlgorithmToolset::next(LDObject* object)
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
394 {
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
395 QModelIndex index = currentDocument()->indexOf(object);
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
396
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
397 if (index.isValid())
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
398 return currentDocument()->getObject(index.row() + 1);
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
399 else
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
400 return nullptr;
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
401 }
0384b1d49786 moved LDObject::next to the algorithm toolset
Santeri Piippo
parents: 1258
diff changeset
402
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
403 void AlgorithmToolset::autocolor()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
404 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
405 LDColor color;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
406
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
407 for (color = 0; color.isLDConfigColor(); ++color)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
408 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
409 if (color.isValid() and not isColorUsed (color))
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
410 break;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
411 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
412
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
413 if (not color.isLDConfigColor())
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
414 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
415 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
416 return;
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
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
419 for (LDObject* obj : selectedObjects())
969
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 if (not obj->isColored())
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
422 continue;
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 obj->setColor (color);
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
425 }
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 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
428 }
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 void AlgorithmToolset::splitLines()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
431 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
432 bool ok;
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
433 int numSegments = QInputDialog::getInt (m_window, APPNAME, "Amount of segments:",
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1320
diff changeset
434 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
435
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
436 if (not ok)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
437 return;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
438
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1320
diff changeset
439 config::setSplitLinesSegments (numSegments);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
440
978
4603d8fd063e Make documents members of the main window
Teemu Piippo <crimsondusk64@gmail.com>
parents: 972
diff changeset
441 for (LDObject* obj : selectedObjects())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
442 {
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
443 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
444 continue;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
445
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
446 Model segments {m_documents};
969
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 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
449 {
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
450 Vertex v0;
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
451 Vertex v1;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
452
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
453 v0.apply ([&](Axis ax, double& a)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
454 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
455 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
456 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
457 });
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
458
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
459 v1.apply ([&](Axis ax, double& a)
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
460 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
461 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
462 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
463 });
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
464
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
465 if (obj->type() == LDObjectType::EdgeLine)
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
466 segments.emplace<LDEdgeLine>(v0, v1);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
467 else
1139
51303023d651 LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
468 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
469 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
470
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
471 currentDocument()->replace(obj, segments);
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
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
474 m_window->refresh();
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
475 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
476
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
477 void AlgorithmToolset::subfileSelection()
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
478 {
1063
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
479 if (selectedObjects().isEmpty())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
480 return;
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
481
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
482 // Determine the title of the new subfile
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
483 QString subfileTitle;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
484
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
485 if (currentDocument()->header.type != LDHeader::NoHeader)
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
486 subfileTitle = "~" + currentDocument()->header.description;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
487 else
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
488 subfileTitle = "~Untitled subfile";
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
489
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
490 // Remove duplicate tildes
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
491 while (subfileTitle.startsWith("~~"))
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
492 subfileTitle.remove(0, 1);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
493
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
494 // 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
495 // a subdirectory named s/. Ensure it exists!
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
496 QFileInfo path = currentDocument()->fullPath();
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
497 QString parentDocumentPath = currentDocument()->fullPath();
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
498 QDir subfileDirectory = path.absoluteDir();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
499
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
500 if (path.dir().dirName() != "s")
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
501 {
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
502 QDir desiredPath = subfileDirectory.filePath("s");
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
503
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
504 if (desiredPath.exists())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
505 {
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
506 subfileDirectory = desiredPath;
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
507 } else if (QMessageBox::question(
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
508 m_window,
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
509 tr("Create subfile directory?"),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
510 format(tr("The directory <b>%1</b> is suggested for subfiles. "
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
511 "This directory does not exist, do you want to create it?"),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
512 desiredPath.absolutePath()
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
513 ),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
514 (QMessageBox::Yes | QMessageBox::No),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
515 QMessageBox::No
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
516 ) == QMessageBox::Yes
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
517 ) {
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
518 if (subfileDirectory.mkdir("s"))
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
519 {
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
520 subfileDirectory = desiredPath;
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
521 }
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
522 else
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
523 {
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
524 QMessageBox::critical(
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
525 m_window,
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
526 tr("Error"),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
527 format(tr("Unable to create directory %1: %2!"),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
528 subfileDirectory.absolutePath(),
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
529 strerror(errno)
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
530 )
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
531 );
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
532 return;
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
533 }
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
534 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
535 else
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
536 {
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
537 return;
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
538 }
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
539 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
540
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
541 // Determine the body of the name of the subfile
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
542 QString fullSubfilePath;
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
543
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
544 if (not parentDocumentPath.isEmpty())
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
545 {
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
546 QString subfileRoot = QFileInfo(parentDocumentPath).baseName();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
547
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
548 // 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
549 // like s01s01.dat when subfiling subfiles.
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
550 QRegExp subfilesuffix {"s[0-9][0-9]$"};
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
551 if (subfilesuffix.indexIn(subfileRoot) != -1)
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
552 subfileRoot.chop(subfilesuffix.matchedLength());
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 int subfileIndex = 1;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
555 QString digits;
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
556 QString subfileName;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
557
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
558 // Now find the appropriate filename. Increase the number of the subfile until we find a
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
559 // name which isn't already taken.
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
560 do
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
561 {
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
562 digits.setNum(subfileIndex);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
563
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
564 // 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
565 if (countof(digits) == 1)
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
566 digits.prepend("0");
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
567
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
568 subfileName = subfileRoot + "s" + digits + ".dat";
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
569 fullSubfilePath = subfileDirectory.filePath(subfileName);
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
570 subfileIndex += 1;
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
571 } while (
1428
ece049033adc fixed a crash when trying to open a document for the 3rd time after closing it 2 times
Teemu Piippo <teemu@hecknology.net>
parents: 1419
diff changeset
572 m_documents->findDocumentByName("s\\" + subfileName) != m_documents->end()
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
573 or QFileInfo {fullSubfilePath}.exists()
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
574 );
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
575 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
576
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
577 // Create the new subfile document
1428
ece049033adc fixed a crash when trying to open a document for the 3rd time after closing it 2 times
Teemu Piippo <teemu@hecknology.net>
parents: 1419
diff changeset
578 LDDocument* subfile = m_documents->createNew(false);
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
579 subfile->setFullPath(fullSubfilePath);
1312
f2974f3ac1ab remove LDBfc
Teemu Piippo <teemu@hecknology.net>
parents: 1294
diff changeset
580 subfile->header.description = subfileTitle;
f2974f3ac1ab remove LDBfc
Teemu Piippo <teemu@hecknology.net>
parents: 1294
diff changeset
581 subfile->header.type = LDHeader::Subpart;
1331
f10b0c32a85d used Qt file info stuff in the auto-subfiler
Teemu Piippo <teemu@hecknology.net>
parents: 1328
diff changeset
582 subfile->header.name = LDDocument::shortenName(fullSubfilePath);
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1320
diff changeset
583 subfile->header.author = format("%1 [%2]", config::defaultName(), config::defaultUser());
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
584
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1320
diff changeset
585 if (config::useCaLicense())
1312
f2974f3ac1ab remove LDBfc
Teemu Piippo <teemu@hecknology.net>
parents: 1294
diff changeset
586 subfile->header.license = LDHeader::CaLicense;
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
587
1312
f2974f3ac1ab remove LDBfc
Teemu Piippo <teemu@hecknology.net>
parents: 1294
diff changeset
588 subfile->setWinding(currentDocument()->winding());
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
589
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
590 // 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
591 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
592 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
593
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
594 // Try save it
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
595 if (m_window->save(subfile, true))
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
596 {
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
597 // Where to insert the subfile reference?
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
598 // TODO: the selection really should be sorted by position...
1258
f5921a474d57 removed LDObject::lineNumber
Santeri Piippo
parents: 1242
diff changeset
599 int referencePosition = m_window->selectedIndexes().begin()->row();
1166
d2e78bb77763 Cleanup AlgorithmToolset::subfileSelection.
Teemu Piippo <teemu@hecknology.net>
parents: 1165
diff changeset
600
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
601 // 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
602 // main document.
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
603 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
604 currentDocument()->remove(object);
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
605
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
606 // Add a reference to the new subfile to where the selection was
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1331
diff changeset
607 currentDocument()->emplaceAt<LDSubfileReference>(referencePosition, subfile->name());
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
608
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
609 // Refresh stuff
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
610 m_window->updateDocumentList();
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
611 m_window->doFullRefresh();
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
612 }
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
613 else
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
614 {
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
615 // Failed to save.
1078
c72e3115a297 Removed uses of LDSpawn in the algorithm toolset
Teemu Piippo <teemu@hecknology.net>
parents: 1074
diff changeset
616 subfile->close();
969
b1742ee91d5b Split actions.cpp and actionsEdit.cpp into toolsets.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
617 }
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
618 }

mercurial