GroupNode* SceneLoader::LoadGroupNode(QDomElement element) { if (element.nodeName() != QString ("node") || QString::compare(element.attribute("type"), "group", Qt::CaseInsensitive) != 0) { printf ("ceXMLDataLoader::LoadGroupNode: Illegal data format: '%s' != 'group'\n", element.nodeName().toStdString().c_str()); fflush (stdout); } GroupNode* group = new GroupNode(); QString name = element.attribute("name"); if (!name.isNull()) { group->SetName(name.toStdString()); } for (QDomElement groupElement = element.firstChildElement(); !groupElement.isNull(); groupElement = groupElement.nextSiblingElement()) { ceNode* node = LoadNode (groupElement); if (node) { group->AddNode(node); } } group->UpdateBoundingBox(); return group; }
SceneNode *Factory::CopyNode(SceneNode *pNode) { DbgEnter(); //check if node already belongs to some parent if (pNode && pNode->GetCount() > 0) { GroupNode *pGroup = dynamic_cast<GroupNode *>(pNode); if (pGroup) { //save list of child nodes SceneNodeList &nodes = pGroup->GetNodeList(); //create new group node pGroup = NewObject<GroupNode>(); //add copies of all child nodes to new group node for (SceneNodeList::iterator it = nodes.begin(); it != nodes.end(); it++) { pGroup->AddNode(CopyNode(*it)); } return pGroup; } } //return original node return pNode; }