From 8b58a1df8310a2a9a735797fbe7f4a648af8e6dd Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 6 Dec 2002 11:16:45 +0000 Subject: [PATCH] Added checking of parents against switch and sequence into the RemoveRendundentNodeVisitor to prevent breaking of the orinal order of the nodes. --- src/osgUtil/Optimizer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index dbb26597e..6fe680eea 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include @@ -838,7 +840,7 @@ void Optimizer::RemoveEmptyNodesVisitor::removeEmptyNodes() ++itr) { - osg::Node* nodeToRemove = (*itr); + osg::ref_ptr nodeToRemove = (*itr); // take a copy of parents list since subsequent removes will modify the original one. osg::Node::ParentList parents = nodeToRemove->getParents(); @@ -847,8 +849,13 @@ void Optimizer::RemoveEmptyNodesVisitor::removeEmptyNodes() pitr!=parents.end(); ++pitr) { - (*pitr)->removeChild(nodeToRemove); - if ((*pitr)->getNumChildren()==0) newEmptyGroups.insert(*pitr); + osg::Group* parent = *pitr; + if (!dynamic_cast(parent) && + !dynamic_cast(parent)) + { + parent->removeChild(nodeToRemove.get()); + if (parent->getNumChildren()==0) newEmptyGroups.insert(*pitr); + } } }