summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-08-05 23:08:11 (GMT)
committerMarius Kintel <marius@kintel.net>2011-08-05 23:08:11 (GMT)
commitcfea2f8934353bfc5635d05d81ecaac57b97e3b7 (patch)
tree5d7d52fee1d2d6da56760b2bd5df05c1cadd5ad6
parentb9608dd2f8cae5f7e9c22e5feacfe8b58715ffae (diff)
bugfix: background and highlight was broken after refactoring
-rw-r--r--src/CSGTermEvaluator.cc54
-rw-r--r--src/CSGTermEvaluator.h9
-rw-r--r--src/mainwin.cc2
3 files changed, 34 insertions, 31 deletions
diff --git a/src/CSGTermEvaluator.cc b/src/CSGTermEvaluator.cc
index b4b4e70..769c87f 100644
--- a/src/CSGTermEvaluator.cc
+++ b/src/CSGTermEvaluator.cc
@@ -22,12 +22,14 @@
with OpenCSG.
*/
-CSGTerm *CSGTermEvaluator::evaluateCSGTerm(const AbstractNode &node,
- vector<CSGTerm*> *highlights,
- vector<CSGTerm*> *background)
+CSGTerm *CSGTermEvaluator::evaluateCSGTerm(const AbstractNode &node,
+ std::vector<CSGTerm*> &highlights,
+ std::vector<CSGTerm*> &background)
{
Traverser evaluate(*this, node, Traverser::PRE_AND_POSTFIX);
evaluate.execute();
+ highlights = this->highlights;
+ background = this->background;
return this->stored_term[node.index()];
}
@@ -52,11 +54,11 @@ void CSGTermEvaluator::applyToChildren(const AbstractNode &node, CSGTermEvaluato
}
}
}
- if (t1 && node.modinst->tag_highlight && this->highlights) {
- this->highlights->push_back(t1->link());
+ if (t1 && node.modinst->tag_highlight) {
+ this->highlights.push_back(t1->link());
}
- if (t1 && node.modinst->tag_background && this->background) {
- this->background->push_back(t1);
+ if (t1 && node.modinst->tag_background) {
+ this->background.push_back(t1);
t1 = NULL; // don't propagate background tagged nodes
}
this->stored_term[node.index()] = t1;
@@ -81,17 +83,17 @@ Response CSGTermEvaluator::visit(State &state, const AbstractIntersectionNode &n
}
static CSGTerm *evaluate_csg_term_from_ps(const double m[20],
- vector<CSGTerm*> *highlights,
- vector<CSGTerm*> *background,
+ vector<CSGTerm*> &highlights,
+ vector<CSGTerm*> &background,
PolySet *ps,
const ModuleInstantiation *modinst,
const AbstractPolyNode &node)
{
CSGTerm *t = new CSGTerm(ps, m, QString("%1%2").arg(node.name().c_str()).arg(node.index()));
- if (modinst->tag_highlight && highlights)
- highlights->push_back(t->link());
- if (modinst->tag_background && background) {
- background->push_back(t);
+ if (modinst->tag_highlight)
+ highlights.push_back(t->link());
+ if (modinst->tag_background) {
+ background.push_back(t);
return NULL;
}
return t;
@@ -190,7 +192,7 @@ void CSGTermEvaluator::addToParent(const State &state, const AbstractNode &node)
// FIXME: #ifdef ENABLE_CGAL
#if 0
-CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const
+CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> &highlights, QVector<CSGTerm*> &background) const
{
if (type == MINKOWSKI)
return evaluate_csg_term_from_nef(m, highlights, background, "minkowski", this->convexity);
@@ -209,7 +211,7 @@ CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlig
#else // ENABLE_CGAL
-CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const
+CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> &highlights, QVector<CSGTerm*> &background) const
{
PRINT("WARNING: Found minkowski(), glide(), subdiv() or hull() statement but compiled without CGAL support!");
return NULL;
@@ -221,7 +223,7 @@ CSGTerm *CgaladvNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlig
// FIXME: #ifdef ENABLE_CGAL
#if 0
-CSGTerm *AbstractNode::evaluate_csg_term_from_nef(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background, const char *statement, int convexity) const
+CSGTerm *AbstractNode::evaluate_csg_term_from_nef(double m[20], QVector<CSGTerm*> &highlights, QVector<CSGTerm*> &background, const char *statement, int convexity) const
{
QString key = mk_cache_id();
if (PolySet::ps_cache.contains(key)) {
@@ -302,10 +304,10 @@ CSGTerm *AbstractNode::evaluate_csg_term_from_nef(double m[20], QVector<CSGTerm*
PolySet::ps_cache.insert(key, new PolySet::ps_cache_entry(ps->link()));
CSGTerm *term = new CSGTerm(ps, m, QString("n%1").arg(idx));
- if (modinst->tag_highlight && highlights)
- highlights->push_back(term->link());
- if (modinst->tag_background && background) {
- background->push_back(term);
+ if (modinst->tag_highlight)
+ highlights.push_back(term->link());
+ if (modinst->tag_background) {
+ background.push_back(term);
return NULL;
}
return term;
@@ -315,14 +317,14 @@ CSGTerm *AbstractNode::evaluate_csg_term_from_nef(double m[20], QVector<CSGTerm*
return NULL;
}
-CSGTerm *RenderNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const
+CSGTerm *RenderNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> &highlights, QVector<CSGTerm*> &background) const
{
return evaluate_csg_term_from_nef(m, highlights, background, "render", this->convexity);
}
#else
-CSGTerm *RenderNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highlights, QVector<CSGTerm*> *background) const
+CSGTerm *RenderNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> &highlights, QVector<CSGTerm*> &background) const
{
CSGTerm *t1 = NULL;
PRINT("WARNING: Found render() statement but compiled without CGAL support!");
@@ -334,10 +336,10 @@ CSGTerm *RenderNode::evaluate_csg_term(double m[20], QVector<CSGTerm*> *highligh
t1 = new CSGTerm(CSGTerm::TYPE_UNION, t1, t2);
}
}
- if (modinst->tag_highlight && highlights)
- highlights->push_back(t1->link());
- if (t1 && modinst->tag_background && background) {
- background->push_back(t1);
+ if (modinst->tag_highlight)
+ highlights.push_back(t1->link());
+ if (t1 && modinst->tag_background) {
+ background.push_back(t1);
return NULL;
}
return t1;
diff --git a/src/CSGTermEvaluator.h b/src/CSGTermEvaluator.h
index d1ea28e..beb1201 100644
--- a/src/CSGTermEvaluator.h
+++ b/src/CSGTermEvaluator.h
@@ -18,7 +18,7 @@ class CSGTermEvaluator : public Visitor
{
public:
CSGTermEvaluator(const Tree &tree, class PolySetEvaluator *psevaluator = NULL)
- : highlights(NULL), background(NULL), tree(tree), psevaluator(psevaluator) {
+ : tree(tree), psevaluator(psevaluator) {
}
virtual ~CSGTermEvaluator() {}
@@ -30,7 +30,8 @@ public:
virtual Response visit(State &state, const RenderNode &node);
class CSGTerm *evaluateCSGTerm(const AbstractNode &node,
- vector<CSGTerm*> *highlights, vector<CSGTerm*> *background);
+ vector<CSGTerm*> &highlights,
+ vector<CSGTerm*> &background);
private:
enum CsgOp {UNION, INTERSECTION, DIFFERENCE, MINKOWSKI};
@@ -44,8 +45,8 @@ private:
public:
map<int, class CSGTerm*> stored_term; // The term evaluated from each node index
- vector<CSGTerm*> *highlights;
- vector<CSGTerm*> *background;
+ vector<CSGTerm*> highlights;
+ vector<CSGTerm*> background;
const Tree &tree;
class PolySetEvaluator *psevaluator;
};
diff --git a/src/mainwin.cc b/src/mainwin.cc
index badb01f..2cd16be 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -779,7 +779,7 @@ void MainWindow::compileCSG(bool procevents)
CGALEvaluator cgalevaluator(cache, this->tree);
PolySetCGALEvaluator psevaluator(cgalevaluator);
CSGTermEvaluator csgrenderer(this->tree, &psevaluator);
- root_raw_term = csgrenderer.evaluateCSGTerm(*root_node, &highlight_terms, &background_terms);
+ root_raw_term = csgrenderer.evaluateCSGTerm(*root_node, highlight_terms, background_terms);
if (!root_raw_term) {
PRINT("ERROR: CSG generation failed! (no top level object found)");
if (procevents)
contact: Jan Huwald // Impressum