我对节点编写和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个元素?
非常感谢!
答案 0 :(得分:0)
如果您要求在定义化合物时具有默认大小或Array的固定大小,则没有解决方案。
您可以做的就是在创建每个实例后立即为其设置属性数组。为此,您需要实现postConstructor()方法。在自定义python对象实例成为有效的Maya节点之后,Maya核心会调用该方法。
postConstructor() - >自
在创建用户定义的节点时,内部maya会创建两个对象,内部MObject和用户派生对象。 直到调用MPxNode构造函数之后才会进行这两个对象之间的关联。这意味着不能从MPxNode构造函数中调用MPxNode成员函数。 当构造函数可以安全地调用任何MPxNode成员函数时,将立即调用postConstructor。