如何将自定义属性连接到节点输入?

时间:2018-12-28 08:45:31

标签: python maya autodesk

我终于进入了我正在研究的Helper Joint脚本的结尾游戏,而我的最后一个问题仍然困扰着我。这是脚本应如何工作的。创建一个关节,将其命名为“ Parent_Joint”,然后在节点编辑器中创建一个“ multDoubleLinear”节点,将其命名为“ bob,选择创建的关节并单击添加属性后,单击“加载父关节”。对于这个问题,我更聪明的是,将添加到关节的自定义属性插入到bob的“ input1”中,但我收到一条错误消息:“#错误:找不到源属性'Parent_Joint_HelperJntAttr'。”

就我已经尝试过的而言,我将connectAttr放在addAttr之下,因为常识表明,必须在连接属性之前先创建该属性:尽管如此,它只是拒绝连接。我知道故障不会落在“ bob.input1”节点上,因为它只会显示“ Parent_Joint_HelperJntAttr”的前缀属性名称:所以我的猜测是这仅仅是我缺乏编写此特定过程的知识。

import maya.cmds as cmds
if cmds.window(window, exists =True):
    cmds.deleteUI(window)

window = cmds.window(title='DS Attribute adder')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)

def set_textfield(_):
    sel = cmds.ls(selection=True)
    cmds.textField(sld_textFld, edit=True, text=sel[0])

load_button = cmds.button( label='Load Parent Joint', c = set_textfield)

def add_Attribute(_):
   text_value = cmds.textField(sld_textFld, q = True, text=True)
   if text_value:
       print "attrAdded:" 
       cmds.addAttr(ln=text_value +'_HelperJntAttr', defaultValue=5.0, minValue=0, attributeType='float', keyable=True)

       cmds.connectAttr( text_value +"_HelperJntAttr", 'bob.input1')

   else:
       cmds.warning("select an object and add it to the window first!")

node_button = cmds.button( label='add attribute', c = add_Attribute)
cmds.showWindow(window)

我知道如何在maya的默认属性上使用connectAttr命令,但是我习惯的地方是自定义属性。我的希望是我知道如何编写可创建并连接关节的自定义属性的代码。预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您使用addAttr的方式是在属性名称中包括关节的名称。属性用.而不是_隔开,因此您的connectAttr也因此而失败。

您还需要将window变量初始化为某个默认值,否则它将在您检查变量是否存在的行上失败(但此时window尚未定义)。

以下是添加属性并按预期连接属性的脚本:

import maya.cmds as cmds

window = "" # Need to initialize this variable first or it crashes on next line.

if cmds.window(window, exists =True):
    cmds.deleteUI(window)

window = cmds.window(title='DS Attribute adder')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)


def set_textfield(_):
    sel = cmds.ls(selection=True)
    cmds.textField(sld_textFld, edit=True, text=sel[0])


load_button = cmds.button( label='Load Parent Joint', c = set_textfield)


def add_Attribute(_):
   text_value = cmds.textField(sld_textFld, q = True, text=True)
   if text_value:
       print "attrAdded:" 
       # Attribute must be created this way.
       cmds.addAttr(text_value, ln='HelperJntAttr', defaultValue=5.0, minValue=0, attributeType='float', keyable=True)

       # Attribute is separated with a dot.
       cmds.connectAttr(text_value + ".HelperJntAttr", 'bob.input1')
   else:
       cmds.warning("select an object and add it to the window first!")


node_button = cmds.button( label='add attribute', c = add_Attribute)
cmds.showWindow(window)