1

我对节点编写和 Maya 的 Python 2.0 API 比较陌生,并且正在创建一个自定义节点来使用预定数量的输入点进行一些计算。出于我们的目的,我们会说 7 分。

我已经在我的节点类的初始化方法中使用以下代码成功地将复合数组属性添加到我的节点:

    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 个元素?

非常感谢!

4

1 回答 1

0

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

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

postConstructor() -> 自我

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

于 2016-01-13T16:19:01.513 回答