我把一个问题MDataHandle.data从助手函数中调用时,()是空指针。在
我有一个自定义节点,它有两个通用属性(支持kDouble、k3Double和k3Float),需要根据它们是简单数值数据还是数组数据进行不同的处理。我在自定义节点类中创建了一个定义为@classmethod的helper函数,用于根据需要从泛型属性中提取数据。适当属性的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()我得到一个空指针错误。。。在
我想知道是否存在某种范围问题,因为文档提到MDataBlock只在节点的compute函数期间有效,但是我认为在compute函数中运行一个helper函数就可以了。在
任何帮助都将不胜感激。谢谢!在
更新:我的问题可能是泛型属性没有初始化为默认值,因此属性的datahandle是空指针。如果是这样,为泛型属性设置默认值的最佳方法是什么?在
据我所知,获取一个未使用某些值初始化的泛型属性的MDataHandle会导致返回空指针。在
相关问题 更多 >
编程相关推荐