00001 00002 00003 00005 00006 00011 00016 00021 // TemplateMeshBuilder.h // 00023 00024 #ifndef TEMPLATEMESHBUILDER_H 00025 #define TEMPLATEMESHBUILDER_H 00026 00027 #include "MeshTypes.h" 00028 #include "X3DOnePassProcessor.h" 00029 #include "TemplateMeshBuilderGlobalVariables.h" 00030 #include "DefaultDFS.h" 00031 #include "TemplateMeshBuilderCoreVisitor.h" 00032 #include "TemplateMeshBuilderGeometry3DVisitor.h" 00033 #include "TemplateMeshBuilderGroupingVisitor.h" 00034 #include "TemplateMeshBuilderShapeVisitor.h" 00035 #include "TemplateMeshBuilderRenderingVisitor.h" 00036 #include "Scene.h" 00037 #include "MeshScene.h" 00038 #include "MeshAlgoFunctions.h" 00039 00040 namespace X3DTK { 00041 namespace X3D { 00042 00044 00045 template<class MData, class VData, class EData, class FData> 00046 class TemplateMeshBuilder : public X3DOnePassProcessor 00047 { 00048 public: 00050 TemplateMeshBuilder() 00051 { 00052 globalVariables = GVManager::getInstanceOf<TemplateMeshBuilderGlobalVariables>(); 00053 dfs = new DefaultDFS(); 00054 00055 dfs->setComponentVisitor(new TemplateMeshBuilderCoreVisitor()); 00056 dfs->setComponentVisitor(new TemplateMeshBuilderGeometry3DVisitor<MData, VData, EData, FData>()); 00057 dfs->setComponentVisitor(new TemplateMeshBuilderGroupingVisitor()); 00058 dfs->setComponentVisitor(new TemplateMeshBuilderShapeVisitor()); 00059 dfs->setComponentVisitor(new TemplateMeshBuilderRenderingVisitor()); 00060 }; 00062 virtual ~TemplateMeshBuilder() 00063 { 00064 delete dfs; 00065 }; 00067 void setComponentVisitor(X3DComponentVisitor *component) 00068 { 00069 dfs->setComponentVisitor(component); 00070 }; 00071 00073 virtual Mesh::SFNode build(SFNode N) 00074 { 00075 std::cout << "building mesh" << std::endl; 00076 globalVariables->init(); 00077 dfs->traverse(N); 00078 globalVariables->finish(); 00079 00080 return globalVariables->getRoot(); 00081 }; 00082 00084 Mesh::Scene *build(Scene *S) 00085 { 00086 return static_cast<Mesh::Scene *>(build(static_cast<SFNode>(S))); 00087 }; 00088 00089 private: 00090 TemplateMeshBuilderGlobalVariables *globalVariables; 00091 DFS *dfs; 00092 }; 00093 00094 } 00095 } 00096 00097 #endif