#include "X3D_SceneSaverStateVariables.h" #include "X3DAbstractNode.h" #include "X3D_X3DNode.h" #include using namespace std; namespace X3DTK { namespace X3D { SceneSaverStateVariables::SceneSaverStateVariables() : StateVariables(), _lineNumber(-1), _tab(" "), _nameID(0) { } SceneSaverStateVariables::~SceneSaverStateVariables() { } void SceneSaverStateVariables::init() { _lineNumber = -1; _tab = SFString(" "); } void SceneSaverStateVariables::initNodes() { _visitedNodes.clear(); } void SceneSaverStateVariables::finish() { _output.clear(); _lineStack.clear(); _hasUSEStack.clear(); _visitedNodes.clear(); _names.clear(); } void SceneSaverStateVariables::addNode(SFNode N) { _visitedNodes.push_back(N); } bool SceneSaverStateVariables::findNode(SFNode N) { MFNode::const_iterator it = find(_visitedNodes.begin(), _visitedNodes.end(), N); if (it != _visitedNodes.end()) return true; return false; } void SceneSaverStateVariables::newLine() { ++_lineNumber; _output.push_back(SFString(_tab)); } void SceneSaverStateVariables::pushCurrentLine() { _lineStack.push_front(_lineNumber); } SFString &SceneSaverStateVariables::getCurrentLine() { return _output.back(); } SFString &SceneSaverStateVariables::getOpeningLine() { return _output[_lineStack.front()]; } void SceneSaverStateVariables::addTab() { _tab += " "; } void SceneSaverStateVariables::removeTab() { _tab.erase(0, 2); } void SceneSaverStateVariables::addName(const SFString &name) { _names.push_back(name); } SFString SceneSaverStateVariables::generateName() { while (true) { SFString res = "_x3dtkN" + SFString::number(_nameID); bool found = false; for (MFString::const_iterator it = _names.begin(); it != _names.end(); ++it) { if (res == *it) { found = true; ++_nameID; } } if (!found) { _names.push_back(res); return res; } } } bool SceneSaverStateVariables::hasChild() { return (_lineNumber == _lineStack.front()); } void SceneSaverStateVariables::pushHasUSE(bool value) { _hasUSEStack.push_front(value); } void SceneSaverStateVariables::popHasUSE() { _hasUSEStack.pop_front(); } void SceneSaverStateVariables::popLine() { _lineStack.pop_front(); } } }