我遇到一个问题,当从辅助函数中调用时,MDataHandle.data()返回的MObject是一个空指针。
我有一个带有几个通用属性的自定义节点(支持kDouble,k3Double和k3Float),需要根据它们是简单的数字数据还是数组数据进行不同的处理。我在自定义节点类中创建了一个定义为@classmethod的辅助函数,用于根据需要从通用属性中提取数据。将相应属性的MDataHandle传递给函数(传递MDataBlock会更好吗?),并使用isGeneric()检查属性。如果发现它是非数字的(在本例中是一个数组),则调用MDataHandle.data()函数以使MObject附加到MFnNumericData对象,这是问题出现的地方。
@classmethod
def getDataHandleValue(obj, dataHandle):
print 'getDataHandleValue called' # DEBUG
# Script util objects for creating pointers
isNumericUtil = OpenMaya.MScriptUtil(False)
isNullUtil = OpenMaya.MScriptUtil(False)
isNumericPtr = isNumericUtil.asBoolPtr()
isNullPtr = isNullUtil.asBoolPtr()
if dataHandle.isGeneric(isNumericPtr, isNullPtr):
if isNumericUtil.getBool(isNumericPtr):
print 'Generic data is numeric' # DEBUG
return dataHandle.asGenericDouble()
else:
print 'Generic data is not numeric' # DEBUG
dataObj = dataHandle.data()
print 'Got data object' # DEBUG
nDataFn = OpenMaya.MFnNumericData()
print 'Attempting to set object...' # DEBUG
nDataFn.setObject(dataObj)
val0 = 0.0
val1 = 0.0
val2 = 0.0
print [val0, val1, val2] # DEBUG
nDataFn.getData3Double(val0, val1, val2)
return [val0, val1, val2]
else:
raise ValueError('Data handle to non-generic attribute')
当我尝试通过从MDataHandle.data()传递MObject来创建函数集时,我得到一个空指针错误......
我想知道是否存在某种范围问题,因为文档提到MDataBlock仅在节点的计算功能期间有效,但我认为在计算功能中运行的辅助函数是可以的。 / p>
非常感谢任何帮助。谢谢!
更新:看起来我的问题可能是通用属性尚未初始化为默认值,因此,属性的数据句柄是空指针。如果是这样,为通用属性设置默认值的最佳方法是什么?
答案 0 :(得分:0)
据我所知,将MDataHandle转换为尚未使用某些值初始化的泛型属性会导致返回Null指针。