void OSGLoader::endNode(void) { PINFO << "End Node" << std::endl; if(_pCurrentFC != NULL) { if(_pCurrentFC->getType().isNode() == true) { Node *pNode = dynamic_cast<Node *>(_pCurrentFC.get()); if(pNode->getCore() == NULL) { GroupUnrecPtr pGroup = Group::create(); pNode->setCore(pGroup); } } UInt32 uiFunctorIndex = _pCurrentFC->getType().getId(); if(uiFunctorIndex < _endNodeFunctors.size() && ! _endNodeFunctors[uiFunctorIndex].empty()) { (_endNodeFunctors[uiFunctorIndex])(_pCurrentFC); } } setFieldContainerValue(_pCurrentFC); _fcStack.pop(); if(_fcStack.size() != 0) { _pCurrentFC = _fcStack.top(); } else { _pCurrentFC = NULL; } if(_sChangedStack.size() != 0) { _bvChanged = _sChangedStack.top(); } else { _bvChanged = 0; } _sChangedStack.pop(); }
void OSGLoader::use(const Char8 *szName) { FieldContainerPtr pUseNode; // try to find a container with the given name attachment pUseNode = getReference(szName); if(pUseNode == NullFC) { SLOG << "No FieldContainer found with name " << szName << std::endl; } else { // assign nodepointer to current sf|mf field setFieldContainerValue(pUseNode); } }
void OSGLoader::beginNode(const Char8 *szNodeTypename, const Char8 *szNodename) { FieldContainerPtr pNewNode; if(szNodeTypename == NULL) return; PINFO << "Begin node : " << szNodeTypename << " | "; if(szNodename == NULL) { PINFO << "NULL"; } else { PINFO << szNodename; } PINFO << std::endl; pNewNode = FieldContainerFactory::the()->createFieldContainer(szNodeTypename); if(szNodename != NULL && pNewNode != NullFC) { AttachmentContainerPtr pAttCon = AttachmentContainerPtr::dcast(pNewNode); if(pAttCon != NullFC) { setName(pAttCon, szNodename); } _defMap.insert(std::make_pair(std::string(szNodename), pNewNode)); } // assign nodepointer to current sf|mf field setFieldContainerValue(pNewNode); _pCurrentFC = pNewNode; _fcStack.push(_pCurrentFC); if(_fcStack.size() == 1) { NodePtr pNode; if(_pCurrentFC->getType().isNode()) { pNode = NodePtr::dcast(_pCurrentFC); } else if(_pCurrentFC->getType().isNodeCore()) { pNode = Node::create(); pNode->setCore(NodeCorePtr::dcast(_pCurrentFC)); } else { SLOG << "Fieldcontainer " << szNodeTypename << "is neither Node nor NodeCore " << std::endl; } if(_pRootNode == NullFC) { GroupPtr pGroup = Group::create(); _pRootNode = Node::create(); beginEditCP(_pRootNode, Node::CoreFieldMask); { _pRootNode->setCore(pGroup); } endEditCP (_pRootNode, Node::CoreFieldMask); } beginEditCP(_pRootNode, Node::ChildrenFieldMask); { _pRootNode->addChild(pNode); } endEditCP (_pRootNode, Node::ChildrenFieldMask); } }
void OSGLoader::nullNode(void) { setFieldContainerValue(NULL); }