24 #include "history.h" |
24 #include "history.h" |
25 #include "gldraw.h" |
25 #include "gldraw.h" |
26 #include "colors.h" |
26 #include "colors.h" |
27 |
27 |
28 // List of all LDObjects |
28 // List of all LDObjects |
29 vector<LDObject*> g_LDObjects; |
29 List<LDObject*> g_LDObjects; |
30 |
30 |
31 // ============================================================================= |
31 // ============================================================================= |
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
33 // ============================================================================= |
33 // ============================================================================= |
34 // LDObject constructors |
34 // LDObject constructors |
166 } |
166 } |
167 |
167 |
168 // ============================================================================= |
168 // ============================================================================= |
169 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
169 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
170 // ============================================================================= |
170 // ============================================================================= |
171 vector<LDTriangleObject*> LDQuadObject::splitToTriangles() { |
171 List<LDTriangleObject*> LDQuadObject::splitToTriangles() { |
172 // Create the two triangles based on this quadrilateral: |
172 // Create the two triangles based on this quadrilateral: |
173 // 0---3 0---3 3 |
173 // 0---3 0---3 3 |
174 // | | | / /| |
174 // | | | / /| |
175 // | | ==> | / / | |
175 // | | ==> | / / | |
176 // | | |/ / | |
176 // | | |/ / | |
275 } |
275 } |
276 |
276 |
277 // ============================================================================= |
277 // ============================================================================= |
278 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
278 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
279 // ============================================================================= |
279 // ============================================================================= |
280 vector<LDObject*> LDSubfileObject::inlineContents (bool deep, bool cache) { |
280 List<LDObject*> LDSubfileObject::inlineContents (bool deep, bool cache) { |
281 vector<LDObject*> objs, objcache; |
281 List<LDObject*> objs, objcache; |
282 |
282 |
283 // If we have this cached, just clone that |
283 // If we have this cached, just clone that |
284 if (deep && fileInfo()->cache().size()) { |
284 if (deep && fileInfo()->cache().size()) { |
285 for (LDObject* obj : fileInfo()->cache()) |
285 for (LDObject* obj : fileInfo()->cache()) |
286 objs << obj->clone(); |
286 objs << obj->clone(); |
297 // just add it into the objects normally. Also, we only cache immediate |
297 // just add it into the objects normally. Also, we only cache immediate |
298 // subfiles and this is not one. Yay, recursion! |
298 // subfiles and this is not one. Yay, recursion! |
299 if (deep && obj->getType() == LDObject::Subfile) { |
299 if (deep && obj->getType() == LDObject::Subfile) { |
300 LDSubfileObject* ref = static_cast<LDSubfileObject*> (obj); |
300 LDSubfileObject* ref = static_cast<LDSubfileObject*> (obj); |
301 |
301 |
302 vector<LDObject*> otherobjs = ref->inlineContents (true, false); |
302 List<LDObject*> otherobjs = ref->inlineContents (true, false); |
303 |
303 |
304 for (LDObject* otherobj : otherobjs) { |
304 for (LDObject* otherobj : otherobjs) { |
305 // Cache this object, if desired |
305 // Cache this object, if desired |
306 if (cache) |
306 if (cache) |
307 objcache << otherobj->clone(); |
307 objcache << otherobj->clone(); |
346 } |
346 } |
347 |
347 |
348 // ============================================================================= |
348 // ============================================================================= |
349 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
349 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
350 // ============================================================================= |
350 // ============================================================================= |
351 void LDObject::moveObjects (vector<LDObject*> objs, const bool up) { |
351 void LDObject::moveObjects (List<LDObject*> objs, const bool up) { |
352 // If we move down, we need to iterate the array in reverse order. |
352 // If we move down, we need to iterate the array in reverse order. |
353 const long start = up ? 0 : (objs.size() - 1); |
353 const long start = up ? 0 : (objs.size() - 1); |
354 const long end = up ? objs.size() : -1; |
354 const long end = up ? objs.size() : -1; |
355 const long incr = up ? 1 : -1; |
355 const long incr = up ? 1 : -1; |
356 vector<LDObject*> objsToCompile; |
356 List<LDObject*> objsToCompile; |
357 |
357 |
358 for (long i = start; i != end; i += incr) { |
358 for (long i = start; i != end; i += incr) { |
359 LDObject* obj = objs[i]; |
359 LDObject* obj = objs[i]; |
360 |
360 |
361 const long idx = obj->getIndex(), |
361 const long idx = obj->getIndex(), |
391 } |
391 } |
392 |
392 |
393 // ============================================================================= |
393 // ============================================================================= |
394 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
394 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
395 // ============================================================================= |
395 // ============================================================================= |
396 str LDObject::objectListContents (const vector<LDObject*>& objs) { |
396 str LDObject::objectListContents (const List<LDObject*>& objs) { |
397 bool firstDetails = true; |
397 bool firstDetails = true; |
398 str text = ""; |
398 str text = ""; |
399 |
399 |
400 if (objs.size() == 0) |
400 if (objs.size() == 0) |
401 return "nothing"; // :) |
401 return "nothing"; // :) |