namespace X3DTK { namespace X3D { template TemplateMeshBuilderStateVariables::TemplateMeshBuilderStateVariables() : StateVariables(), _root(0), _childrenVisit(true), _cloner(new Cloner()) { } template TemplateMeshBuilderStateVariables::~TemplateMeshBuilderStateVariables() { delete _cloner; } template void TemplateMeshBuilderStateVariables::init() { _root = 0; _nodeStack.push_front(0); _childrenVisit = true; _cloner->init(); } template void TemplateMeshBuilderStateVariables::finish() { _nodeStack.clear(); _nodeCoupleMap.clear(); _cloner->finish(); } template void TemplateMeshBuilderStateVariables::enableChildrenVisit() { _childrenVisit = true; } template void TemplateMeshBuilderStateVariables::disableChildrenVisit() { _childrenVisit = false; } template X3DNode *TemplateMeshBuilderStateVariables::clone(X3DNode *N) { return static_cast(_cloner->clone(N, false)); } template void TemplateMeshBuilderStateVariables::addCoupleNode(SFNode N, MESH::X3DNode *MN) { _nodeCoupleMap[N] = MN; // init root node. if (_root == 0) _root = MN; } template void TemplateMeshBuilderStateVariables::pushNode(MESH::X3DNode *N) { MESH::X3DNode *T = getTop(); if (T != 0) { T->setChild(N); } _nodeStack.push_front(N); } template void TemplateMeshBuilderStateVariables::popNode() { _nodeStack.pop_front(); } template MESH::X3DNode *TemplateMeshBuilderStateVariables::getNode(SFNode N) const { std::map::const_iterator it = _nodeCoupleMap.find(N); if (it != _nodeCoupleMap.end()) return (*it).second; return 0; } } }