diff --git a/src/CSGTermRenderer.cc b/src/CSGTermRenderer.cc index a90e3fb8..412f09f5 100644 --- a/src/CSGTermRenderer.cc +++ b/src/CSGTermRenderer.cc @@ -24,8 +24,6 @@ void CSGTermRenderer::applyToChildren(const AbstractNode &node, CSGTermRenderer::CsgOp op) { - if (this->visitedchildren[node.index()].size() == 0) return; - CSGTerm *t1 = NULL; for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin(); iter != this->visitedchildren[node.index()].end(); @@ -50,7 +48,7 @@ void CSGTermRenderer::applyToChildren(const AbstractNode &node, CSGTermRenderer: } if (t1 && node.modinst->tag_background && this->background) { this->background->push_back(t1); -// FIXME: don't store in stored_term? return NULL; + t1 = NULL; // don't propagate background tagged nodes } this->stored_term[node.index()] = t1; } @@ -78,9 +76,9 @@ static CSGTerm *render_csg_term_from_ps(const double m[20], vector *background, PolySet *ps, const ModuleInstantiation *modinst, - int idx) + const AbstractPolyNode &node) { - CSGTerm *t = new CSGTerm(ps, m, QString("n%1").arg(idx)); + CSGTerm *t = new CSGTerm(ps, m, QString("%1%2").arg(node.name().c_str()).arg(node.index())); if (modinst->tag_highlight && highlights) highlights->push_back(t->link()); if (modinst->tag_background && background) { @@ -94,7 +92,7 @@ Response CSGTermRenderer::visit(State &state, const AbstractPolyNode &node) { if (state.isPostfix()) { PolySet *ps = node.render_polyset(AbstractPolyNode::RENDER_OPENCSG); - CSGTerm *t1 = render_csg_term_from_ps(state.matrix(), this->highlights, this->background, ps, node.modinst, node.index()); + CSGTerm *t1 = render_csg_term_from_ps(state.matrix(), this->highlights, this->background, ps, node.modinst, node); this->stored_term[node.index()] = t1; addToParent(state, node); } diff --git a/src/CSGTermRenderer.h b/src/CSGTermRenderer.h index 8543e39b..462ece27 100644 --- a/src/CSGTermRenderer.h +++ b/src/CSGTermRenderer.h @@ -34,6 +34,8 @@ private: const AbstractNode *root; typedef list ChildList; map visitedchildren; + +public: map stored_term; vector *highlights; diff --git a/test-code/csgtermtest.cc b/test-code/csgtermtest.cc index c3f62c84..be9314ce 100644 --- a/test-code/csgtermtest.cc +++ b/test-code/csgtermtest.cc @@ -33,6 +33,7 @@ #include "export.h" #include "builtin.h" #include "Tree.h" +#include "csgterm.h" #include #include @@ -42,6 +43,8 @@ #include #include +using std::cout; + QString commandline_commands; const char *make_command = NULL; QSet dependencies; @@ -62,13 +65,6 @@ void handle_dep(QString filename) } } -void csgTree(Tree &tree) -{ - CSGTermRenderer renderer; - Traverser render(renderer, *tree.root(), Traverser::PRE_AND_POSTFIX); - render.execute(); -} - int main(int argc, char **argv) { if (argc != 2) { @@ -157,8 +153,29 @@ int main(int argc, char **argv) Tree tree; tree.setRoot(root_node); - csgTree(tree); +// cout << tree.getString(*root_node) << "\n"; + CSGTermRenderer renderer; + Traverser render(renderer, *tree.root(), Traverser::PRE_AND_POSTFIX); + render.execute(); + + // cout << "Stored terms: " << renderer.stored_term.size() << "\n"; + // for (map::iterator iter = renderer.stored_term.begin(); + // iter != renderer.stored_term.end(); + // iter++) { + // cout << iter->first << ":" << (iter->second ? iter->second->label : "NULL") << "\n"; + // } + + // if (renderer.background) cout << "Background terms: " << renderer.background->size() << "\n"; + // if (renderer.highlights) cout << "Highlights terms: " << renderer.highlights->size() << "\n"; + + CSGTerm *root_term = renderer.stored_term[root_node->index()]; + if (root_term) { + cout << root_term->dump() << "\n"; + } + else { + cout << "No top-level CSG object\n"; + } destroy_builtin_functions(); destroy_builtin_modules(); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 480dfb32..52db10d2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -9,9 +9,10 @@ function(add_cmdline_test TESTCMD TESTSUFFIX FILES) get_filename_component(TESTCMD_NAME ${TESTCMD} NAME_WE) foreach (SCADFILE ${SCAD_FILES}) get_filename_component(TESTNAME ${SCADFILE} NAME_WE) - if (EXISTS ${CMAKE_SOURCE_DIR}/regression/${TESTCMD_NAME}/${TESTNAME}-expected.${TESTSUFFIX}) +# FIXME: Run tests even if no expected files are found (to facilitate generating expected files) +# if (EXISTS ${CMAKE_SOURCE_DIR}/regression/${TESTCMD_NAME}/${TESTNAME}-expected.${TESTSUFFIX}) add_test(${TESTCMD_NAME}_${TESTNAME} ${tests_SOURCE_DIR}/test_cmdline_tool.py -s ${TESTSUFFIX} ${TESTCMD} ${SCADFILE}) - endif() +# endif() endforeach() endfunction() @@ -28,3 +29,5 @@ add_cmdline_test(${CMAKE_SOURCE_DIR}/../test-code/csgtexttest txt ${SCAD_FILES}) add_cmdline_test(${CMAKE_SOURCE_DIR}/../test-code/cgaltest stl ${SCAD_FILES}) # Add dxfexport tests to CTest add_cmdline_test(${CMAKE_SOURCE_DIR}/../test-code/exportdxf dxf ${SCAD_FILES}) +# Add csgtermtest tests to CTest +add_cmdline_test(${CMAKE_SOURCE_DIR}/../test-code/csgtermtest txt ${SCAD_FILES})