00001
00008
00009
00010
00011
00012
00013 #ifndef ENG_NODE_VISITOR_HH
00014 #define ENG_NODE_VISITOR_HH 1
00015
00016
00017 #include "eng_graph_traversal.hh"
00018
00019 namespace eng {
00020
00021 class LodNode;
00022 class PartitionNode;
00023 class TransformNode;
00024 class VertexsNode;
00025 class NormalsNode;
00026 class ModesNode;
00027 class MaterialNode;
00028 class TextureNode;
00029 class ColorsNode;
00030 class PolygonNode;
00031 class PolygonNode_TriColor1;
00032 class PolygonNode_TriColor3;
00033 class PolygonNode_QuadColor1;
00034 class PolygonNode_QuadColor4;
00035 class PolygonNode_Tex;
00036 class PolygonNode_TexTriColor1;
00037 class PolygonNode_TexTriColor3;
00038 class PolygonNode_TexQuadColor1;
00039 class PolygonNode_TexQuadColor4;
00040 class SpecialNode;
00041
00136 class Visitor
00137 {
00138 public:
00139
00140
00141 Visitor( Graph& graph, Node::Ptr root );
00142 Visitor( Graph& graph );
00143 virtual ~Visitor() { }
00144
00145
00146
00147
00148 virtual void Visit( Node& node ) { }
00149 virtual void Visit( LodNode& node ) { }
00150 virtual void Visit( PartitionNode& node ) { }
00151 virtual void Visit( TransformNode& node ) { }
00152 virtual void Visit( VertexsNode& node ) { }
00153 virtual void Visit( NormalsNode& node ) { }
00154 virtual void Visit( ModesNode& node ) { }
00155 virtual void Visit( MaterialNode& node ) { }
00156 virtual void Visit( TextureNode& node ) { }
00157 virtual void Visit( ColorsNode& node ) { }
00158
00159 virtual void Visit( PolygonNode& node ) { }
00160 virtual void Visit( PolygonNode_TriColor1& node );
00161 virtual void Visit( PolygonNode_TriColor3& node );
00162 virtual void Visit( PolygonNode_QuadColor1& node );
00163 virtual void Visit( PolygonNode_QuadColor4& node );
00164 virtual void Visit( PolygonNode_Tex& node );
00165 virtual void Visit( PolygonNode_TexTriColor1& node );
00166 virtual void Visit( PolygonNode_TexTriColor3& node );
00167 virtual void Visit( PolygonNode_TexQuadColor1& node );
00168 virtual void Visit( PolygonNode_TexQuadColor4& node );
00169 virtual void Visit( SpecialNode& node ) { }
00170
00174 #define DECLARE_VISIT_ANY(METHOD) \
00175 void Visit( Node& node ) { METHOD(node); } \
00176 void Visit( LodNode& node ) { METHOD(node); } \
00177 void Visit( PartitionNode& node ) { METHOD(node); } \
00178 void Visit( TransformNode& node ) { METHOD(node); } \
00179 void Visit( VertexsNode& node ) { METHOD(node); } \
00180 void Visit( NormalsNode& node ) { METHOD(node); } \
00181 void Visit( ModesNode& node ) { METHOD(node); } \
00182 void Visit( MaterialNode& node ) { METHOD(node); } \
00183 void Visit( TextureNode& node ) { METHOD(node); } \
00184 void Visit( ColorsNode& node ) { METHOD(node); } \
00185 void Visit( PolygonNode& node ) { METHOD(node); } \
00186 void Visit( PolygonNode_TriColor1& node ) { METHOD(node); } \
00187 void Visit( PolygonNode_TriColor3& node ) { METHOD(node); } \
00188 void Visit( PolygonNode_QuadColor1& node ) { METHOD(node); } \
00189 void Visit( PolygonNode_QuadColor4& node ) { METHOD(node); } \
00190 void Visit( PolygonNode_Tex& node ) { METHOD(node); } \
00191 void Visit( PolygonNode_TexTriColor1& node ) { METHOD(node); } \
00192 void Visit( PolygonNode_TexTriColor3& node ) { METHOD(node); } \
00193 void Visit( PolygonNode_TexQuadColor1& node ) { METHOD(node); } \
00194 void Visit( PolygonNode_TexQuadColor4& node ) { METHOD(node); } \
00195 void Visit( SpecialNode& node ) { METHOD(node); }
00196
00197
00198 Node::Ptr GetRootNode( void ) const { return mRoot; }
00199 virtual operator bool() const { return not mStop; }
00200 void Stop( void ) { mStop = true; }
00201 virtual void Begin( GraphTraversal::Ptr traversal ) { }
00202 virtual void End( void ) { }
00203
00204 protected:
00205
00206 void SetRootNode( Node::Ptr root ) { mRoot = root; }
00207
00208 protected:
00209 Graph& mGraph;
00210 Node::Ptr mRoot;
00211 bool mStop;
00212 };
00213
00214 }
00215
00216 #endif // ENG_NODE_VISITOR_HH