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

Function RecursiveNodeReorder

bt_editor/utils.cpp:89–237  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87//---------------------------------------------------
88
89void RecursiveNodeReorder(AbsBehaviorTree& tree, PortLayout layout)
90{
91 std::function<void(unsigned, AbstractTreeNode*)> recursiveStep;
92
93 std::vector<QPointF> layer_cursor;
94 std::vector< std::vector<AbstractTreeNode*> > nodes_by_level(1);
95
96 const qreal LEVEL_SPACING = 80;
97 const qreal NODE_SPACING = 40;
98
99 recursiveStep = [&](unsigned current_layer, AbstractTreeNode* node)
100 {
101 node->pos = layer_cursor[current_layer];
102 nodes_by_level[current_layer].push_back( node );
103
104 //------------------------------------
105 if( node->children_index.size() == 0 )
106 {
107 return;
108 }
109 qreal recommended_pos = NODE_SPACING * 0.5;
110
111 current_layer++;
112
113 if( layout == PortLayout::Vertical)
114 {
115 recommended_pos += (node->pos.x() + node->size.width()*0.5) ;
116 for(int index: node->children_index)
117 {
118 const auto& child_node = tree.nodes()[index];
119 recommended_pos -= (child_node.size.width() + NODE_SPACING) * 0.5;
120 }
121
122 if( current_layer >= layer_cursor.size())
123 {
124 QPointF new_cursor( recommended_pos,
125 node->pos.y() + LEVEL_SPACING );
126 layer_cursor.push_back( new_cursor );
127 nodes_by_level.push_back( std::vector<AbstractTreeNode*>() );
128 }
129 else{
130 recommended_pos = std::max( recommended_pos, layer_cursor[current_layer].x() );
131 layer_cursor[current_layer].setX(recommended_pos);
132 }
133 }//------------------------------------
134 else
135 {
136 recommended_pos += node->pos.y() + node->size.height()*0.5;
137 for(int index: node->children_index)
138 {
139 const auto& child_node = tree.nodes()[index];
140 recommended_pos -= (child_node.size.height() + NODE_SPACING) * 0.5;
141 }
142
143 if( current_layer >= layer_cursor.size())
144 {
145 QPointF new_cursor( node->pos.x() + LEVEL_SPACING,
146 recommended_pos);

Callers 1

NodeReorderFunction · 0.85

Calls 3

nodeMethod · 0.80
rootNodeMethod · 0.80
QPointFClass · 0.50

Tested by

no test coverage detected