00001 #include "DefaultDFSGroupingWalker.h" 00002 #include "NodeWalkingProxy.h" 00003 #include "NodeVisitingProxy.h" 00004 #include "GroupingNodes.h" 00005 00006 using namespace X3DTK; 00007 00008 DefaultDFSGroupingWalker::DefaultDFSGroupingWalker() 00009 : DFSGroupingWalker() 00010 { 00011 defineNewWalkingFunction<DefaultDFSGroupingWalker, StaticGroup>(&DefaultDFSGroupingWalker::walkStaticGroup); 00012 defineNewWalkingFunction<DefaultDFSGroupingWalker, X3DGroupingNode>(&DefaultDFSGroupingWalker::walkX3DGroupingNode); 00013 } 00014 00015 DefaultDFSGroupingWalker::~DefaultDFSGroupingWalker() 00016 { 00017 } 00018 00019 void DefaultDFSGroupingWalker::walkStaticGroup(StaticGroup *G) const 00020 { 00021 nodeVisitingProxy->enter(G); 00022 00023 MFNode children = G->getChildren(); 00024 for (MFNode::iterator it = children.begin(); it != children.end(); ++it) 00025 if ((*it != 0) && (nodeVisitingProxy->walkOn(G, *it))) 00026 nodeWalkingProxy->walk(*it); 00027 00028 nodeVisitingProxy->leave(G); 00029 } 00030 00031 void DefaultDFSGroupingWalker::walkX3DGroupingNode(X3DGroupingNode *N) const 00032 { 00033 nodeVisitingProxy->enter(N); 00034 00035 MFNode children = N->getChildren(); 00036 for (MFNode::iterator it = children.begin(); it != children.end(); ++it) 00037 if ((*it != 0) && (nodeVisitingProxy->walkOn(N, *it))) 00038 nodeWalkingProxy->walk(*it); 00039 00040 nodeVisitingProxy->leave(N); 00041 }