hubo_joint_info_t HuboDescription::getJointInfo(size_t joint_index) const { if( joint_index >= getJointCount() ) { fprintf(stderr, "Requesting joint info for an index which is out-of-bounds (%zu)!\n" " -- Maximum index is %zu\n", joint_index, getJointCount()-1); hubo_joint_info_t info; memset(&info, 0, sizeof(hubo_joint_info_t)); return info; } return joints[joint_index]->info; }
StringArray HuboDescription::getJointNames() const { StringArray result; for(size_t i=0; i<getJointCount(); ++i) { result.push_back(getJointName(i)); } return result; }
size_t HuboDescription::getJointIndex(const std::string& joint_name) const { for(size_t i=0; i < getJointCount(); ++i) { std::string current_name(joints[i]->info.name); if(joint_name == current_name) { return i; } } return InvalidIndex; }
MeshSkin* MeshSkin::clone(NodeCloneContext &context) const { MeshSkin* skin = new MeshSkin(); skin->_bindShape = _bindShape; if (_rootNode && _rootJoint) { const unsigned int jointCount = getJointCount(); skin->setJointCount(jointCount); GP_ASSERT(skin->_rootNode == NULL); // Check if the root node has already been cloned. if (Node* rootNode = context.findClonedNode(_rootNode)) { skin->_rootNode = rootNode; rootNode->addRef(); } else { skin->_rootNode = _rootNode->cloneRecursive(context); } Node* node = NULL; if (strcmp(skin->_rootNode->getId(), _rootJoint->getId()) == 0) { node = skin->_rootNode; } else { node = skin->_rootNode->findNode(_rootJoint->getId()); } GP_ASSERT(node); skin->_rootJoint = static_cast<Joint*>(node); for (unsigned int i = 0; i < jointCount; ++i) { Joint* oldJoint = getJoint(i); GP_ASSERT(oldJoint); Joint* newJoint = static_cast<Joint*>(skin->_rootNode->findNode(oldJoint->getId())); if (!newJoint) { if (strcmp(skin->_rootJoint->getId(), oldJoint->getId()) == 0) newJoint = static_cast<Joint*>(skin->_rootJoint); } GP_ASSERT(newJoint); skin->setJoint(newJoint, i); } } return skin; }