在maya python 2.0 API中的自定义节点上指定属性数组的大小

时间:2015-08-20 17:36:10

标签: python maya maya-api

我对节点编写和Maya的Python 2.0 API相对较新,我正在创建一个自定义节点,使用预定数量的输入点进行一些计算。为了我们的目的,我们说7分。

我已经使用Node Node的初始化方法中的以下代码成功将Compound Array属性添加到我的节点:

    cAttr = OpenMaya.MFnCompoundAttribute()
    node.test = cAttr.create('test','t')

    xv = OpenMaya.MFnUnitAttribute()
    node.testX = xv.create('testX','tx',OpenMaya.MFnUnitAttribute.kDistance)
    xv.storable = True
    xv.writable = True
    cAttr.addChild(node.testX)

    xv = OpenMaya.MFnUnitAttribute()
    node.testY = xv.create('testY','ty',OpenMaya.MFnUnitAttribute.kDistance)
    xv.storable = True
    xv.writable = True
    cAttr.addChild(node.testY)

    xv = OpenMaya.MFnUnitAttribute()
    node.testZ = xv.create('testZ','tz',OpenMaya.MFnUnitAttribute.kDistance)
    xv.storable = True
    xv.writable = True
    cAttr.addChild(node.testZ)

    cAttr.array = True 

    node.addAttribute(node.test)

既然我有这个,我怎么能指定我想让node.test(cAttr)数组有7个元素?

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您要求在定义化合物时具有默认大小或Array的固定大小,则没有解决方案。

您可以做的就是在创建每个实例后立即为其设置属性数组。为此,您需要实现postConstructor()方法。在自定义python对象实例成为有效的Maya节点之后,Maya核心会调用该方法。

postConstructor() - >自

在创建用户定义的节点时,内部maya会创建两个对象,内部MObject和用户派生对象。 直到调用MPxNode构造函数之后才会进行这两个对象之间的关联。这意味着不能从MPxNode构造函数中调用MPxNode成员函数。 当构造函数可以安全地调用任何MPxNode成员函数时,将立即调用postConstructor。