MString CBPoseSpaceCmd::cacheResult(const MPointArray& bindPoints, const MPointArray& posePoints, const MVectorArray& dx, const MVectorArray& dy, const MVectorArray& dz) { MDGModifier modif; MObject opose = modif.createNode("sculptSpaceRecord"); modif.doIt(); unsigned count = dx.length(); MVectorArray row0Array; row0Array.setLength(count); MVectorArray row1Array; row1Array.setLength(count); MVectorArray row2Array; row2Array.setLength(count); MVectorArray row3Array; row3Array.setLength(count); MVectorArray bndArray; bndArray.setLength(count); MVectorArray posArray; posArray.setLength(count); float m[4][4]; for(unsigned i=0; i < count; i++) { m[0][0] = dx[i].x; m[0][1] = dx[i].y; m[0][2] = dx[i].z; m[0][3] = 0.f; m[1][0] = dy[i].x; m[1][1] = dy[i].y; m[1][2] = dy[i].z; m[1][3] = 0.f; m[2][0] = dz[i].x; m[2][1] = dz[i].y; m[2][2] = dz[i].z; m[2][3] = 0.f; m[3][0] = 0.f; m[3][1] = 0.f; m[3][2] = 0.f; m[3][3] = 1.f; MMatrix tm(m); tm = tm.inverse(); tm.get(m); row0Array[i].x = m[0][0]; row0Array[i].y = m[0][1]; row0Array[i].z = m[0][2]; row1Array[i].x = m[1][0]; row1Array[i].y = m[1][1]; row1Array[i].z = m[1][2]; row2Array[i].x = m[2][0]; row2Array[i].y = m[2][1]; row2Array[i].z = m[2][2]; row3Array[i].x = m[3][0]; row3Array[i].y = m[3][1]; row3Array[i].z = m[3][2]; bndArray[i] = bindPoints[i]; posArray[i] = posePoints[i]; } MFnDependencyNode fposec(opose); MStatus stat; MPlug pspacerow0 = fposec.findPlug("poseSpaceRow0", false, &stat); MPlug pspacerow1 = fposec.findPlug("poseSpaceRow1", false, &stat); MPlug pspacerow2 = fposec.findPlug("poseSpaceRow2", false, &stat); MPlug pspacerow3 = fposec.findPlug("poseSpaceRow3", false, &stat); MPlug pbind = fposec.findPlug("bpnt", false, &stat); MPlug ppose = fposec.findPlug("ppnt", false, &stat); MFnVectorArrayData frow0; MObject orow0 = frow0.create(row0Array); pspacerow0.setMObject(orow0); MFnVectorArrayData frow1; MObject orow1 = frow1.create(row1Array); pspacerow1.setMObject(orow1); MFnVectorArrayData frow2; MObject orow2 = frow2.create(row2Array); pspacerow2.setMObject(orow2); MFnVectorArrayData frow3; MObject orow3 = frow3.create(row3Array); pspacerow3.setMObject(orow3); MFnVectorArrayData fbind; MObject obind = fbind.create(bndArray); pbind.setMObject(obind); MFnVectorArrayData fpose; MObject oposed = fpose.create(posArray); ppose.setMObject(oposed); return fposec.name(); }