MCPcopy Create free account
hub / github.com/dartsim/dart / cloneBodyNodeTree

Method cloneBodyNodeTree

dart/dynamics/Skeleton.cpp:2568–2611  ·  view source on GitHub ↗

==============================================================================

Source from the content-addressed store, hash-verified

2566
2567//==============================================================================
2568std::pair<Joint*, BodyNode*> Skeleton::cloneBodyNodeTree(
2569 Joint* _parentJoint,
2570 const BodyNode* _bodyNode,
2571 const SkeletonPtr& _newSkeleton,
2572 BodyNode* _parentNode,
2573 bool _recursive) const
2574{
2575 std::pair<Joint*, BodyNode*> root(nullptr, nullptr);
2576 std::vector<const BodyNode*> tree;
2577 if (_recursive)
2578 tree = constructBodyNodeTree(_bodyNode);
2579 else
2580 tree.push_back(_bodyNode);
2581
2582 std::map<std::string, BodyNode*> nameMap;
2583 std::vector<BodyNode*> clones;
2584 clones.reserve(tree.size());
2585
2586 for (std::size_t i = 0; i < tree.size(); ++i) {
2587 const BodyNode* original = tree[i];
2588 // If this is the root of the tree, and the user has requested a change in
2589 // its parent Joint, use the specified parent Joint instead of created a
2590 // clone
2591 Joint* joint = (i == 0 && _parentJoint != nullptr)
2592 ? _parentJoint
2593 : original->getParentJoint()->clone();
2594
2595 BodyNode* newParent
2596 = i == 0 ? _parentNode
2597 : nameMap[original->getParentBodyNode()->getName()];
2598
2599 BodyNode* clone = original->clone(newParent, joint, true);
2600 clones.push_back(clone);
2601 nameMap[clone->getName()] = clone;
2602
2603 if (0 == i) {
2604 root.first = joint;
2605 root.second = clone;
2606 }
2607 }
2608
2609 _newSkeleton->receiveBodyNodeTree(clones);
2610 return root;
2611}
2612
2613//==============================================================================
2614template <typename BodyNodeT>

Callers 1

copyToMethod · 0.45

Calls 7

getParentJointMethod · 0.80
receiveBodyNodeTreeMethod · 0.80
reserveMethod · 0.45
sizeMethod · 0.45
cloneMethod · 0.45
getNameMethod · 0.45
getParentBodyNodeMethod · 0.45

Tested by

no test coverage detected