From 4d488b9e555c91d31a3c7f2db220b9d5c847e6a8 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 6 Oct 2010 17:54:54 +0000 Subject: [PATCH] moved Node::evaluateChildren() to nodes.cc, added EvaluatePropagateNode support git-svn-id: svn://anubis/fart/branches/scene-file-scripting@340 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.cc | 29 +++++++++++++++++++++++++++++ parser/nodes.h | 16 +--------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/parser/nodes.cc b/parser/nodes.cc index e940673..ba934b9 100644 --- a/parser/nodes.cc +++ b/parser/nodes.cc @@ -9,6 +9,35 @@ using namespace std; +void Node::evaluateChildren(refptr parent) +{ + /* recursively evaluate all children nodes */ + for (std::vector< refptr >::iterator it = m_children.begin(); + it != m_children.end(); + it++) + { + refptr evaluated = (*it)->evaluate(); + if ( ! evaluated.isNull() ) + { + if (typeid(*evaluated) == typeid(EvaluatePropagateNode)) + { + for (vector::iterator it2 + = evaluated->getChildren().begin(); + it2 != evaluated->getChildren().end(); + it2++) + { + parent->addChild(*it2); + } + } + else + { + (*it)->evaluateChildren(evaluated); + parent->addChild(evaluated); + } + } + } +} + void Node::addChildren(NodeRef other) { if (other.isNull()) diff --git a/parser/nodes.h b/parser/nodes.h index fa2716c..aed4e41 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -44,21 +44,7 @@ class Node std::cerr << "Warning: Node::evaluate() called!" << std::endl; return NULL; } - virtual void evaluateChildren(refptr parent) - { - /* recursively evaluate all children nodes */ - for (std::vector< refptr >::iterator it = m_children.begin(); - it != m_children.end(); - it++) - { - refptr evaluated = (*it)->evaluate(); - if ( ! evaluated.isNull() ) - { - (*it)->evaluateChildren(evaluated); - parent->addChild(evaluated); - } - } - } + virtual void evaluateChildren(refptr parent); virtual bool isShape() { return false; } virtual bool isMaterial() { return false; }