请求了Maya Python协助:根据文本字段内容连接属性

时间:2018-12-21 03:17:18

标签: python maya autodesk pymel

背景

因此,在用户Theodox的帮助下,我能够弄清如何在节点编辑器中基于加载到选择字段中的关节来创建具有名称前缀的节点。

但是:我想更进一步,使之不仅使节点具有联合名称前缀:而且它们还将连接通过connectAttr创建的节点的转换。

问题?

我目前缺乏进行这项工作的知识,而且我无法在网上找到任何东西,因此,我们将不胜感激

代码:

我尝试过以下代码行:

cmds.connectAttr( sel[0] + '.rotate', sel[1] + '.rotate' )

cmds.connectAttr( n=text_value +'_firstGuy', n=text_value +'_secondGuy' )

我知道我可以创建单独的文本字段和按钮来加载节点并以这种方式连接它们,但是使用我正在编码的快捷方式,我创建的所有节点将太多而无法加载,因此如果我这样做会更容易可以创建带有连接的节点,我将下面的代码发布给任何愿意破解的人:

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)  

我的预期结果:

在点击“加载辅助关节”后,在加载关节之后点击“ make节点”,一旦创建了带有关节名称前缀的“ _firstGuy”和“ _secondGuy”,它们的翻译将被连接。打开节点编辑器进行测试会有所帮助。

1 个答案:

答案 0 :(得分:0)

好的,您想连接两个新创建的节点的转换属性。 通常,连接属性是这样的:

connectAttr(<attributeA>, <attributeB>)

其中attributeA类似于“ NodeA.translate”。因此,您需要的是您的第一个节点的名称和属性名称:

nodeNameA = text_value + "_firstGuy"
nodeNameB = text_value + "_secondGuy"

该属性是众所周知的“翻译”,因此完整的属性名称为:

attributeNameA = nodeNameA + ".translate"
attriubteNameB = nodeNameB + ".translate"

完整的命令现在是:

connectAttr(attributeNameA, attributeNameB)

这里唯一的问题是,如果已有同名对象,则Maya会自动重命名对象。因此,它更节省了使用创建的名称的方式:

firstGuyNode = cmds.createNode( 'transform', n=text_value +'_firstGuy' )