Mon, 25 Mar 2013 01:04:20 +0200
57181.dat (Philo's model of the XL-motor) showcased a new problem.. there was no handling of unknown colors which led into crashes. Added stdout warnings, also added mid and dark stone colors
30
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
1 | /* |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
3 | * Copyright (C) 2013 Santeri `arezey` Piippo |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
4 | * |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
8 | * (at your option) any later version. |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
9 | * |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
13 | * GNU General Public License for more details. |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
14 | * |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
17 | */ |
31ff9aabd506
Licensed LDForge GPL3, added some more icons
Santeri Piippo <crimsondusk64@gmail.com>
parents:
29
diff
changeset
|
18 | |
0 | 19 | #ifndef __LDTYPES_H__ |
20 | #define __LDTYPES_H__ | |
21 | ||
22 | #include "common.h" | |
64
ada4679d5bce
Considerably improved sub-file inlining. Use a matrix class instead of double[9], educated myself on what matrix multiplication actually is and fixed the algorithm up. Aside from I/O problems, 32551.dat is correctly rendered now.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
63
diff
changeset
|
23 | #include "types.h" |
0 | 24 | |
25 | #define IMPLEMENT_LDTYPE(N) \ | |
26 | LD##N (); \ | |
24
d2d4d0154338
added dummy action for future inlining command. Also GCC says that deleting instances of classes with virtual members but no virtual destructors is bad.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
23
diff
changeset
|
27 | virtual ~LD##N (); \ |
0 | 28 | virtual LDObjectType_e getType () const { \ |
29 | return OBJ_##N; \ | |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
30 | } \ |
55
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
31 | virtual str getContents (); \ |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
32 | virtual LD##N* makeClone () { \ |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
33 | return new LD##N (*this); \ |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
34 | } |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
35 | |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
36 | class QTreeWidgetItem; |
0 | 37 | |
38 | // ============================================================================= | |
39 | // LDObjectType_e | |
40 | // | |
41 | // Object type codes | |
42 | // ============================================================================= | |
43 | enum LDObjectType_e { | |
25
c74bb88f537d
Deleted scanner.cpp (don't need it), merged model.cpp into io.cpp. Renamed LDForgeWindow to just ForgeWindow since I want the LD* prefix only be given to LDObject derivatives.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
24
diff
changeset
|
44 | OBJ_Unidentified, // Object is an uninitialized (LDObject) (SHOULD NEVER HAPPEN) |
c74bb88f537d
Deleted scanner.cpp (don't need it), merged model.cpp into io.cpp. Renamed LDForgeWindow to just ForgeWindow since I want the LD* prefix only be given to LDObject derivatives.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
24
diff
changeset
|
45 | OBJ_Gibberish, // Object is the result of failed parsing (LDGibberish) |
0 | 46 | OBJ_Empty, // Object represents an empty line (LDEmpty) |
47 | OBJ_Comment, // Object represents a comment (LDComment, code: 0) | |
48 | OBJ_Subfile, // Object represents a sub-file reference (LDSubfile, code: 1) | |
49 | OBJ_Line, // Object represents a line (LDLine, code: 2) | |
50 | OBJ_Triangle, // Object represents a triangle (LDTriangle, code: 3) | |
51 | OBJ_Quad, // Object represents a quadrilateral (LDQuad, code: 4) | |
52 | OBJ_CondLine, // Object represents a conditional line (LDCondLine, code: 5) | |
53 | OBJ_Vertex // Object is a vertex, LDForge extension object (LDVertex) | |
54 | }; | |
55 | ||
56 | // ============================================================================= | |
57 | // LDObject | |
58 | // | |
59 | // Base class object for all LD* types. Each LDObject represents a single line | |
60 | // in the LDraw code file. The virtual method getType returns an enumerator | |
61 | // which is a token of the object's type. The object can be casted into | |
62 | // sub-classes based on this enumerator. | |
63 | // ============================================================================= | |
64 | class LDObject { | |
65 | public: | |
66 | LDObject (); | |
24
d2d4d0154338
added dummy action for future inlining command. Also GCC says that deleting instances of classes with virtual members but no virtual destructors is bad.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
23
diff
changeset
|
67 | virtual ~LDObject (); |
0 | 68 | |
13
3955ff2a7d72
Added logf function to write to message log. Write warnings of unparsable files into the message log.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset
|
69 | // Index (i.e. line number) of this object |
66
12aca5d5a51e
Restructured inlining to use a proper caching.. one cache per sub-file reference? What was I thinking? *whacks self with a 55295.dat*
Santeri Piippo <crimsondusk64@gmail.com>
parents:
64
diff
changeset
|
70 | long getIndex (OpenFile* pFile); |
13
3955ff2a7d72
Added logf function to write to message log. Write warnings of unparsable files into the message log.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset
|
71 | |
50
7fd213c6b844
Turned the test palette action into a set color action for mass object coloring.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
43
diff
changeset
|
72 | // Color used by this object. Comments, gibberish and empty entries |
7fd213c6b844
Turned the test palette action into a set color action for mass object coloring.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
43
diff
changeset
|
73 | // do not use this field. |
7fd213c6b844
Turned the test palette action into a set color action for mass object coloring.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
43
diff
changeset
|
74 | short dColor; |
7fd213c6b844
Turned the test palette action into a set color action for mass object coloring.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
43
diff
changeset
|
75 | |
13
3955ff2a7d72
Added logf function to write to message log. Write warnings of unparsable files into the message log.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset
|
76 | // Type enumerator of this object |
0 | 77 | virtual LDObjectType_e getType () const { |
78 | return OBJ_Unidentified; | |
79 | }; | |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
80 | |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
81 | // A string that represents this line |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
82 | virtual str getContents () { |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
83 | return ""; |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
84 | } |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
85 | |
55
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
86 | virtual LDObject* makeClone () { |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
87 | return new LDObject (*this); |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
88 | } |
b08f10e668e5
Added clipboard, added delete action
Santeri Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset
|
89 | |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
90 | void commonInit (); |
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
91 | |
29
55406ce7446e
Added LDraw path setting dialog
Santeri Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset
|
92 | // Replace this LDObject with another LDObject. This method deletes the |
55406ce7446e
Added LDraw path setting dialog
Santeri Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset
|
93 | // object and any pointers to it become invalid. |
55406ce7446e
Added LDraw path setting dialog
Santeri Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset
|
94 | void replace (LDObject* replacement); |
55406ce7446e
Added LDraw path setting dialog
Santeri Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset
|
95 | |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
96 | QTreeWidgetItem* qObjListEntry; |
0 | 97 | }; |
98 | ||
99 | // ============================================================================= | |
100 | // LDGibberish | |
101 | // | |
102 | // Represents a line in the LDraw file that could not be properly parsed. It is | |
103 | // represented by a (!) ERROR in the code view. It exists for the purpose of | |
104 | // allowing garbage lines be debugged and corrected within LDForge. The member | |
105 | // zContent contains the contents of the unparsable line. | |
106 | // ============================================================================= | |
107 | class LDGibberish : public LDObject { | |
108 | public: | |
109 | IMPLEMENT_LDTYPE (Gibberish) | |
110 | ||
11
323390a03294
Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset
|
111 | LDGibberish (str _zContent, str _zReason); |
323390a03294
Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset
|
112 | |
0 | 113 | // Content of this unknown line |
14
6d9d8efae2f8
this thing got its own reinterpret_cast now. :P Added SetContents action for altering an object by contents and reinterpreting it.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset
|
114 | str zContents; |
11
323390a03294
Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset
|
115 | |
323390a03294
Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset
|
116 | // Why is this gibberish? |
323390a03294
Color gibberish red. Check for line code length for gibberish (must be 1 to be valid)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset
|
117 | str zReason; |
0 | 118 | }; |
119 | ||
120 | // ============================================================================= | |
121 | // LDEmptyLine | |
122 | // | |
123 | // Represents an empty line in the LDraw code file. | |
124 | // ============================================================================= | |
125 | class LDEmpty : public LDObject { | |
126 | public: | |
127 | IMPLEMENT_LDTYPE (Empty) | |
128 | }; | |
129 | ||
130 | // ============================================================================= | |
131 | // LDComment | |
132 | // | |
133 | // Represents a code-0 comment in the LDraw code file. Member zText contains | |
134 | // the text of the comment. | |
135 | // ============================================================================= | |
136 | class LDComment : public LDObject { | |
137 | public: | |
138 | IMPLEMENT_LDTYPE (Comment) | |
139 | ||
140 | str zText; // The text of this comment | |
141 | }; | |
142 | ||
143 | // ============================================================================= | |
144 | // LDSubfile | |
145 | // | |
146 | // Represents a single code-1 subfile reference. | |
147 | // ============================================================================= | |
148 | class LDSubfile : public LDObject { | |
149 | public: | |
150 | IMPLEMENT_LDTYPE (Subfile) | |
151 | ||
152 | vertex vPosition; // Position of the subpart | |
64
ada4679d5bce
Considerably improved sub-file inlining. Use a matrix class instead of double[9], educated myself on what matrix multiplication actually is and fixed the algorithm up. Aside from I/O problems, 32551.dat is correctly rendered now.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
63
diff
changeset
|
153 | matrix mMatrix; // Transformation matrix for the subpart |
0 | 154 | str zFileName; // Filename of the subpart |
23
69a91c1ff583
begin work on subfile caching
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset
|
155 | OpenFile* pFile; // Pointer to opened file for this subfile. nullptr if unopened. |
62
915fc477cb6a
Got inlining working. 3002.dat renders properly now! Now just to iron out the bugs and hone the behavior..
Santeri Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset
|
156 | |
915fc477cb6a
Got inlining working. 3002.dat renders properly now! Now just to iron out the bugs and hone the behavior..
Santeri Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset
|
157 | // Gets the inlined contents of this subfile. |
66
12aca5d5a51e
Restructured inlining to use a proper caching.. one cache per sub-file reference? What was I thinking? *whacks self with a 55295.dat*
Santeri Piippo <crimsondusk64@gmail.com>
parents:
64
diff
changeset
|
158 | std::vector<LDObject*> inlineContents (bool bDeepInline, bool bCache); |
0 | 159 | }; |
160 | ||
161 | // ============================================================================= | |
162 | // LDLine | |
163 | // | |
164 | // Represents a single code-2 line in the LDraw code file. v0 and v1 are the end | |
165 | // points of the line. The line is colored with dColor unless uncolored mode is | |
166 | // set. | |
167 | // ============================================================================= | |
168 | class LDLine : public LDObject { | |
169 | public: | |
170 | IMPLEMENT_LDTYPE (Line) | |
57
6e89589f1fe8
Added polygon bordering function
Santeri Piippo <crimsondusk64@gmail.com>
parents:
55
diff
changeset
|
171 | LDLine (vertex v1, vertex v2); |
0 | 172 | |
173 | vertex vaCoords[2]; // End points of this line | |
174 | }; | |
175 | ||
176 | // ============================================================================= | |
177 | // LDCondLine | |
178 | // | |
179 | // Represents a single code-5 conditional line. The end-points v0 and v1 are | |
180 | // inherited from LDLine, c0 and c1 are the control points of this line. | |
181 | // ============================================================================= | |
182 | class LDCondLine : public LDLine { | |
183 | public: | |
184 | IMPLEMENT_LDTYPE (CondLine) | |
185 | ||
40
215b9f8f0cd7
Added triangle, quad and condline to the add object dialog
Santeri Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset
|
186 | vertex vaCoords[4]; // End points + control points of this line |
0 | 187 | }; |
188 | ||
189 | // ============================================================================= | |
190 | // LDTriangle | |
191 | // | |
192 | // Represents a single code-3 triangle in the LDraw code file. Vertices v0, v1 | |
193 | // and v2 contain the end-points of this triangle. dColor is the color the | |
194 | // triangle is colored with. | |
195 | // ============================================================================= | |
196 | class LDTriangle : public LDObject { | |
197 | public: | |
198 | IMPLEMENT_LDTYPE (Triangle) | |
199 | ||
200 | vertex vaCoords[3]; | |
201 | ||
202 | LDTriangle (vertex _v0, vertex _v1, vertex _v2) { | |
203 | vaCoords[0] = _v0; | |
204 | vaCoords[1] = _v1; | |
205 | vaCoords[2] = _v2; | |
206 | } | |
207 | }; | |
208 | ||
209 | // ============================================================================= | |
210 | // LDQuad | |
211 | // | |
212 | // Represents a single code-4 quadrilateral. v0, v1, v2 and v3 are the end points | |
213 | // of the quad, dColor is the color used for the quad. | |
214 | // ============================================================================= | |
215 | class LDQuad : public LDObject { | |
216 | public: | |
217 | IMPLEMENT_LDTYPE (Quad) | |
218 | ||
219 | vertex vaCoords[4]; | |
21
9aebaaafa5da
Added split-quads-to-triangles function
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset
|
220 | |
9aebaaafa5da
Added split-quads-to-triangles function
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset
|
221 | // Split this quad into two triangles |
9aebaaafa5da
Added split-quads-to-triangles function
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset
|
222 | void splitToTriangles (); |
0 | 223 | }; |
224 | ||
225 | // ============================================================================= | |
226 | // LDVertex | |
227 | // | |
228 | // The vertex is another LDForce-specific extension. It represents a single | |
229 | // vertex which can be used as a parameter to tools or to store coordinates | |
230 | // with. Vertices are a part authoring tool and they should not appear in | |
231 | // finished parts. | |
232 | // ============================================================================= | |
233 | class LDVertex : public LDObject { | |
234 | public: | |
235 | IMPLEMENT_LDTYPE (Vertex) | |
236 | ||
237 | vertex vPosition; | |
238 | }; | |
239 | ||
240 | // ============================================================================= | |
241 | // Object type names. Pass the return value of getType as the index to get a | |
242 | // string representation of the object's type. | |
243 | extern const char* g_saObjTypeNames[]; | |
244 | ||
39
110669124caf
Begin work on dialogs for adding objects. Comments functional!
Santeri Piippo <crimsondusk64@gmail.com>
parents:
30
diff
changeset
|
245 | // Icons for these types |
110669124caf
Begin work on dialogs for adding objects. Comments functional!
Santeri Piippo <crimsondusk64@gmail.com>
parents:
30
diff
changeset
|
246 | extern const char* g_saObjTypeIcons[]; |
110669124caf
Begin work on dialogs for adding objects. Comments functional!
Santeri Piippo <crimsondusk64@gmail.com>
parents:
30
diff
changeset
|
247 | |
0 | 248 | #endif |