MStatus node::compute(const MPlug& plug, MDataBlock& data){
if (plug == dirX) {
MDataHandle dirXHandle = data.outputValue(dirX);
MDataHandle dirXHandleOld = data.outputValue(dirXOld);
MTime time = MAnimControl::currentTime();
MDGContext timeContextOld(time - 1);
MObject inputMeshObj = inputMeshHandle.asMesh();
MFnMesh meshFn(inputMeshObj);
MDagPath dagPath;
dagPath = meshFn.dagPath();
MFnDagNode transFn(dagPath);
MPlug matrixPlugArray = transFn.findPlug("worldMatrix");
matrixPlugArray.evaluateNumElements();
MPlug matrixPlug = matrixPlugArray.elementByPhysicalIndex(0);
MObject matrixO;
matrixPlug.getValue(matrixO, timeContextOld);
MFnMatrixData fnMat(matrixO);
MVector res = fnMat.transformation().getTranslation(MSpace::kWor ld);
// Set the output data.
dirXHandle.setFloat(0.0);
dirXHandleOld.setFloat(res.x);
}else {
return MS::kUnknownParameter;
}
return MS::kSuccess;
}
matMObj = matrixPlug.asMObject(timeContext)
mat = om.MFnMatrixData(matMObj).matrix()
if( pPlug == DirectionMovNode.dirXAttribute ):
# Get our custom input node attributes and values.
inputMeshHandle = pDataBlock.inputValue( DirectionMovNode.inputMeshAttribute )
inputMeshObj = inputMeshHandle.asMesh()
meshFn = OpenMaya.MFnMesh(inputMeshObj)
transFn = OpenMaya.MFnDagNode (meshFn.dagPath())
matrixPlugArray = transFn.findPlug("worldMatrix")
matrixPlugArray.evaluateNumElements()
matrixPlug = matrixPlugArray.elementByPhysicalIndex(0)
time = OpenMayaAnim.MAnimControl.currentTime()
timeContext = OpenMaya.MDGContext(time-1)
matrixO = matrixPlug.asMObject(timeContext)
fnMat = OpenMaya.MFnMatrixData(matrixO)
matrix = fnMat.matrix()
result = '% .06f, % .06f, % .06f, % .06f,\n% .06f, % .06f, % .06f, % .06f,\n% .06f, % .06f, % .06f, % .06f,\n% .06f, % .06f, % .06f, % .06f,\n'
print result % (matrix(0, 0), matrix(0, 1), matrix(0, 2), matrix(0, 3), matrix(1, 0), matrix(1, 1), matrix(1, 2), matrix(1, 3), matrix(2, 0), matrix(2, 1), matrix(2, 2 ), matrix(2, 3), matrix(3, 0), matrix(3, 1), matrix(3, 2), matrix(3, 3))
# Set the output data.
dirX = pDataBlock.outputValue( DirectionMovNode.dirXAttribute )
dirX.setFloat(matrix(3, 0))import maya.api.OpenMaya as omimport maya.api.OpenMayaAnim as omaimport maya_utils as mu # Sorry, this is a library I use at work.meshFn = mu.mFnMeshFromName('pSphere1')
transFn = om.MFnDagNode(meshFn.dagPath()); print 'transFn:', transFn.name()matrixPlugArray = transFn.findPlug("worldMatrix", 0)matrixPlugArray.evaluateNumElements()matrixPlug = matrixPlugArray.elementByPhysicalIndex(0)time = oma.MAnimControl.currentTime()timeContext = om.MDGContext(time); print 'time:', timematrixO = matrixPlug.asMObject(timeContext)fnMat = om.MFnMatrixData(matrixO)matrix = fnMat.matrix(); print list(matrix)[12:16]timeContext = om.MDGContext(time-1); print 'time-1:', time-1matrixO = matrixPlug.asMObject(timeContext)fnMat = om.MFnMatrixData(matrixO)matrix = fnMat.matrix(); print list(matrix)[12:16]transFn: pSphereShape1time: 2 kNTSCFrame[-138.33162561773997, -552.7601891996619, 0.0, 1.0]time-1: 1 kNTSCFrame[-138.33162561773997, 185.2440600553723, 0.0, 1.0]