Maya添加数值复合属性(非API)

时间:2015-03-10 22:37:34

标签: python nodes maya mel addattribute

我一直在互联网上寻找解决方案,但无济于事。我目前正在尝试添加一个基于索引的复合属性(即“object.attribute [0],object.attribute [1],object.attribute [2]等...)类似于vertex和uv属性的方式通过文档看来似乎没有明确的方法来实现这一目标。

尝试: 我如何定义父:cmds.addAttr(nodeType, ln=theParent, nc=x, at='compound')

- 在addAttr中使用复合标志。

- 使用带字符串格式的for循环:

for i in range(x): 
    cmds.addAttr(ln='object.attribute[%s]' %i, p=theParent)

-Eval:

for i in range(x):
    mel.eval("addAttr -ln attribute["+str(i)+"] -p theParent;")

使用字符串格式化我遇到了这个错误。

# Traceback (most recent call last):
#   File "<maya console>", line 2, in <module>
# RuntimeError: Error occurred during execution of MEL script
# line 1: Long name 'attribute[0]' contains invalid characters. //

此复合属性最终将包含任意数量的Int32Array数据类型。

我可以创建自己的节点并通过API创建必要的属性,但我不想创建任何其他依赖项。

我为我的问题中的任何漏洞道歉或者有些事情不清楚。请问,我可以进一步解释。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用-m标志将父属性设置为多属性:

 cmds.addAttr("polyCube1", ln = "example", at="compound", nc = 2, m=True)
 cmds.addAttr("polyCube1", ln = "atx", at="float", p="example")
 cmds.addAttr("polyCube1", ln = "aty", at="float", p="example")

这将polyCube1.compound设置为一个由两部分组成的属性(UV是两部分的方式),也是一个多属性。您可以通过索引setAttr或连接来添加对:

 cmds.setAttr("polyCube1.example[0].atx", 1)
 cmds.setAttr("polyCube1.example[0].aty", 1)
 cmds.setAttr("polyCube1.example[1].atx", 2)
 cmds.setAttr("polyCube1.example[1].aty", 2)

 print cmds.getAttr("polyCube1.example[1].aty")
 # 2.0