00001 00002 // TemplateMeshBuilder.h // 00004 00005 #ifndef TEMPLATEMESHBUILDER_H 00006 #define TEMPLATEMESHBUILDER_H 00007 00008 #include "MeshTypes.h" 00009 #include "X3DOnePassProcessor.h" 00010 #include "TemplateMeshBuilderGlobalVariables.h" 00011 #include "DefaultDFS.h" 00012 #include "TemplateMeshBuilderCoreVisitor.h" 00013 #include "TemplateMeshBuilderGeometry3DVisitor.h" 00014 #include "TemplateMeshBuilderGroupingVisitor.h" 00015 #include "TemplateMeshBuilderShapeVisitor.h" 00016 #include "TemplateMeshBuilderRenderingVisitor.h" 00017 #include "Scene.h" 00018 #include "MeshScene.h" 00019 #include "MeshAlgoFunctions.h" 00020 00021 namespace X3DTK { 00022 namespace X3D { 00023 00025 00026 template<class MData, class VData, class EData, class FData> 00027 class TemplateMeshBuilder : public X3DOnePassProcessor 00028 { 00029 public: 00031 TemplateMeshBuilder() 00032 { 00033 globalVariables = GVManager::getInstanceOf<TemplateMeshBuilderGlobalVariables>(); 00034 dfs = new DefaultDFS(); 00035 00036 dfs->setComponentVisitor(new TemplateMeshBuilderCoreVisitor()); 00037 dfs->setComponentVisitor(new TemplateMeshBuilderGeometry3DVisitor<MData, VData, EData, FData>()); 00038 dfs->setComponentVisitor(new TemplateMeshBuilderGroupingVisitor()); 00039 dfs->setComponentVisitor(new TemplateMeshBuilderShapeVisitor()); 00040 dfs->setComponentVisitor(new TemplateMeshBuilderRenderingVisitor()); 00041 }; 00043 virtual ~TemplateMeshBuilder() 00044 { 00045 delete dfs; 00046 }; 00048 void setComponentVisitor(X3DComponentVisitor *component) 00049 { 00050 dfs->setComponentVisitor(component); 00051 }; 00052 00054 virtual Mesh::SFNode build(SFNode N) 00055 { 00056 std::cout << "building mesh" << std::endl; 00057 globalVariables->init(); 00058 dfs->traverse(N); 00059 globalVariables->finish(); 00060 00061 return globalVariables->getRoot(); 00062 }; 00063 00065 Mesh::Scene *build(Scene *S) 00066 { 00067 return static_cast<Mesh::Scene *>(build(static_cast<SFNode>(S))); 00068 }; 00069 00070 private: 00071 TemplateMeshBuilderGlobalVariables *globalVariables; 00072 DFS *dfs; 00073 }; 00074 00075 } 00076 } 00077 00078 #endif