summaryrefslogtreecommitdiff
path: root/src/CSGTermRenderer.h
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2010-07-15 00:48:00 (GMT)
committerMarius Kintel <marius@kintel.net>2010-10-31 00:42:38 (GMT)
commitf0b49ee9e93c92982fe9a160c3e9aa7da17b581e (patch)
tree28056348e28bca5274e3bf7f48174fd42fb6ce94 /src/CSGTermRenderer.h
parentf2323c78b381c24d2924c6cea7c9230416542a17 (diff)
Started refactoring of render_csg_term() into a visitor
Diffstat (limited to 'src/CSGTermRenderer.h')
-rw-r--r--src/CSGTermRenderer.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/CSGTermRenderer.h b/src/CSGTermRenderer.h
new file mode 100644
index 0000000..1905faf
--- /dev/null
+++ b/src/CSGTermRenderer.h
@@ -0,0 +1,43 @@
+#ifndef CSGTERMRENDERER_H_
+#define CSGTERMRENDERER_H_
+
+#include <string>
+#include <map>
+#include <list>
+#include <vector>
+#include "visitor.h"
+#include "node.h"
+
+using std::string;
+using std::map;
+using std::list;
+using std::vector;
+
+class CSGTermRenderer : public Visitor
+{
+public:
+ CSGTermRenderer() {}
+ virtual ~CSGTermRenderer() {}
+
+ virtual Response visit(const State &state, const AbstractNode &node);
+ virtual Response visit(const State &state, const AbstractIntersectionNode &node);
+ virtual Response visit(const State &state, const AbstractPolyNode &node);
+ virtual Response visit(const State &state, const CsgNode &node);
+ virtual Response visit(const State &state, const TransformNode &node);
+ virtual Response visit(const State &state, const RenderNode &node);
+
+private:
+ enum CsgOp {UNION, INTERSECTION, DIFFERENCE, MINKOWSKI};
+ void addToParent(const State &state, const AbstractNode &node);
+ void applyToChildren(const AbstractNode &node, CSGTermRenderer::CsgOp op);
+
+ const AbstractNode *root;
+ typedef list<const AbstractNode *> ChildList;
+ map<int, ChildList> visitedchildren;
+ map<int, class CSGTerm*> stored_term;
+
+ vector<CSGTerm*> *highlights;
+ vector<CSGTerm*> *background;
+};
+
+#endif
contact: Jan Huwald // Impressum