2015-02-21 1 views
0

Я очень новичок в api, недавно я узнал, как создать узел, тогда я хочу создать 3 атрибута, которые должны быть родительскими для одного атрибута, например, когда мы создаем векторный атрибут через «add attribute» в Maya, тогда мы получаем 3 атрибута (x, y, x), и они будут родительскими для одного атрибута. так, тогда как я могу их создать? я работаю с этим кодом, но я не могу получить то, что ожидаю.Как я могу создать векторный тип атрибутов в Maya python api?

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

Вы находитесь на правильном пути, это просто немного шаткий. Вы создаете составной атрибут, затем дочерние атрибуты, добавляете все это в класс узла и затем добавляете дочерние атрибуты в состав.

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 для векторного атрибута, представляющего пространственное положение.

Помимо этого, что именно вы подразумеваете под словом «не получить то, что вы ожидаете?»

+0

thanx много theodox для вашего ответа ... –