bool Skeleton::isAncestor( unsigned int j1, unsigned int j2 ) { Joint* joint1 = getJointByIndex( j1 ); Joint* joint2 = getJointByIndex( j2 ); Joint* joint = joint2->getParent(); while( joint ) { if( joint == joint1 ) { return true; } joint = joint->getParent(); } return false; }
SkinParser::TokenState SkinParser::gotMatrixKeyword(int _jointNumber){ //std::cout << "got matrix keyword" << std::endl; float row0[4] = { 0, 0, 0, 0 }; float row1[4] = { 0, 0, 0, 0 }; float row2[4] = { 0, 0, 0, 0 }; float row3[4] = { 0, 0, 0, 1 }; Matrix4 matrix; checkForOpenCurly(); row0[0] = atof(getNextToken().str.c_str()); row0[1] = atof(getNextToken().str.c_str()); row0[2] = atof(getNextToken().str.c_str()); row1[0] = atof(getNextToken().str.c_str()); row1[1] = atof(getNextToken().str.c_str()); row1[2] = atof(getNextToken().str.c_str()); row2[0] = atof(getNextToken().str.c_str()); row2[1] = atof(getNextToken().str.c_str()); row2[2] = atof(getNextToken().str.c_str()); row3[0] = atof(getNextToken().str.c_str()); row3[1] = atof(getNextToken().str.c_str()); row3[2] = atof(getNextToken().str.c_str()); matrix.setRow(0, row0); matrix.setRow(1, row1); matrix.setRow(2, row2); matrix.setRow(3, row3); //model.bindings.push_back(matrix); tree<BallJoint>::iterator it; it = getJointByIndex(_jointNumber); it->binding = matrix; checkForCloseCurly(); return afterMatrixKeyword; }