如何将自定义属性连接到节点输入?
How do I connect custom Attributes to node inputs?
我终于完成了我正在处理的 Helper Joint 脚本,只有最后一个问题挡住了我的路。这是脚本应该如何工作的。创建一个关节,将其命名为 "Parent_Joint" 然后在节点编辑器中创建一个 "multDoubleLinear" 节点,在选择您创建的关节并点击添加属性后将其命名为 "bob, Hit "Load Parent Joint”。在理想情况下我在这个主题上更聪明的世界,添加到关节的自定义属性将插入 bob 的 "input1" 而不是我收到一条错误消息“# Error:无法找到源属性 '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 命令,但我不满意的地方是自定义属性。我希望我知道如何编写代码来创建和连接关节的自定义属性。预先感谢您的帮助
您使用 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)
我终于完成了我正在处理的 Helper Joint 脚本,只有最后一个问题挡住了我的路。这是脚本应该如何工作的。创建一个关节,将其命名为 "Parent_Joint" 然后在节点编辑器中创建一个 "multDoubleLinear" 节点,在选择您创建的关节并点击添加属性后将其命名为 "bob, Hit "Load Parent Joint”。在理想情况下我在这个主题上更聪明的世界,添加到关节的自定义属性将插入 bob 的 "input1" 而不是我收到一条错误消息“# Error:无法找到源属性 '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 命令,但我不满意的地方是自定义属性。我希望我知道如何编写代码来创建和连接关节的自定义属性。预先感谢您的帮助
您使用 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)