Sat, 03 Mar 2018 17:28:27 +0200
removed use of model() in LDSubfileReference::inlineContents
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1072 | 3 | * Copyright (C) 2013 - 2017 Teemu Piippo |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #pragma once |
768
29e6c5552388
- initial overhaul with smart pointers
Santeri Piippo <crimsondusk64@gmail.com>
parents:
767
diff
changeset
|
20 | #include <type_traits> |
1147
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
21 | #include "../main.h" |
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
22 | #include "../basics.h" |
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
23 | #include "../glShared.h" |
a26568aa3cce
Renamed ldObject.cpp → linetypes/modelobject.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1141
diff
changeset
|
24 | #include "../colors.h" |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
25 | |
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
|
26 | class Model; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | class LDDocument; |
776
624131d0163d
- selecting an invertnext'd object now also selects the invertnext
Santeri Piippo <crimsondusk64@gmail.com>
parents:
771
diff
changeset
|
28 | |
1138 | 29 | /* |
30 | * Object type codes. | |
31 | */ | |
1148
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
32 | enum class LDObjectType |
786
71d786ce0dcc
- LDObject::Type moved back to global namespace
Santeri Piippo <crimsondusk64@gmail.com>
parents:
785
diff
changeset
|
33 | { |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
34 | SubfileReference, // Object represents a sub-file reference |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1138
diff
changeset
|
35 | Quadrilateral, // Object represents a quadrilateral |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
36 | Triangle, // Object represents a triangle |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1138
diff
changeset
|
37 | EdgeLine, // Object represents a line |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1138
diff
changeset
|
38 | ConditionalEdge, // Object represents a conditional line |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
39 | Bfc, // Object represents a BFC statement |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
40 | Comment, // Object represents a comment |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
41 | Error, // Object is the result of failed parsing |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
42 | Empty, // Object represents an empty line |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
43 | BezierCurve, // Object represents a Bézier curve |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
44 | _End |
786
71d786ce0dcc
- LDObject::Type moved back to global namespace
Santeri Piippo <crimsondusk64@gmail.com>
parents:
785
diff
changeset
|
45 | }; |
71d786ce0dcc
- LDObject::Type moved back to global namespace
Santeri Piippo <crimsondusk64@gmail.com>
parents:
785
diff
changeset
|
46 | |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
47 | MAKE_ITERABLE_ENUM(LDObjectType) |
805
d88c0354de97
- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
795
diff
changeset
|
48 | |
1148
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
49 | inline int qHash(LDObjectType type) |
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
50 | { |
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
51 | return qHash(static_cast<int>(type)); |
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
52 | } |
96cb15a7611f
Moved LDTriangle into its own source pair.
Teemu Piippo <teemu@hecknology.net>
parents:
1147
diff
changeset
|
53 | |
1138 | 54 | /* |
55 | * Represents one line of code in an LDraw model file. | |
56 | */ | |
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
|
57 | class LDObject : public QObject |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
58 | { |
1138 | 59 | Q_OBJECT |
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
|
60 | |
786
71d786ce0dcc
- LDObject::Type moved back to global namespace
Santeri Piippo <crimsondusk64@gmail.com>
parents:
785
diff
changeset
|
61 | public: |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
62 | virtual QString asText() const = 0; // This object as LDraw code |
1138 | 63 | LDColor color() const; |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
64 | virtual LDColor defaultColor() const; // What color does the object default to? |
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
|
65 | Model* model() const; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
66 | LDPolygon* getPolygon(); |
1031
55c0d3beea0d
removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1028
diff
changeset
|
67 | virtual void getVertices (QSet<Vertex>& verts) const; |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
68 | virtual bool hasMatrix() const; // Does this object have a matrix and position? (see LDMatrixObject) |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
69 | qint32 id() const; |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
70 | virtual bool isColored() const; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
71 | bool isHidden() const; |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
72 | virtual bool isScemantic() const; // Does this object have meaning in the part model? |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
73 | bool isSelected() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
74 | void move (Vertex vect); |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
75 | virtual int numVertices() const; |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1244
diff
changeset
|
76 | virtual int numPolygonVertices() const; |
1084
63daaf652454
Split object list representation into virtual methods
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
77 | virtual QString objectListText() const; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
78 | QColor randomColor() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
79 | void setColor (LDColor color); |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
80 | void setHidden (bool value); |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
81 | void setVertex (int i, const Vertex& vert); |
1236
861bf8ebb8ec
BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents:
1149
diff
changeset
|
82 | bool isInverted() const; |
861bf8ebb8ec
BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents:
1149
diff
changeset
|
83 | void setInverted(bool value); |
1015
92c6ec099075
Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
84 | virtual int triangleCount() const; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
85 | virtual LDObjectType type() const = 0; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
86 | virtual QString typeName() const = 0; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
87 | const Vertex& vertex (int i) const; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
88 | |
1135
8e0691be0b6f
Removed the intXX type aliases and removed uses of intXX_t in favor of qintXX
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
89 | static LDObject* fromID(qint32 id); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | |
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
|
91 | signals: |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
92 | void codeChanged(QString before, QString after); |
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
|
93 | |
956
2af18ba2665f
Replace LDIterate function with LDObjectIterator class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
946
diff
changeset
|
94 | protected: |
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
|
95 | friend class Model; |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
96 | LDObject (Model* model = nullptr); |
956
2af18ba2665f
Replace LDIterate function with LDObjectIterator class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
946
diff
changeset
|
97 | virtual ~LDObject(); |
1082
1738bdaf36d6
The "all objects have valid models" invariant seems to be holding up now. At least basic drawing works again.
Teemu Piippo <teemu@hecknology.net>
parents:
1081
diff
changeset
|
98 | void setDocument(Model* model); |
956
2af18ba2665f
Replace LDIterate function with LDObjectIterator class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
946
diff
changeset
|
99 | |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
100 | template<typename T> |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
101 | void changeProperty(T* property, const T& value); |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
102 | |
786
71d786ce0dcc
- LDObject::Type moved back to global namespace
Santeri Piippo <crimsondusk64@gmail.com>
parents:
785
diff
changeset
|
103 | private: |
1236
861bf8ebb8ec
BFC INVERTNEXT objects are no longer individual objects
Santeri Piippo
parents:
1149
diff
changeset
|
104 | bool m_hasInvertNext = false; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
105 | bool m_isHidden; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
106 | bool m_isSelected; |
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
|
107 | Model* _model; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
108 | qint32 m_id; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
109 | LDColor m_color; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
110 | QColor m_randomColor; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
111 | Vertex m_coords[4]; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
112 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
113 | |
1244 | 114 | Q_DECLARE_METATYPE(LDObject*) |
115 | ||
1138 | 116 | /* |
117 | * Base class for objects with matrices. | |
118 | */ | |
843
9ac9060877cc
- moved LDMatrixObject to be an abstract class deriving from LDObject. LDSubfile only inherits from LDMatrixObject.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
835
diff
changeset
|
119 | class LDMatrixObject : public LDObject |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
120 | { |
843
9ac9060877cc
- moved LDMatrixObject to be an abstract class deriving from LDObject. LDSubfile only inherits from LDMatrixObject.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
835
diff
changeset
|
121 | Vertex m_position; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
122 | |
805
d88c0354de97
- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
795
diff
changeset
|
123 | public: |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
124 | const Vertex& position() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
125 | void setCoordinate (const Axis ax, double value); |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
126 | void setPosition (const Vertex& a); |
1045
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1034
diff
changeset
|
127 | void setTransformationMatrix (const Matrix& value); |
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1034
diff
changeset
|
128 | const Matrix& transformationMatrix() const; |
805
d88c0354de97
- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
795
diff
changeset
|
129 | |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
130 | protected: |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
131 | LDMatrixObject (Model* model = nullptr); |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
132 | LDMatrixObject (const Matrix& transformationMatrix, const Vertex& pos, Model* model = nullptr); |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
133 | |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
134 | private: |
1045
f726f8f49c7e
Unabbreviate "transform" to "transformationMatrix"
Teemu Piippo <teemu@hecknology.net>
parents:
1034
diff
changeset
|
135 | Matrix m_transformationMatrix; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
136 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
137 | |
1138 | 138 | /* |
139 | * Represents a line in the LDraw file that could not be properly parsed. | |
140 | */ | |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
141 | class LDError : public LDObject |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
142 | { |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
143 | public: |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
144 | static constexpr LDObjectType SubclassType = LDObjectType::Error; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
145 | |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
146 | virtual LDObjectType type() const override |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
147 | { |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
148 | return SubclassType; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
149 | } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
150 | |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
151 | virtual QString asText() const override; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
152 | QString reason() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
153 | QString contents() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
154 | QString fileReferenced() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
155 | void setFileReferenced (QString value); |
1084
63daaf652454
Split object list representation into virtual methods
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
156 | QString objectListText() const override; |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
157 | bool isColored() const override { return false; } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
158 | QString typeName() const override { return "error"; } |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
159 | |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
160 | protected: |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
161 | friend class Model; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
162 | LDError (Model* model); |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
163 | LDError (QString contents, QString reason, Model* model = nullptr); |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
164 | |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
165 | private: |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
166 | QString m_fileReferenced; // If this error was caused by inability to open a file, what file was that? |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
167 | QString m_contents; // The LDraw code that was being parsed |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
168 | QString m_reason; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
169 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
170 | |
1138 | 171 | /* |
172 | * Represents a 0 BFC statement in the LDraw code. | |
173 | */ | |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
174 | enum class BfcStatement |
847 | 175 | { |
176 | CertifyCCW, | |
177 | CCW, | |
178 | CertifyCW, | |
179 | CW, | |
180 | NoCertify, | |
181 | InvertNext, | |
182 | Clip, | |
183 | ClipCCW, | |
184 | ClipCW, | |
185 | NoClip, | |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
186 | _End |
1034 | 187 | }; |
847 | 188 | |
1123
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1117
diff
changeset
|
189 | MAKE_ITERABLE_ENUM(BfcStatement) |
847 | 190 | |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
191 | class LDBfc : public LDObject |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
192 | { |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
193 | public: |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
194 | static constexpr LDObjectType SubclassType = LDObjectType::Bfc; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
195 | |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
196 | virtual LDObjectType type() const override |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
197 | { |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
198 | return SubclassType; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
199 | } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
200 | |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
201 | virtual QString asText() const override; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
202 | protected: |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
203 | friend class Model; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
204 | LDBfc (Model* model); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
205 | |
805
d88c0354de97
- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
795
diff
changeset
|
206 | public: |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
207 | bool isScemantic() const override { return statement() == BfcStatement::InvertNext; } |
1084
63daaf652454
Split object list representation into virtual methods
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
208 | QString objectListText() const override; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
209 | BfcStatement statement() const; |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
210 | void setStatement (BfcStatement value); |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
211 | QString statementToString() const; |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
212 | bool isColored() const override { return false; } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
213 | QString typeName() const override { return "bfc"; } |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
214 | |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
215 | static QString statementToString (BfcStatement statement); |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
216 | |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
217 | protected: |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
218 | LDBfc (const BfcStatement type, Model* model = nullptr); |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
219 | |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
220 | private: |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
221 | BfcStatement m_statement; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
222 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
223 | |
1138 | 224 | /* |
225 | * Represents a single code-1 subfile reference. | |
226 | */ | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
227 | class LDSubfileReference : public LDMatrixObject |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
228 | { |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
229 | public: |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
230 | static constexpr LDObjectType SubclassType = LDObjectType::SubfileReference; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
231 | |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
232 | virtual LDObjectType type() const override |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
233 | { |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
234 | return SubclassType; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
235 | } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
236 | |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
237 | virtual QString asText() const override; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
238 | LDDocument* fileInfo() const; |
1031
55c0d3beea0d
removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1028
diff
changeset
|
239 | virtual void getVertices (QSet<Vertex>& verts) const override; |
1262
f6b253c17643
removed use of model() in LDSubfileReference::inlineContents
Santeri Piippo
parents:
1261
diff
changeset
|
240 | void inlineContents(class DocumentManager* context, Model& model, bool deep, bool render); |
805
d88c0354de97
- refactor. got rid of the LDSharedVertex nonsense, fixed up split lines action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
795
diff
changeset
|
241 | QList<LDPolygon> inlinePolygons(); |
1084
63daaf652454
Split object list representation into virtual methods
Teemu Piippo <teemu@hecknology.net>
parents:
1082
diff
changeset
|
242 | QString objectListText() const override; |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
243 | void setFileInfo (LDDocument* fileInfo); |
1015
92c6ec099075
Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
244 | int triangleCount() const override; |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
245 | bool hasMatrix() const override { return true; } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
246 | QString typeName() const override { return "subfilereference"; } |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
247 | |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
248 | protected: |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
249 | friend class Model; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
250 | LDSubfileReference (Model* model); |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
251 | LDSubfileReference(LDDocument* reference, const Matrix& transformationMatrix, const Vertex& position, Model* model = nullptr); |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
252 | |
988
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
253 | private: |
ac4a2ae54f76
Refactor LDObject API
Teemu Piippo <crimsondusk64@gmail.com>
parents:
968
diff
changeset
|
254 | LDDocument* m_fileInfo; |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
255 | }; |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
256 | |
1138 | 257 | /* |
258 | * Models a Bézier curve. It is stored as a special comment in the LDraw code file and can be inlined down into line segments. | |
259 | */ | |
1000
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
995
diff
changeset
|
260 | class LDBezierCurve : public LDObject |
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
995
diff
changeset
|
261 | { |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
262 | public: |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
263 | static constexpr LDObjectType SubclassType = LDObjectType::BezierCurve; |
1000
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
995
diff
changeset
|
264 | |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
265 | virtual LDObjectType type() const override |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
266 | { |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
267 | return SubclassType; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
268 | } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
269 | |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
270 | virtual QString asText() const override; |
1002
a3ee23db8393
Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1000
diff
changeset
|
271 | Vertex pointAt (qreal t) const; |
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
|
272 | void rasterize(Model& model, int segments); |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1015
diff
changeset
|
273 | QVector<LDPolygon> rasterizePolygons (int segments); |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
274 | int numVertices() const override { return 4; } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
275 | LDColor defaultColor() const override { return EdgeColor; } |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
276 | QString typeName() const override { return "beziercurve"; } |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
277 | |
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
278 | protected: |
1137
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
279 | friend class Model; |
2b6488d11305
Inlined away the LDOBJ macros in ldobject.h.
Teemu Piippo <teemu@hecknology.net>
parents:
1135
diff
changeset
|
280 | LDBezierCurve (Model* model); |
1081
47cde4087cc5
Made all LDObject constructors protected. Emplacement is now the only way to create objects.
Teemu Piippo <teemu@hecknology.net>
parents:
1080
diff
changeset
|
281 | LDBezierCurve (const Vertex& v0, const Vertex& v1, const Vertex& v2, const Vertex& v3, Model* model = nullptr); |
1000
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
995
diff
changeset
|
282 | }; |
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
995
diff
changeset
|
283 | |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
860
diff
changeset
|
284 | enum |
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
860
diff
changeset
|
285 | { |
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
860
diff
changeset
|
286 | LowResolution = 16, |
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
860
diff
changeset
|
287 | HighResolution = 48 |
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
860
diff
changeset
|
288 | }; |
1117
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
289 | |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
290 | /* |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
291 | * Changes a property in a manner that emits the appropriate signal to notify that the object changed. |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
292 | */ |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
293 | template<typename T> |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
294 | void LDObject::changeProperty(T* property, const T& value) |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
295 | { |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
296 | if (*property != value) |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
297 | { |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
298 | QString before = asText(); |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
299 | *property = value; |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
300 | emit codeChanged(before, asText()); |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
301 | } |
efcb47c64a72
Moved LDComment and LDEmpty into their own source file pairs.
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
302 | } |