summaryrefslogtreecommitdiff
path: root/src/CSGTextRenderer.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2010-03-30 20:49:33 (GMT)
committerMarius Kintel <marius@kintel.net>2010-10-31 00:42:35 (GMT)
commit398571275e58b4b17963db1d318dc4155d219da4 (patch)
treef16cba0dd90a2c66725f700e51644068981c2728 /src/CSGTextRenderer.cc
parent8e9fc2cabc4d0218534bb9d75c2fa70deb0d9616 (diff)
Compile fixes for test programs
Diffstat (limited to 'src/CSGTextRenderer.cc')
-rw-r--r--src/CSGTextRenderer.cc286
1 files changed, 0 insertions, 286 deletions
diff --git a/src/CSGTextRenderer.cc b/src/CSGTextRenderer.cc
deleted file mode 100644
index a366fb7..0000000
--- a/src/CSGTextRenderer.cc
+++ /dev/null
@@ -1,286 +0,0 @@
-#include "CSGTextRenderer.h"
-#include <string>
-#include <map>
-#include <list>
-#include "visitor.h"
-#include "state.h"
-#include "nodecache.h"
-#include "module.h" // FIXME: Temporarily for ModuleInstantiation
-
-#include "csgnode.h"
-#include "transformnode.h"
-
-#include <sstream>
-#include <iostream>
-#include <assert.h>
-#include <QRegExp>
-
-string CSGTextRenderer::getCGALMesh() const
-{
- assert(this->root);
- // FIXME: assert that cache contains root
- return this->cache[mk_cache_id(*this->root)];
-}
-
-// CGAL_Nef_polyhedron CSGTextRenderer::getCGALMesh() const
-// {
-// assert(this->root);
-// // FIXME: assert that cache contains root
-// return this->cache[*this->root];
-// }
-
-bool CSGTextRenderer::isCached(const AbstractNode &node)
-{
- return this->cache.contains(mk_cache_id(node));
-}
-
-/*!
- Modifies target by applying op to target and src:
- target = target [op] src
- */
-void
-CSGTextRenderer::process(string &target, const string &src, CSGTextRenderer::CsgOp op)
-{
-// if (target.dim != 2 && target.dim != 3) {
-// assert(false && "Dimension of Nef polyhedron must be 2 or 3");
-// }
-
- switch (op) {
- case UNION:
- target += "+" + src;
- break;
- case INTERSECTION:
- target += "*" + src;
- break;
- case DIFFERENCE:
- target += "-" + src;
- break;
- case MINKOWSKI:
- target += "M" + src;
- break;
- }
-}
-
-// /*!
-// Modifies target by applying op to target and src:
-// target = target [op] src
-// */
-// void process(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedron &src, CsgOp op)
-// {
-// if (target.dim == 2) {
-// switch (op) {
-// case UNION:
-// target.p2 += src.p2;
-// break;
-// case INTERSECTION:
-// target.p2 *= src.p2;
-// break;
-// case DIFFERENCE:
-// target.p2 -= src.p2;
-// break;
-// case MINKOWSKI:
-// target.p2 = minkowski2(target.p2, src.p2);
-// break;
-// }
-// }
-// else if (target.dim == 3) {
-// switch (op) {
-// case UNION:
-// target.p3 += src.p3;
-// break;
-// case INTERSECTION:
-// target.p3 *= src.p3;
-// break;
-// case DIFFERENCE:
-// target.p3 -= src.p3;
-// break;
-// case MINKOWSKI:
-// target.p3 = minkowski3(target.p3, src.p3);
-// break;
-// }
-// }
-// else {
-// assert(false && "Dimention of Nef polyhedron must be 2 or 3");
-// }
-// }
-
-void CSGTextRenderer::applyToChildren(const AbstractNode &node, CSGTextRenderer::CsgOp op)
-{
- std::stringstream stream;
- stream << typeid(node).name();
- stream << "<" << node.index() << ">";
- string N = stream.str();
- if (this->visitedchildren[node.index()].size() > 0) {
- // FIXME: assert that cache contains nodes in code below
- bool first = true;
-// CGAL_Nef_polyhedron N;
- for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin();
- iter != this->visitedchildren[node.index()].end();
- iter++) {
- const AbstractNode *chnode = iter->first;
- const QString &chcacheid = iter->second;
- // FIXME: Don't use deep access to modinst members
- if (chnode->modinst->tag_background) continue;
- if (first) {
- N += "(" + this->cache[chcacheid];
-// if (N.dim != 0) first = false; // FIXME: when can this happen?
- first = false;
- } else {
- process(N, this->cache[chcacheid], op);
- }
- chnode->progress_report();
- }
- N += ")";
- }
- QString cacheid = mk_cache_id(node);
- this->cache.insert(cacheid, N);
-}
-
-/*
- Typical visitor behavior:
- o In prefix: Check if we're cached -> prune
- o In postfix: Check if we're cached -> don't apply operator to children
- o In postfix: addToParent()
- */
-
-Response CSGTextRenderer::visit(const State &state, const AbstractNode &node)
-{
- if (state.isPrefix() && isCached(node)) return PruneTraversal;
- if (state.isPostfix()) {
- if (!isCached(node)) applyToChildren(node, UNION);
- addToParent(state, node);
- }
- return ContinueTraversal;
-}
-
-Response CSGTextRenderer::visit(const State &state, const AbstractIntersectionNode &node)
-{
- if (state.isPrefix() && isCached(node)) return PruneTraversal;
- if (state.isPostfix()) {
- if (!isCached(node)) applyToChildren(node, INTERSECTION);
- addToParent(state, node);
- }
- return ContinueTraversal;
-}
-
-Response CSGTextRenderer::visit(const State &state, const CsgNode &node)
-{
- if (state.isPrefix() && isCached(node)) return PruneTraversal;
- if (state.isPostfix()) {
- if (!isCached(node)) {
- CsgOp op;
- switch (node.type) {
- case CSG_TYPE_UNION:
- op = UNION;
- break;
- case CSG_TYPE_DIFFERENCE:
- op = DIFFERENCE;
- break;
- case CSG_TYPE_INTERSECTION:
- op = INTERSECTION;
- break;
- }
- applyToChildren(node, op);
- }
- addToParent(state, node);
- }
- return ContinueTraversal;
-}
-
-Response CSGTextRenderer::visit(const State &state, const TransformNode &node)
-{
- if (state.isPrefix() && isCached(node)) return PruneTraversal;
- if (state.isPostfix()) {
- if (!isCached(node)) {
- // First union all children
- applyToChildren(node, UNION);
- // FIXME: Then apply transform
- }
- addToParent(state, node);
- }
- return ContinueTraversal;
-}
-
-// FIXME: RenderNode: Union over children + some magic
-// FIXME: CgaladvNode: Iterate over children. Special operation
-
-// FIXME: Subtypes of AbstractPolyNode:
-// ProjectionNode
-// DxfLinearExtrudeNode
-// DxfRotateExtrudeNode
-// (SurfaceNode)
-// (PrimitiveNode)
-Response CSGTextRenderer::visit(const State &state, const AbstractPolyNode &node)
-{
- if (state.isPrefix() && isCached(node)) return PruneTraversal;
- if (state.isPostfix()) {
- if (!isCached(node)) {
-
- // FIXME: Manage caching
- // FIXME: Will generate one single Nef polyhedron (no csg ops necessary)
-
-// PolySet *ps = render_polyset(RENDER_CGAL);
-// try {
-// CGAL_Nef_polyhedron N = ps->renderCSGMesh();
-// cgal_nef_cache.insert(cache_id, new cgal_nef_cache_entry(N), N.weight());
-// print_messages_pop();
-// progress_report();
-
-// ps->unlink();
-// return N;
-// }
-// catch (...) { // Don't leak the PolySet on ProgressCancelException
-// ps->unlink();
-// throw;
-// }
-
- string N = typeid(node).name();
- QString cacheid = mk_cache_id(node);
- this->cache.insert(cacheid, N);
-
-// std::cout << "Insert: " << N << "\n";
-// std::cout << "Node: " << cacheid.toStdString() << "\n\n";
- }
- addToParent(state, node);
- }
-
- return ContinueTraversal;
-}
-
-/*!
- Adds ourself to out parent's list of traversed children.
- Call this for _every_ node which affects output during the postfix traversal.
-*/
-void CSGTextRenderer::addToParent(const State &state, const AbstractNode &node)
-{
- assert(state.isPostfix());
- QString cacheid = mk_cache_id(node);
- this->visitedchildren.erase(node.index());
- if (!state.parent()) {
- this->root = &node;
- }
- else {
- this->visitedchildren[state.parent()->index()].push_back(std::make_pair(&node, cacheid));
- }
-}
-
-/*!
- Create a cache id of the entire tree under this node. This cache id
- is a non-whitespace plaintext of the evaluated scad tree and is used
- for lookup in cgal_nef_cache.
-*/
-QString CSGTextRenderer::mk_cache_id(const AbstractNode &node) const
-{
- // FIXME: should we keep a cache of cache_id's to avoid recalculating this?
- // -> check how often we recalculate it.
-
- // FIXME: Get dump from dump cache
- // FIXME: assert that cache contains node
- QString cache_id = QString::fromStdString(this->dumpcache[node]);
- // Remove all node indices and whitespace
- cache_id.remove(QRegExp("[a-zA-Z_][a-zA-Z_0-9]*:"));
- cache_id.remove(' ');
- cache_id.remove('\t');
- cache_id.remove('\n');
- return cache_id;
-}
contact: Jan Huwald // Impressum