00001 00002 // TemplateMeshBuilder.h // 00004 00005 #ifndef TEMPLATEMESHBUILDER_H 00006 #define TEMPLATEMESHBUILDER_H 00007 00008 #include "X3DOnePassProcessor.h" 00009 #include "TemplateMeshBuilderGlobalVariables.h" 00010 #include "DFSGraphTraversal.h" 00011 #include "TemplateMeshBuilderCoreVisitor.h" 00012 #include "TemplateMeshBuilderGeometry3DVisitor.h" 00013 #include "TemplateMeshBuilderGroupingVisitor.h" 00014 #include "TemplateMeshBuilderShapeVisitor.h" 00015 #include "TemplateMeshBuilderRenderingVisitor.h" 00016 #include "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 globalVariables = GVManager::getInstanceOf<TemplateMeshBuilderGlobalVariables>(); 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()); 00039 }; 00041 virtual ~TemplateMeshBuilder() 00042 { 00043 delete graphTraversal; 00044 }; 00045 00047 virtual MESH::SFNode build(SFNode N) 00048 { 00049 globalVariables->init(); 00050 graphTraversal->traverse(N); 00051 globalVariables->finish(); 00052 00053 return globalVariables->getRoot(); 00054 }; 00055 00057 MESH::Scene *build(Scene *S) 00058 { 00059 return static_cast<MESH::Scene *>(build(static_cast<SFNode>(S))); 00060 }; 00061 00062 private: 00063 TemplateMeshBuilderGlobalVariables *globalVariables; 00064 }; 00065 00066 } 00067 } 00068 00069 #endif