尝试从MDataHandle获取数据时,空指针错误传递给自定义节点中的辅助函数(Maya 2016 SP6,Python API)

时间:2017-06-20 18:31:43

标签: python python-2.7 maya maya-api

我遇到一个问题,当从辅助函数中调用时,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>

非常感谢任何帮助。谢谢!

更新:看起来我的问题可能是通用属性尚未初始化为默认值,因此,属性的数据句柄是空指针。如果是这样,为通用属性设置默认值的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

据我所知,将MDataHandle转换为尚未使用某些值初始化的泛型属性会导致返回Null指针。