summaryrefslogtreecommitdiff
path: root/src/node.h
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:26:05 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:26:05 (GMT)
commit191dc4857c852f1867e80cd9d03a6d1c0921dcb1 (patch)
tree4a6421d50eb6cf70924fc0ba06afccf10df00650 /src/node.h
parent6940d171812565209efe679a5d923417c3f47d4a (diff)
header file reorg
git-svn-id: http://svn.clifford.at/openscad/trunk@365 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/node.h')
-rw-r--r--src/node.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/node.h b/src/node.h
new file mode 100644
index 0000000..9121a3b
--- /dev/null
+++ b/src/node.h
@@ -0,0 +1,75 @@
+#ifndef NODE_H_
+#define NODE_H_
+
+#include <QCache>
+#include <QVector>
+
+#ifdef ENABLE_CGAL
+#include "cgal.h"
+#endif
+
+extern int progress_report_count;
+extern void (*progress_report_f)(const class AbstractNode*, void*, int);
+extern void *progress_report_vp;
+
+void progress_report_prep(AbstractNode *root, void (*f)(const class AbstractNode *node, void *vp, int mark), void *vp);
+void progress_report_fin();
+
+class AbstractNode
+{
+public:
+ QVector<AbstractNode*> children;
+ const class ModuleInstantiation *modinst;
+
+ int progress_mark;
+ void progress_prepare();
+ void progress_report() const;
+
+ int idx;
+ static int idx_counter;
+ QString dump_cache;
+
+ AbstractNode(const ModuleInstantiation *mi);
+ virtual ~AbstractNode();
+ virtual QString mk_cache_id() const;
+#ifdef ENABLE_CGAL
+ struct cgal_nef_cache_entry {
+ CGAL_Nef_polyhedron N;
+ QString msg;
+ cgal_nef_cache_entry(CGAL_Nef_polyhedron N);
+ };
+ static QCache<QString, cgal_nef_cache_entry> cgal_nef_cache;
+ virtual CGAL_Nef_polyhedron render_cgal_nef_polyhedron() const;
+#endif
+ virtual class CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const;
+ virtual QString dump(QString indent) const;
+};
+
+class AbstractIntersectionNode : public AbstractNode
+{
+public:
+ AbstractIntersectionNode(const ModuleInstantiation *mi) : AbstractNode(mi) { };
+#ifdef ENABLE_CGAL
+ virtual CGAL_Nef_polyhedron render_cgal_nef_polyhedron() const;
+#endif
+ virtual CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const;
+ virtual QString dump(QString indent) const;
+};
+
+class AbstractPolyNode : public AbstractNode
+{
+public:
+ enum render_mode_e {
+ RENDER_CGAL,
+ RENDER_OPENCSG
+ };
+ AbstractPolyNode(const ModuleInstantiation *mi) : AbstractNode(mi) { };
+ virtual class PolySet *render_polyset(render_mode_e mode) const;
+#ifdef ENABLE_CGAL
+ virtual CGAL_Nef_polyhedron render_cgal_nef_polyhedron() const;
+#endif
+ virtual CSGTerm *render_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const;
+ static CSGTerm *render_csg_term_from_ps(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background, PolySet *ps, const ModuleInstantiation *modinst, int idx);
+};
+
+#endif
contact: Jan Huwald // Impressum