00001 00002 // X3D_TemplateMeshBuilder.h // 00004 00005 #ifndef TEMPLATEMESHBUILDER_H 00006 #define TEMPLATEMESHBUILDER_H 00007 00008 #include "X3DOnePassProcessor.h" 00009 #include "X3D_TemplateMeshBuilderStateVariables.h" 00010 #include "X3D_DFSGraphTraversal.h" 00011 #include "X3D_TemplateMeshBuilderCoreVisitor.h" 00012 #include "X3D_TemplateMeshBuilderGeometry3DVisitor.h" 00013 #include "X3D_TemplateMeshBuilderGroupingVisitor.h" 00014 #include "X3D_TemplateMeshBuilderShapeVisitor.h" 00015 #include "X3D_TemplateMeshBuilderRenderingVisitor.h" 00016 #include "X3D_Scene.h" 00017 #include "MESH_Scene.h" 00018 00019 namespace X3DTK { 00020 namespace X3D { 00021 00023 00024 template<class MData, class VData, class EData, class FData> 00025 class TemplateMeshBuilder : public X3DOnePassProcessor 00026 { 00027 public: 00029 TemplateMeshBuilder() 00030 { 00031 stateVariables = GraphTraversal::getInstanceOf<TemplateMeshBuilderStateVariables>(); 00032 graphTraversal = new DFSGraphTraversal(); 00033 00034 graphTraversal->setComponentVisitor(new TemplateMeshBuilderCoreVisitor()); 00035 graphTraversal->setComponentVisitor(new TemplateMeshBuilderGeometry3DVisitor<MData, VData, EData, FData>()); 00036 graphTraversal->setComponentVisitor(new TemplateMeshBuilderGroupingVisitor()); 00037 graphTraversal->setComponentVisitor(new TemplateMeshBuilderShapeVisitor()); 00038 graphTraversal->setComponentVisitor(new TemplateMeshBuilderRenderingVisitor<VData, EData, FData>()); 00039 }; 00041 virtual ~TemplateMeshBuilder() 00042 { 00043 GraphTraversal::removeInstanceOf<TemplateMeshBuilderStateVariables>(); 00044 00045 delete graphTraversal; 00046 }; 00047 00049 virtual MESH::SFNode build(SFNode N) 00050 { 00051 stateVariables->init(); 00052 graphTraversal->traverse(N); 00053 stateVariables->finish(); 00054 00055 return stateVariables->getRoot(); 00056 }; 00057 00059 MESH::Scene *build(Scene *S) 00060 { 00061 return static_cast<MESH::Scene *>(build(static_cast<SFNode>(S))); 00062 }; 00063 00064 private: 00065 TemplateMeshBuilderStateVariables *stateVariables; 00066 }; 00067 00068 } 00069 } 00070 00071 #endif