summaryrefslogtreecommitdiff
path: root/src/openscad.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/openscad.cc')
-rw-r--r--src/openscad.cc65
1 files changed, 53 insertions, 12 deletions
diff --git a/src/openscad.cc b/src/openscad.cc
index aa0188c..b37de12 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);
contact: Jan Huwald // Impressum