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

2024-06-28 20:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我把一个问题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是空指针。如果是这样,为泛型属性设置默认值的最佳方法是什么?在


Tags: 函数debugdata属性节点print指针val1