#include "ClonerAbstractVisitor.h" #include using namespace std; namespace X3DTK { ClonerAbstractVisitor::ClonerAbstractVisitor() { define(Recorder::getEnterFunction(&ClonerAbstractVisitor::enterX3DAbstractNode)); define(Recorder::getLeaveFunction(&ClonerAbstractVisitor::leaveX3DAbstractNode)); } void ClonerAbstractVisitor::enterX3DAbstractNode(X3DAbstractNode *N) { ClonerStateVariables *stateVariables = Singleton::getInstance(); SFNode NN = stateVariables->getNode(N); if (NN == 0) { NN = N->clone(); stateVariables->addCoupleNode(N, NN); // removing children. MFNode childList = NN->getChildList(); for (MFNode::const_iterator it = childList.begin(); it != childList.end(); ++it) NN->removeChild(*it); } stateVariables->pushNode(NN); } void ClonerAbstractVisitor::leaveX3DAbstractNode(X3DAbstractNode *) { ClonerStateVariables *stateVariables = Singleton::getInstance(); stateVariables->popNode(); } }