Hi!! I’m working in a node that multiplies two matrix, when i put the mouse over the input attribute “Matrix1” and “Matrix2” it show me that, by default, it contains the identity matrix, but when i put the mouse over the “Matrix Output”, it show me that the output value its all zero.
I tried to print the values of matrix1 and matrix2 but it show me all zero, whats happen?? I need help please!! Thanks in advanced!!
import sys
import maya.OpenMaya as om
import maya.OpenMayaMPx as omp
nodeTypeName = "m4MultiplierNode"
nodeTypeId = om.MTypeId(0x33335)
def MAKE_INPUT(attr):
# Macro to define an attribute as input attribute
attr.setKeyable(True)
attr.setStorable(True)
attr.setReadable(True)
attr.setWritable(True)
def MAKE_OUTPUT(attr):
# Macro to define an attribute as input attribute
attr.setKeyable(False)
attr.setStorable(False)
attr.setReadable(True)
attr.setWritable(False)
class m4MultiplierNode(omp.MPxNode):
m1 = om.MObject()
m2 = om.MObject()
mOutput = om.MObject()
def __init__(self):
omp.MPxNode.__init__(self)
def printMatrix(self, matrix):
result = '% .2f % .2f % .2f % .2f
% .2f % .2f % .2f % .2f
% .2f % .2f % .2f % .2f
% .2f % .2f % .2f % .2f
'
print "/////////////////////////////////////////////////"
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))
print "/////////////--------finish-------//////////////"
def compute(self, plug, block):
print "> compute"
try:
m1_dh = block.inputValue(m4MultiplierNode.m1)
m2_dh = block.inputValue(m4MultiplierNode.m2)
mO_dh = block.inputValue(m4MultiplierNode.mOutput)
except ImportError:
sys.stderr.write("Failed to get MDataHandle")
m1_value = m1_dh.asMatrix()
m2_value = m2_dh.asMatrix()
mO_value = mO_dh.asMatrix()
for x in range(4):
for y in range(4):
sumatory = 0.0
for z in range(4):
sumatory = sumatory + m1_value(x, z) * m2_value(z, y)
om.MScriptUtil.setDoubleArray(mO_value[x], y, sumatory)
def nodeCreator():
print "created"
return omp.asMPxPtr(m4MultiplierNode())
def nodeInitializer():
mAttr1 = om.MFnMatrixAttribute()
m4MultiplierNode.m1 = mAttr1.create("matrix1", "m1", om.MFnMatrixAttribute.kFloat)
MAKE_INPUT(mAttr1)
m4MultiplierNode.addAttribute(m4MultiplierNode.m1)
mAttr2 = om.MFnMatrixAttribute()
m4MultiplierNode.m2 = mAttr2.create("matrix2", "m2", om.MFnMatrixAttribute.kFloat)
MAKE_INPUT(mAttr2)
m4MultiplierNode.addAttribute(m4MultiplierNode.m2)
mAttr3 = om.MFnMatrixAttribute()
m4MultiplierNode.mOutput = mAttr3.create("matrixOutput", "mO", om.MFnMatrixAttribute.kFloat)
MAKE_OUTPUT(mAttr3)
m4MultiplierNode.addAttribute(m4MultiplierNode.mOutput)
m4MultiplierNode.attributeAffects(m4MultiplierNode.m1, m4MultiplierNode.mOutput)
m4MultiplierNode.attributeAffects(m4MultiplierNode.m2, m4MultiplierNode.mOutput)
def initializePlugin(obj):
# Aqui se registra el nodo
plugin = omp.MFnPlugin(obj)
plugin.registerNode(nodeTypeName, nodeTypeId, nodeCreator,
nodeInitializer, omp.MPxNode.kDependNode)
def uninitializePlugin(obj):
# Aqui se elimina del registro
plugin = omp.MFnPlugin(obj)
plugin.deregisterNode(nodeTypeId)
If I put something like "print "value = ", m1_value(0,0) it does not work either =(