diff options
Diffstat (limited to 'openscad.cc')
-rw-r--r-- | openscad.cc | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/openscad.cc b/openscad.cc index 85e6708..d4a411f 100644 --- a/openscad.cc +++ b/openscad.cc @@ -18,8 +18,15 @@ * */ +#define INCLUDE_ABSTRACT_NODE_DETAILS + #include "openscad.h" +#include <CGAL/IO/Polyhedron_iostream.h> + +#include <fstream> +#include <iostream> + int main() { int rc = 0; @@ -27,18 +34,39 @@ int main() initialize_builtin_functions(); initialize_builtin_modules(); - Context ctx(NULL); - ctx.functions_p = &builtin_functions; - ctx.modules_p = &builtin_modules; + Context root_ctx(NULL); + root_ctx.functions_p = &builtin_functions; + root_ctx.modules_p = &builtin_modules; AbstractModule *root_module = parse(stdin, 0); - QString text = root_module->dump("", "**root**"); - printf("%s", text.toAscii().data()); + + printf("--- Abstract Syntax Tree ---\n"); + QString ast_text = root_module->dump("", "**root**"); + printf("%s", ast_text.toAscii().data()); + + AbstractNode *root_node = root_module->evaluate(&root_ctx, QVector<QString>(), QVector<Value>(), QVector<AbstractNode*>()); + + printf("--- Compiled CSG Tree ---\n"); + QString csg_text = root_node->dump(""); + printf("%s", csg_text.toAscii().data()); + + CGAL_Nef_polyhedron N; + CGAL_Polyhedron P; + N = root_node->render_cgal_nef_polyhedron(); + N.convert_to_Polyhedron(P); + + std::ofstream outFile("output.off"); + if (outFile.fail()) { + std::cerr << "unable to open output file merged.off for writing!" << std::endl; + exit(1); + } + outFile << P; + delete root_module; destroy_builtin_functions(); destroy_builtin_modules(); - return rc; + return rc; } |