diff options
Diffstat (limited to 'src/openscad.cc')
-rw-r--r-- | src/openscad.cc | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/src/openscad.cc b/src/openscad.cc index bf22246..979a68f 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -32,6 +32,10 @@ #include "value.h" #include "export.h" #include "builtin.h" +#include "nodedumper.h" +#include "CGALRenderer.h" +#include "PolySetCGALRenderer.h" +#include "printutils.h" #include <string> #include <vector> @@ -46,7 +50,9 @@ #include <QDir> #include <QSet> #include <QSettings> +#include <QTextStream> #include <boost/program_options.hpp> + #ifdef Q_WS_MAC #include "EventFilter.h" #include "AppleEvents.h" @@ -249,6 +255,15 @@ int main(int argc, char **argv) librarydir = libdir.path(); } + // Initialize global visitors + NodeCache nodecache; + NodeDumper dumper(nodecache); + Tree tree; + // FIXME: enforce some maximum cache size (old version had 100K vertices as limit) + QHash<std::string, CGAL_Nef_polyhedron> cache; + CGALRenderer cgalrenderer(cache, tree); + PolySetCGALRenderer psrenderer(cgalrenderer); + if (stl_output_file || off_output_file || dxf_output_file) { if (!filename) @@ -265,9 +280,9 @@ int main(int argc, char **argv) Value zero3; zero3.type = Value::VECTOR; - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); root_ctx.set_variable("$vpt", zero3); root_ctx.set_variable("$vpr", zero3); @@ -299,8 +314,8 @@ int main(int argc, char **argv) AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); - CGAL_Nef_polyhedron *root_N; - root_N = new CGAL_Nef_polyhedron(root_node->render_cgal_nef_polyhedron()); + tree.setRoot(root_node); + CGAL_Nef_polyhedron root_N = cgalrenderer.renderCGALMesh(*tree.root()); QDir::setCurrent(original_path.absolutePath()); @@ -318,17 +333,43 @@ int main(int argc, char **argv) fclose(fp); } - if (stl_output_file) - export_stl(root_N, stl_output_file, NULL); + if (stl_output_file) { + QFile file(stl_output_file); + if (!file.open(QIODevice::ReadWrite)) { + PRINTA("Can't open file \"%1\" for export", stl_output_file); + } + else { + QTextStream fstream(&file); + export_stl(&root_N, fstream, NULL); + file.close(); + } + } - if (off_output_file) - export_off(root_N, off_output_file, NULL); + if (off_output_file) { + QFile file(stl_output_file); + if (!file.open(QIODevice::ReadWrite)) { + PRINTA("Can't open file \"%1\" for export", stl_output_file); + } + else { + QTextStream fstream(&file); + export_off(&root_N, fstream, NULL); + file.close(); + } + } - if (dxf_output_file) - export_dxf(root_N, dxf_output_file, NULL); + if (dxf_output_file) { + QFile file(stl_output_file); + if (!file.open(QIODevice::ReadWrite)) { + PRINTA("Can't open file \"%1\" for export", stl_output_file); + } + else { + QTextStream fstream(&file); + export_dxf(&root_N, fstream, NULL); + file.close(); + } + } delete root_node; - delete root_N; #else fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n"); exit(1); |