MCPcopy Create free account
hub / github.com/BehaviorTree/Groot / BuildTreeFromScene

Function BuildTreeFromScene

bt_editor/utils.cpp:266–312  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

264
265
266AbsBehaviorTree BuildTreeFromScene(const QtNodes::FlowScene *scene,
267 QtNodes::Node* root_node)
268{
269 if(!root_node )
270 {
271 root_node = findRoot( *scene );
272 }
273 if( !root_node )
274 {
275 if( scene->nodes().size() != 0)
276 {
277 qDebug() << "Error: can not create a tree from a scene unless it has a single root node ";
278 }
279 return AbsBehaviorTree();
280 }
281
282 AbsBehaviorTree tree;
283
284 std::function<void(AbstractTreeNode*, QtNodes::Node*)> pushRecursively;
285
286 pushRecursively = [&](AbstractTreeNode* parent, QtNodes::Node* node)
287 {
288 AbstractTreeNode abs_node;
289
290 auto bt_model = dynamic_cast<BehaviorTreeDataModel*>(node->nodeDataModel());
291
292 abs_node.model = bt_model->model();
293 abs_node.instance_name = bt_model->instanceName();
294 abs_node.pos = scene->getNodePosition(*node) ;
295 abs_node.size = scene->getNodeSize(*node);
296 abs_node.graphic_node = node;
297 abs_node.ports_mapping = bt_model->getCurrentPortMapping();
298
299 auto added_node = tree.addNode( parent, std::move(abs_node) );
300
301 auto children = getChildren( *scene, *node, true );
302
303 for(auto& child_node: children )
304 {
305 pushRecursively( added_node, child_node );
306 }
307 };
308
309 pushRecursively( nullptr, root_node );
310
311 return tree;
312}
313
314AbsBehaviorTree BuildTreeFromXML(const QDomElement& bt_root, const NodeModels& models )
315{

Callers 8

saveToXMLMethod · 0.85
onDestroySubTreeMethod · 0.85
subTreeExpandMethod · 0.85
refreshNodesLayoutMethod · 0.85
onChangeNodesStatusMethod · 0.85
nodeReorderMethod · 0.85
createSubtreeMethod · 0.85
getAbstractTreeMethod · 0.85

Calls 5

findRootFunction · 0.85
AbsBehaviorTreeClass · 0.85
getChildrenFunction · 0.85
getCurrentPortMappingMethod · 0.80
addNodeMethod · 0.80

Tested by 1

getAbstractTreeMethod · 0.68