void MeshSkin::clearJoints() { setRootJoint(NULL); for (size_t i = 0, count = _joints.size(); i < count; ++i) { SAFE_RELEASE(_joints[i]); } _joints.clear(); }
void C3DMeshSkin::copyFrom(C3DMeshSkin* skin, C3DNode::CloneContext& context) { _bindShape = skin->_bindShape; std::map<const C3DNode*, C3DNode*>::iterator it = context.cloneMap.find(skin->_rootJoint); C3DBone* rootbone = NULL; if (it == context.cloneMap.end()) rootbone = (C3DBone*)skin->_rootJoint->clone(context); else rootbone = (C3DBone*)it->second; setJointCount(skin->getJointCount()); setRootJoint(rootbone); size_t i; for (i = 0; i < skin->_joints.size(); i++) { std::string strid = skin->_joints[i]->getId(); // strid += context.idSuffix; //C3DBone* bone = (strid == rootbone->getId() ? rootbone : (C3DBone*)rootbone->findNode(strid.c_str())); //C3DBone* bone = (C3DBone*)context.cloneMap[skin->_joints[i]]; ///.... std::map<const C3DNode*, C3DNode*>::iterator itr = context.cloneMap.find(skin->_joints[i]); C3DBone* bone = NULL; if (itr != context.cloneMap.end()) { bone = static_cast<C3DBone*>(itr->second); } else { C3DBone* newNode = static_cast<C3DBone*>(skin->_joints[i]->clone(context)); if (newNode) { context.cloneMap[skin->_joints[i]] = newNode; bone = newNode; } } //..... setJoint(bone, i); //bone->release(); } for (i = 0; i < skin->_partCount; i++) { addPart(skin->_parts[i]->_batchID, skin->_parts[i]->_offsetVertexIndex, skin->_parts[i]->_numVertexIndex); _parts[i]->setIndexData(&skin->_parts[i]->_indices[0], skin->_parts[i]->_indices.size()); } setBonePartIndex(skin->getBonePartIndex()); }