diff options
-rw-r--r-- | openscad.pro | 2 | ||||
-rw-r--r-- | src/cgaladv.cc | 8 | ||||
-rw-r--r-- | src/csgnode.h | 2 | ||||
-rw-r--r-- | src/csgops.cc | 2 | ||||
-rw-r--r-- | src/dxflinextrude.cc | 2 | ||||
-rw-r--r-- | src/dxflinextrudenode.h | 2 | ||||
-rw-r--r-- | src/dxfrotextrude.cc | 2 | ||||
-rw-r--r-- | src/dxfrotextrudenode.h | 2 | ||||
-rw-r--r-- | src/import.cc | 2 | ||||
-rw-r--r-- | src/importnode.h | 2 | ||||
-rw-r--r-- | src/mainwin.cc | 6 | ||||
-rw-r--r-- | src/node.cc | 23 | ||||
-rw-r--r-- | src/node.h | 8 | ||||
-rw-r--r-- | src/primitives.cc | 4 | ||||
-rw-r--r-- | src/projection.cc | 2 | ||||
-rw-r--r-- | src/projectionnode.h | 2 | ||||
-rw-r--r-- | src/render.cc | 6 | ||||
-rw-r--r-- | src/surface.cc | 4 | ||||
-rw-r--r-- | src/transform.cc | 4 | ||||
-rw-r--r-- | test-code/dumptest.cc | 4 | ||||
-rw-r--r-- | test-code/dumptest.pro | 1 |
21 files changed, 80 insertions, 10 deletions
diff --git a/openscad.pro b/openscad.pro index fec7a79..8415b1f 100644 --- a/openscad.pro +++ b/openscad.pro @@ -9,6 +9,8 @@ UI_DIR = objects RCC_DIR = objects INCLUDEPATH += src +DEFINES += REMOVE_DUMP + macx { DEPLOYDIR = $$(MACOSX_DEPLOY_DIR) !isEmpty(DEPLOYDIR) { diff --git a/src/cgaladv.cc b/src/cgaladv.cc index e391ea8..4a7ba31 100644 --- a/src/cgaladv.cc +++ b/src/cgaladv.cc @@ -71,7 +71,9 @@ public: virtual CGAL_Nef_polyhedron renderCSGMesh() const; #endif virtual CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; AbstractNode *CgaladvModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const @@ -155,11 +157,11 @@ CGAL_Nef_polyhedron CgaladvNode::renderCSGMesh() const if (v->modinst->tag_background) continue; if (first) { - N = v->renderCsgMesh(); + N = v->renderCSGMesh(); if (N.dim != 0) first = false; } else { - CGAL_Nef_polyhedron tmp = v->renderCsgMesh(); + CGAL_Nef_polyhedron tmp = v->renderCSGMesh(); if (N.dim == 3 && tmp.dim == 3) { N.p3 = minkowski3(N.p3, tmp.p3); } @@ -212,6 +214,7 @@ CSGTerm *CgaladvNode::render_csg_term(double m[20], QVector<CSGTerm*> *highlight #endif // ENABLE_CGAL +#ifndef REMOVE_DUMP QString CgaladvNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -231,6 +234,7 @@ QString CgaladvNode::dump(QString indent) const } return dump_cache; } +#endif std::string CgaladvNode::toString() const { diff --git a/src/csgnode.h b/src/csgnode.h index 405dd96..3d08b81 100644 --- a/src/csgnode.h +++ b/src/csgnode.h @@ -27,7 +27,9 @@ public: virtual CGAL_Nef_polyhedron renderCSGMesh() const; #endif CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; #endif diff --git a/src/csgops.cc b/src/csgops.cc index 5baa149..da2c2e5 100644 --- a/src/csgops.cc +++ b/src/csgops.cc @@ -134,6 +134,7 @@ CSGTerm *CsgNode::render_csg_term(double m[20], QVector<CSGTerm*> *highlights, Q return t1; } +#ifndef REMOVE_DUMP QString CsgNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -150,6 +151,7 @@ QString CsgNode::dump(QString indent) const } return dump_cache; } +#endif std::string CsgNode::toString() const { diff --git a/src/dxflinextrude.cc b/src/dxflinextrude.cc index 1f6bc8c..741602d 100644 --- a/src/dxflinextrude.cc +++ b/src/dxflinextrude.cc @@ -299,6 +299,7 @@ PolySet *DxfLinearExtrudeNode::render_polyset(render_mode_e) const return ps; } +#ifndef REMOVE_DUMP QString DxfLinearExtrudeNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -326,6 +327,7 @@ QString DxfLinearExtrudeNode::dump(QString indent) const } return dump_cache; } +#endif std::string DxfLinearExtrudeNode::toString() const { diff --git a/src/dxflinextrudenode.h b/src/dxflinextrudenode.h index 2df52c8..3fa87c1 100644 --- a/src/dxflinextrudenode.h +++ b/src/dxflinextrudenode.h @@ -24,7 +24,9 @@ public: bool center, has_twist; QString filename, layername; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; #endif diff --git a/src/dxfrotextrude.cc b/src/dxfrotextrude.cc index 98f91f3..b32a949 100644 --- a/src/dxfrotextrude.cc +++ b/src/dxfrotextrude.cc @@ -197,6 +197,7 @@ PolySet *DxfRotateExtrudeNode::render_polyset(render_mode_e) const return ps; } +#ifndef REMOVE_DUMP QString DxfRotateExtrudeNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -217,6 +218,7 @@ QString DxfRotateExtrudeNode::dump(QString indent) const } return dump_cache; } +#endif std::string DxfRotateExtrudeNode::toString() const { diff --git a/src/dxfrotextrudenode.h b/src/dxfrotextrudenode.h index fbe2b85..b2f4a38 100644 --- a/src/dxfrotextrudenode.h +++ b/src/dxfrotextrudenode.h @@ -22,7 +22,9 @@ public: double origin_x, origin_y, scale; QString filename, layername; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; #endif diff --git a/src/import.cc b/src/import.cc index 5d0a497..c977b53 100644 --- a/src/import.cc +++ b/src/import.cc @@ -188,6 +188,7 @@ PolySet *ImportNode::render_polyset(render_mode_e) const return p; } +#ifndef REMOVE_DUMP QString ImportNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -212,6 +213,7 @@ QString ImportNode::dump(QString indent) const } return dump_cache; } +#endif std::string ImportNode::toString() const { diff --git a/src/importnode.h b/src/importnode.h index b226569..7e71d45 100644 --- a/src/importnode.h +++ b/src/importnode.h @@ -26,7 +26,9 @@ public: double fn, fs, fa; double origin_x, origin_y, scale; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; #endif diff --git a/src/mainwin.cc b/src/mainwin.cc index 1bf2695..8b7fac5 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -650,7 +650,9 @@ void MainWindow::compile(bool procevents) if (!(this->root_node = find_root_tag(absolute_root_node))) { this->root_node = absolute_root_node; } - root_node->dump(""); + // Dump the tree (to initialize caches). I guess we wouldn't really need to do + // this explicitly.. + root_node->dump(); if (1) { PRINT("Compilation finished."); @@ -1228,7 +1230,7 @@ void MainWindow::actionDisplayCSGTree() e->setWindowTitle("CSG Tree Dump"); e->setReadOnly(true); if (root_node) { - e->setPlainText(root_node->dump("")); + e->setPlainText(root_node->dump()); } else { e->setPlainText("No CSG to dump. Please try compiling first..."); } diff --git a/src/node.cc b/src/node.cc index 437fdfa..c28dff0 100644 --- a/src/node.cc +++ b/src/node.cc @@ -30,6 +30,8 @@ #include "progress.h" #include "polyset.h" #include "visitor.h" +#include "nodedumper.h" + #include <QRegExp> #include <sstream> @@ -62,9 +64,15 @@ Response AbstractPolyNode::accept(const class State &state, Visitor &visitor) co return visitor.visit(state, *this); } +/*! + Create a cache id of the entire tree under this node. This cache id + is a non-whitespace plaintext of the evaluated scad tree and is used + for lookup in cgal_nef_cache. +*/ QString AbstractNode::mk_cache_id() const { - QString cache_id = dump(""); + QString cache_id = dump(); + // Remove all node class names and whitespace cache_id.remove(QRegExp("[a-zA-Z_][a-zA-Z_0-9]*:")); cache_id.remove(' '); cache_id.remove('\t'); @@ -165,6 +173,7 @@ CSGTerm *AbstractIntersectionNode::render_csg_term(double m[20], QVector<CSGTerm return render_csg_term_backend(this, true, m, highlights, background); } +#ifndef REMOVE_DUMP QString AbstractNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -175,6 +184,16 @@ QString AbstractNode::dump(QString indent) const } return dump_cache; } +#else +// Temporarily offer a top-level dump function to keep existing code running +QString AbstractNode::dump() const +{ + NodeDumper dumper; + Traverser trav(dumper, *this, Traverser::PRE_AND_POSTFIX); + trav.execute(); + return QString::fromStdString(dumper.getDump() + "\n"); +} +#endif std::string AbstractNode::toString() const { @@ -183,6 +202,7 @@ std::string AbstractNode::toString() const return stream.str(); } +#ifndef REMOVE_DUMP QString AbstractIntersectionNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -193,6 +213,7 @@ QString AbstractIntersectionNode::dump(QString indent) const } return dump_cache; } +#endif std::string AbstractIntersectionNode::toString() const { @@ -52,9 +52,11 @@ public: int idx; // Node index (unique per tree) // FIXME: Remove these three with dump() method - QString dump_cache; virtual QString mk_cache_id() const; - virtual QString dump(QString indent) const; + QString dump() const; +#ifndef REMOVE_DUMP + QString dump_cache; +#endif // FIXME: Rewrite to visitor virtual class CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; @@ -84,7 +86,9 @@ public: virtual CGAL_Nef_polyhedron renderCSGMesh() const; #endif virtual CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; class AbstractPolyNode : public AbstractNode diff --git a/src/primitives.cc b/src/primitives.cc index 8838547..84e6a6d 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -69,7 +69,9 @@ public: int convexity; Value points, paths, triangles; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const @@ -526,6 +528,7 @@ sphere_next_r2: return p; } +#ifndef REMOVE_DUMP QString PrimitiveNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -548,6 +551,7 @@ QString PrimitiveNode::dump(QString indent) const } return dump_cache; } +#endif std::string PrimitiveNode::toString() const { diff --git a/src/projection.cc b/src/projection.cc index 985ed20..2176b4d 100644 --- a/src/projection.cc +++ b/src/projection.cc @@ -274,6 +274,7 @@ PolySet *ProjectionNode::render_polyset(render_mode_e) const #endif // ENABLE_CGAL +#ifndef REMOVE_DUMP QString ProjectionNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -287,6 +288,7 @@ QString ProjectionNode::dump(QString indent) const } return dump_cache; } +#endif std::string ProjectionNode::toString() const { diff --git a/src/projectionnode.h b/src/projectionnode.h index d5ba6da..e59088c 100644 --- a/src/projectionnode.h +++ b/src/projectionnode.h @@ -18,7 +18,9 @@ public: int convexity; bool cut_mode; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; #endif diff --git a/src/render.cc b/src/render.cc index 5bd57fc..fb7dd59 100644 --- a/src/render.cc +++ b/src/render.cc @@ -62,8 +62,10 @@ public: #ifdef ENABLE_CGAL virtual CGAL_Nef_polyhedron renderCSGMesh() const; #endif - CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; + CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; AbstractNode *RenderModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const @@ -256,6 +258,7 @@ CSGTerm *RenderNode::render_csg_term(double m[20], QVector<CSGTerm*> *highlights #endif +#ifndef REMOVE_DUMP QString RenderNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -266,6 +269,7 @@ QString RenderNode::dump(QString indent) const } return dump_cache; } +#endif std::string RenderNode::toString() const { diff --git a/src/surface.cc b/src/surface.cc index 57b3f59..c28d9ba 100644 --- a/src/surface.cc +++ b/src/surface.cc @@ -56,7 +56,9 @@ public: bool center; int convexity; virtual PolySet *render_polyset(render_mode_e mode) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; AbstractNode *SurfaceModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const @@ -204,6 +206,7 @@ PolySet *SurfaceNode::render_polyset(render_mode_e) const return p; } +#ifndef REMOVE_DUMP QString SurfaceNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -214,6 +217,7 @@ QString SurfaceNode::dump(QString indent) const } return dump_cache; } +#endif std::string SurfaceNode::toString() const { diff --git a/src/transform.cc b/src/transform.cc index 8f61c26..d49f3ff 100644 --- a/src/transform.cc +++ b/src/transform.cc @@ -66,7 +66,9 @@ public: virtual CGAL_Nef_polyhedron renderCSGMesh() const; #endif virtual CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const; +#ifndef REMOVE_DUMP virtual QString dump(QString indent) const; +#endif }; AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const @@ -353,6 +355,7 @@ CSGTerm *TransformNode::render_csg_term(double c[20], QVector<CSGTerm*> *highlig return t1; } +#ifndef REMOVE_DUMP QString TransformNode::dump(QString indent) const { if (dump_cache.isEmpty()) { @@ -374,6 +377,7 @@ QString TransformNode::dump(QString indent) const } return dump_cache; } +#endif std::string TransformNode::toString() const { diff --git a/test-code/dumptest.cc b/test-code/dumptest.cc index cb2b13c..36261b6 100644 --- a/test-code/dumptest.cc +++ b/test-code/dumptest.cc @@ -144,8 +144,8 @@ int main(int argc, char **argv) root_node = root_module->evaluate(&root_ctx, &root_inst); // Cache test - QString dumpstr = root_node->dump(""); - QString dumpstr_cached = root_node->dump(""); + QString dumpstr = root_node->dump(); + QString dumpstr_cached = root_node->dump(); if (dumpstr != dumpstr_cached) rc = 1; NodeDumper dumper; diff --git a/test-code/dumptest.pro b/test-code/dumptest.pro index d196cda..f3ba27e 100644 --- a/test-code/dumptest.pro +++ b/test-code/dumptest.pro @@ -7,6 +7,7 @@ UI_DIR = objects RCC_DIR = objects INCLUDEPATH += ../src +DEFINES += REMOVE_DUMP TARGET = dumptest macx { CONFIG -= app_bundle |