00001
00002
00004
00005 #ifndef TEMPLATEMESHBUILDERRENDERINGVISITOR_H
00006 #define TEMPLATEMESHBUILDERRENDERINGVISITOR_H
00007
00008 #include "X3D_RenderingVisitor.h"
00009 #include "X3D_TemplateMeshBuilderStateVariables.h"
00010 #include "X3D_TemplateMeshBuilderTraits.h"
00011 #include "X3D_Coordinate.h"
00012
00013 namespace X3DTK {
00014 namespace X3D {
00015
00017
00018 template<class VData, class EData, class FData>
00019 class TemplateMeshBuilderRenderingVisitor : public RenderingVisitor
00020 {
00021 public:
00023 TemplateMeshBuilderRenderingVisitor()
00024 : RenderingVisitor()
00025 {
00026 defineEnterFunction(&TemplateMeshBuilderRenderingVisitor::enterCoordinate);
00027
00028
00029 stateVariables = GraphTraversal::getInstanceOf<TemplateMeshBuilderStateVariables>();
00030 };
00031
00033 virtual ~TemplateMeshBuilderRenderingVisitor()
00034 {
00035 };
00036
00038 virtual void enterCoordinate(Coordinate *C) const
00039 {
00040 MESH::TemplateVertexSet<VData, EData, FData> *MC = dynamic_cast<MESH::TemplateVertexSet<VData, EData, FData> *>(stateVariables->getNode(C));
00041 if (MC == 0)
00042 {
00043 MC = new MESH::TemplateVertexSet<VData, EData, FData>();
00044 stateVariables->addCoupleNode(C, MC);
00045
00046
00047 const MFVec3f &point = C->getPoint();
00048
00049 for (MFVec3f::const_iterator it = point.begin(); it != point.end(); ++it)
00050 MC->createVertex();
00051
00052 TemplateMeshBuilderCoordinateTraits<VData, EData, FData, Coordinate>::process(MC, C);
00053 }
00054 stateVariables->pushNode(MC);
00055 };
00056
00057 protected:
00058 TemplateMeshBuilderStateVariables *stateVariables;
00059 };
00060
00061 }
00062 }
00063
00064 #endif