00001 #include "DefaultDFSRenderingWalker.h" 00002 #include "NodeWalkingProxy.h" 00003 #include "NodeVisitingProxy.h" 00004 #include "RenderingNodes.h" 00005 00006 using namespace X3DTK; 00007 00008 DefaultDFSRenderingWalker::DefaultDFSRenderingWalker() 00009 : DFSRenderingWalker() 00010 { 00011 defineNewWalkingFunction<DefaultDFSRenderingWalker, X3DComposedGeometryNode>(&DefaultDFSRenderingWalker::walkX3DComposedGeometryNode); 00012 defineNewWalkingFunction<DefaultDFSRenderingWalker, IndexedLineSet>(&DefaultDFSRenderingWalker::walkIndexedLineSet); 00013 defineNewWalkingFunction<DefaultDFSRenderingWalker, PointSet>(&DefaultDFSRenderingWalker::walkPointSet); 00014 } 00015 00016 DefaultDFSRenderingWalker::~DefaultDFSRenderingWalker() 00017 { 00018 } 00019 00020 void DefaultDFSRenderingWalker::walkX3DComposedGeometryNode(X3DComposedGeometryNode *N) const 00021 { 00022 nodeVisitingProxy->enter(N); 00023 00024 SFNode C; 00025 C = N->getColor(); 00026 if ((C != 0) && (nodeVisitingProxy->walkOn(N, C))) 00027 nodeWalkingProxy->walk(C); 00028 00029 C = N->getCoord(); 00030 if ((C != 0) && (nodeVisitingProxy->walkOn(N, C))) 00031 nodeWalkingProxy->walk(C); 00032 00033 C = N->getNormal(); 00034 if ((C != 0) && (nodeVisitingProxy->walkOn(N, C))) 00035 nodeWalkingProxy->walk(C); 00036 00037 C = N->getTexCoord(); 00038 if ((C != 0) && (nodeVisitingProxy->walkOn(N, C))) 00039 nodeWalkingProxy->walk(C); 00040 00041 nodeVisitingProxy->leave(N); 00042 } 00043 00044 void DefaultDFSRenderingWalker::walkIndexedLineSet(IndexedLineSet *I) const 00045 { 00046 nodeVisitingProxy->enter(I); 00047 00048 SFNode C; 00049 C = I->getColor(); 00050 if ((C != 0) && (nodeVisitingProxy->walkOn(I, C))) 00051 nodeWalkingProxy->walk(C); 00052 00053 C = I->getCoord(); 00054 if ((C != 0) && (nodeVisitingProxy->walkOn(I, C))) 00055 nodeWalkingProxy->walk(C); 00056 00057 nodeVisitingProxy->leave(I); 00058 } 00059 00060 void DefaultDFSRenderingWalker::walkPointSet(PointSet *P) const 00061 { 00062 nodeVisitingProxy->enter(P); 00063 00064 SFNode C; 00065 C = P->getColor(); 00066 if ((C != 0) && (nodeVisitingProxy->walkOn(P, C))) 00067 nodeWalkingProxy->walk(C); 00068 00069 C = P->getCoord(); 00070 if ((C != 0) && (nodeVisitingProxy->walkOn(P, C))) 00071 nodeWalkingProxy->walk(C); 00072 00073 nodeVisitingProxy->leave(P); 00074 }