예제 #1
0
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;
}
예제 #2
0
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;
}