如何在maya python api中创建矢量类型的属性?

时间:2015-02-21 10:18:08

标签: python api maya

我是api的新手,最近我学会了如何创建节点然后我想要创建3个属性,这些属性应该是一个属性的父级,就像我们通过"添加属性"在maya中我们得到3个属性(x,y,x),它们将成为一个属性的父级。那么,我怎么能创造它们呢?我正在使用此代码但我无法得到所期待的内容。

nAttr = OpenMaya.MFnNumericAttribute()
cAttr = OpenMaya.MFnCompoundAttribute()

    node.old = cAttr.create('oldValue', 'old')
    node.oldX =nAttr.create('oldValueX', 'oldX', OpenMaya.MFnNumericData.kFloat)
    node.oldY =nAttr.create('oldValueY', 'oldY', OpenMaya.MFnNumericData.kFloat)
    node.oldZ =nAttr.create('oldValueZ', 'oldZ', OpenMaya.MFnNumericData.kFloat)
    cAttr.setArray(True)
    cAttr.addChild(node.oldX)
    cAttr.addChild(node.oldY)
    cAttr.addChild(node.oldZ)
    cAttr.setKeyable(True)
    node.addAttribute(node.old)
谢谢......

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上,它只是有点不稳定。您创建复合属性,然后创建子属性,将所有这些属性添加到节点类,然后将子属性添加到复合。

compound = OpenMaya.MFnCompoundAttribute()
node.target = compound.create("target", "t")

xv = OpenMaya.MFnUnitAttribute()
node.inTargetX = xv.create("targetTranslateX", "ttx", OpenMaya.MFnUnitAttribute.kDistance)
xv.setStorable(1)
xv.setWritable(1)
compound.addChild(node.inTargetX)

yv = OpenMaya.MFnUnitAttribute()
node.inTargetY = xv.create("targetTranslateY", "tty", OpenMaya.MFnUnitAttribute.kDistance)
yv.setConnectable(1)
yv.setStorable(1)
yv.setWritable(1)
compound.addChild(node.inTargetY)

zv = OpenMaya.MFnUnitAttribute()
node.inTargetZ =  xv.create("targetTranslateZ", "ttz", OpenMaya.MFnUnitAttribute.kDistance)
zv.setConnectable(1)
zv.setStorable(1)
zv.setWritable(1)
compound.addChild(node.inTargetZ)

# add to the node
node.addAttribute(node.target)

您是否记得使用attributeAffects()来设置属性之间的依赖关系?此外,您可能希望对表示空间位置的矢量属性使用MFnUnitAttribute.kDistance而不是kFloat值。

除此之外,你究竟是什么意思“没有得到你期望的东西?”