typename Component::SPtr addNew( Node::SPtr parentNode, std::string name="" ) { typename Component::SPtr component = New<Component>(); parentNode->addObject(component); component->setName(parentNode->getName()+"_"+name); return component; }
Node::SPtr GraphModeler::buildNodeFromBaseElement(Node::SPtr node,xml::BaseElement *elem, bool saveHistory) { const bool displayWarning=true; Node::SPtr newNode = Node::create(""); //Configure the new Node configureElement(newNode.get(), elem); if (newNode->getName() == "Group") { //We can't use the parent node, as it is null if (!node) return NULL; //delete newNode; newNode = node; } else { // if (node) { //Add as a child addNode(node,newNode,saveHistory); } } typedef xml::BaseElement::child_iterator<> elem_iterator; for (elem_iterator it=elem->begin(); it != elem->end(); ++it) { if (std::string(it->getClass()) == std::string("Node")) { buildNodeFromBaseElement(newNode, it,true); } else { const ComponentLibrary *component = sofaLibrary->getComponent(it->getType()); //Configure the new Component const std::string templateAttribute("template"); std::string templatename; templatename = it->getAttribute(templateAttribute, ""); const ClassEntry::SPtr info = component->getEntry(); BaseObject::SPtr newComponent=addComponent(newNode, info, templatename, saveHistory,displayWarning); if (!newComponent) continue; configureElement(newComponent.get(), it); QTreeWidgetItem* itemGraph = graphListener->items[newComponent.get()]; std::string name=itemGraph->text(0).toStdString(); std::string::size_type pos = name.find(' '); if (pos != std::string::npos) name.resize(pos); name += " "; name+=newComponent->getName(); itemGraph->setText(0,name.c_str()); } } newNode->clearWarnings(); return newNode; }