Запрошена Maya Python Assistance: подключать атрибуты на основе содержимого текстового поля - PullRequest
0 голосов
/ 21 декабря 2018

Справочная информация:

Таким образом, благодаря помощи пользователя 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 node» после загрузки соединенияпосле нажатия «загрузить вспомогательное соединение», когда «_firstGuy» и «_secondGuy» создаются с префиксом имени соединения, их переводы будут соединены.Для проверки этого помогает открыть редактор узлов.

1 Ответ

0 голосов
/ 23 декабря 2018

Хорошо, вы хотите соединить атрибуты перевода двух новых созданных узлов.Обычно связывание атрибутов работает так:

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' )
...