Maya Python 请求帮助:根据文本字段内容连接属性
Maya Python Assistance requested: connect attributes based on textfield contents
背景:
感谢用户 Theodox 的帮助,我能够弄清楚如何在节点编辑器中创建节点,并根据您加载到选择字段中的关节使用名称前缀。
但是:我想更进一步,不仅创建的节点带有联合名称前缀:而且它们还将连接通过 connectAttr 创建的节点的翻译。
问题?
我目前缺乏完成这项工作的知识,而且我在网上找不到任何东西,因此非常感谢任何帮助
代码:
我试过如下代码行:
cmds.connectAttr( sel[0] + '.rotate', sel[1] + '.rotate' )
或
cmds.connectAttr( n=text_value +'_firstGuy', n=text_value +'_secondGuy' )
我知道我可以创建单独的文本字段和按钮来加载节点并以这种方式连接它们,但是使用我正在编码的快捷方式,我创建的所有节点都会太多而无法加载,所以它会更容易如果我可以用它们的连接创建节点,我会 post 下面的代码供任何愿意尝试的人使用:
import maya.cmds as cmds
if cmds.window(window, exists =True):
cmds.deleteUI(window)
window = cmds.window(title='DS Node Connector demo')
column = cmds.columnLayout(adj=True)
def set_textfield(_):
sel = cmds.ls(selection=True)
cmds.textField(sld_textFld, edit=True, text=sel[0])
def nodebuilder(_):
text_value = cmds.textField(sld_textFld, q = True, text=True)
if text_value:
print "created:", cmds.createNode( 'transform', n=text_value +'_firstGuy' )
print "created:", cmds.createNode( 'transform', n=text_value +'_secondGuy' )
# Connect the translation of two nodes together
print "connected:", cmds.connectAttr (sel[0] +'.t', sel[1] + '.t')
#print "connected:", cmds.connectAttr( '_firstGuy.t', '_secondGuy.translate' )
# Connect the rotation of one node to the override colour
# of a second node.
#print "connected:", cmds.connectAttr( '_firstGuy.rotate', '_secondGuy.overrideColor' )
else:
cmds.warning("select an object and add it to the window first!")
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)
load_button = cmds.button( label='Load Helper Joint', c = set_textfield)
node_button = cmds.button( label='Make Node', c = nodebuilder)
cmds.showWindow(window)
我的预期结果:
在点击 "load helper joint" 后加载关节后点击 "make node" 后,一旦“_firstGuy”和“_secondGuy”以关节的名称前缀创建,它们的翻译将被连接。它有助于打开节点编辑器来测试它。
好的,你要连接两个新建节点的translate属性。
通常连接属性是这样的:
connectAttr(<attributeA>, <attributeB>)
其中 attributeA 类似于 "NodeA.translate"。所以你需要的是你的第一个节点的名称和属性名称,在你的例子中:
nodeNameA = text_value + "_firstGuy"
nodeNameB = text_value + "_secondGuy"
该属性是众所周知的 "translate",因此完整的属性名称为:
attributeNameA = nodeNameA + ".translate"
attriubteNameB = nodeNameB + ".translate"
现在完整的命令是:
connectAttr(attributeNameA, attributeNameB)
这里唯一的问题是,如果已经存在同名对象,Maya 会自动重命名对象。所以更节省的方式是这样使用创建的名称:
firstGuyNode = cmds.createNode( 'transform', n=text_value +'_firstGuy' )
背景:
感谢用户 Theodox 的帮助,我能够弄清楚如何在节点编辑器中创建节点,并根据您加载到选择字段中的关节使用名称前缀。
但是:我想更进一步,不仅创建的节点带有联合名称前缀:而且它们还将连接通过 connectAttr 创建的节点的翻译。
问题?
我目前缺乏完成这项工作的知识,而且我在网上找不到任何东西,因此非常感谢任何帮助
代码:
我试过如下代码行:
cmds.connectAttr( sel[0] + '.rotate', sel[1] + '.rotate' )
或
cmds.connectAttr( n=text_value +'_firstGuy', n=text_value +'_secondGuy' )
我知道我可以创建单独的文本字段和按钮来加载节点并以这种方式连接它们,但是使用我正在编码的快捷方式,我创建的所有节点都会太多而无法加载,所以它会更容易如果我可以用它们的连接创建节点,我会 post 下面的代码供任何愿意尝试的人使用:
import maya.cmds as cmds
if cmds.window(window, exists =True):
cmds.deleteUI(window)
window = cmds.window(title='DS Node Connector demo')
column = cmds.columnLayout(adj=True)
def set_textfield(_):
sel = cmds.ls(selection=True)
cmds.textField(sld_textFld, edit=True, text=sel[0])
def nodebuilder(_):
text_value = cmds.textField(sld_textFld, q = True, text=True)
if text_value:
print "created:", cmds.createNode( 'transform', n=text_value +'_firstGuy' )
print "created:", cmds.createNode( 'transform', n=text_value +'_secondGuy' )
# Connect the translation of two nodes together
print "connected:", cmds.connectAttr (sel[0] +'.t', sel[1] + '.t')
#print "connected:", cmds.connectAttr( '_firstGuy.t', '_secondGuy.translate' )
# Connect the rotation of one node to the override colour
# of a second node.
#print "connected:", cmds.connectAttr( '_firstGuy.rotate', '_secondGuy.overrideColor' )
else:
cmds.warning("select an object and add it to the window first!")
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)
load_button = cmds.button( label='Load Helper Joint', c = set_textfield)
node_button = cmds.button( label='Make Node', c = nodebuilder)
cmds.showWindow(window)
我的预期结果:
在点击 "load helper joint" 后加载关节后点击 "make node" 后,一旦“_firstGuy”和“_secondGuy”以关节的名称前缀创建,它们的翻译将被连接。它有助于打开节点编辑器来测试它。
好的,你要连接两个新建节点的translate属性。 通常连接属性是这样的:
connectAttr(<attributeA>, <attributeB>)
其中 attributeA 类似于 "NodeA.translate"。所以你需要的是你的第一个节点的名称和属性名称,在你的例子中:
nodeNameA = text_value + "_firstGuy"
nodeNameB = text_value + "_secondGuy"
该属性是众所周知的 "translate",因此完整的属性名称为:
attributeNameA = nodeNameA + ".translate"
attriubteNameB = nodeNameB + ".translate"
现在完整的命令是:
connectAttr(attributeNameA, attributeNameB)
这里唯一的问题是,如果已经存在同名对象,Maya 会自动重命名对象。所以更节省的方式是这样使用创建的名称:
firstGuyNode = cmds.createNode( 'transform', n=text_value +'_firstGuy' )