void SceneGraphViewImpl::createGraph(SgvItem* item, SgNode* node) { SgvItem* oldParent = parentItem; parentItem = item; list<SgvItem*> children; for(int i=0; i<item->childCount(); i++) children.push_back((SgvItem*)item->child(i)); SgGroup* group = dynamic_cast<SgGroup*>(node); if(group){ for(SgGroup::const_iterator p = group->begin(); p != group->end(); ++p){ SgvItem* item_ = findItem(parentItem, (*p).get()); if(item_){ createGraph(item_, (*p).get()); children.remove(item_); }else{ (*p)->accept(*this); } } for(list<SgvItem*>::iterator it = children.begin(); it != children.end(); it++){ removeItem(*it); } } parentItem = oldParent; }
SgGroup::SgGroup(const SgGroup& org, SgCloneMap& cloneMap) : SgNode(org) { children.reserve(org.numChildren()); for(const_iterator p = org.begin(); p != org.end(); ++p){ addChild(cloneMap.getClone<SgNode>(p->get()), false); } isBboxCacheValid = true; bboxCache = org.bboxCache; }
SgGroup::SgGroup(const SgGroup& org) : SgNode(org) { children.reserve(org.numChildren()); // shallow copy for(const_iterator p = org.begin(); p != org.end(); ++p){ addChild(*p, false); } isBboxCacheValid = true; bboxCache = org.bboxCache; }