# HG changeset patch # User Teemu Piippo # Date 1485716835 -7200 # Node ID 6dac2d52bd9a16ea93c57047e6adf3af90645781 # Parent 67c6e5d32e68d34fd83b531d0a5173d87c3ead5b Removed the LDSpawn function and replaced its last use cases. diff -r 67c6e5d32e68 -r 6dac2d52bd9a src/ldObject.cpp --- a/src/ldObject.cpp Sun Jan 29 21:02:11 2017 +0200 +++ b/src/ldObject.cpp Sun Jan 29 21:07:15 2017 +0200 @@ -929,9 +929,8 @@ for (LDPolygon& poly : polygons) { - LDLine* line = LDSpawn (poly.vertices[0], poly.vertices[1]); + LDLine* line = model.emplace(poly.vertices[0], poly.vertices[1]); line->setColor (poly.color); - model.addObject(line); } } diff -r 67c6e5d32e68 -r 6dac2d52bd9a src/ldObject.h --- a/src/ldObject.h Sun Jan 29 21:02:11 2017 +0200 +++ b/src/ldObject.h Sun Jan 29 21:07:15 2017 +0200 @@ -148,22 +148,6 @@ Vertex m_coords[4]; }; -template -T* LDSpawn (Args... args) -{ - static_assert (std::is_base_of::value, - "spawn may only be used with LDObject-derivatives"); - T* result = new T (args..., nullptr); - - // Set default color. Relying on virtual functions, this cannot be done in the c-tor. - // TODO: store -1 as the default color - if (result->isColored()) - result->setColor (result->defaultColor()); - - return result; -} - -// // // Common code for objects with matrices. This class is multiple-derived in // and thus not used directly other than as a common storage point for matrices diff -r 67c6e5d32e68 -r 6dac2d52bd9a src/primitives.cpp --- a/src/primitives.cpp Sun Jan 29 21:02:11 2017 +0200 +++ b/src/primitives.cpp Sun Jan 29 21:07:15 2017 +0200 @@ -247,9 +247,8 @@ categoriesFile.close(); } -LDObjectList PrimitiveModel::generateBody() const +void PrimitiveModel::generateBody(Model& model) const { - LDObjectList objects; QVector conditionalLineSegments; QVector circle = makeCircle(segments, divisions, 1); @@ -263,12 +262,11 @@ switch (type) { case Circle: - { - LDLine* line = LDSpawn(); + { + LDLine* line = model.emplace(); line->setVertex(0, Vertex {x0, 0.0f, z0}); line->setVertex(1, Vertex {x1, 0.0f, z1}); line->setColor(EdgeColor); - objects.append(line); } break; @@ -314,14 +312,12 @@ Vertex v1 = {x1, y1, z1}; Vertex v2 = {x2, y2, z2}; Vertex v3 = {x3, y3, z3}; - LDQuad* quad = LDSpawn(v0, v1, v2, v3); + LDQuad* quad = model.emplace(v0, v1, v2, v3); quad->setColor(MainColor); if (type == Cylinder) quad->invert(); - objects.append(quad); - if (type == Cylinder or type == Cone) conditionalLineSegments.append(i); } @@ -348,12 +344,11 @@ // Disc negatives need to go the other way around, otherwise // they'll end up upside-down. - LDTriangle* segment = LDSpawn(); + LDTriangle* segment = model.emplace(); segment->setColor(MainColor); segment->setVertex(type == Disc ? 0 : 2, v0); segment->setVertex(1, v1); segment->setVertex(type == Disc ? 2 : 0, v2); - objects.append(segment); } break; } @@ -381,16 +376,13 @@ v0 = {v0[X] * ringNumber, 1.0, v0[Z] * ringNumber}; } - LDCondLine* line = LDSpawn(); + LDCondLine* line = model.emplace(); line->setColor(EdgeColor); line->setVertex(0, v0); line->setVertex(1, v1); line->setVertex(2, v2); line->setVertex(3, v3); - objects.append(line); } - - return objects; } @@ -482,20 +474,17 @@ author = format("%1 [%2]", m_config->defaultName(), m_config->defaultUser()); } - LDObjectList objs; - - objs.append(LDSpawn(description)); - objs.append(LDSpawn(format("Name: %1", fileName))); - objs.append(LDSpawn(format("Author: %1", author))); - objs.append(LDSpawn(format("!LDRAW_ORG Unofficial_%1Primitive", hires ? "48_" : ""))); - objs.append(LDSpawn(license)); - objs.append(LDSpawn()); - objs.append(LDSpawn(BfcStatement::CertifyCCW)); - objs.append(LDSpawn()); document->openForEditing(); document->history()->setIgnoring(false); - document->addObjects(objs); - document->addObjects(spec.generateBody()); + document->emplace(description); + document->emplace(format("Name: %1", fileName)); + document->emplace(format("Author: %1", author)); + document->emplace(format("!LDRAW_ORG Unofficial_%1Primitive", hires ? "48_" : "")); + document->emplace(license); + document->emplace(); + document->emplace(BfcStatement::CertifyCCW); + document->emplace(); + spec.generateBody(*document); document->addHistoryStep(); return document; } diff -r 67c6e5d32e68 -r 6dac2d52bd9a src/primitives.h --- a/src/primitives.h Sun Jan 29 21:02:11 2017 +0200 +++ b/src/primitives.h Sun Jan 29 21:07:15 2017 +0200 @@ -22,6 +22,7 @@ #include #include #include "main.h" +#include "model.h" class LDDocument; class Ui_GeneratePrimitiveDialog; @@ -51,7 +52,7 @@ int ringNumber; QString typeName() const; - LDObjectList generateBody() const; + void generateBody(Model& model) const; static QString typeName(Type type); QString makeFileName() const; };