Несколько текстовых полей, отказывающихся загружать выбранные объекты - PullRequest
0 голосов
/ 22 декабря 2018

Код, который я сделал, несмотря на двойную, тройную и четырехкратную проверку, отказывается загружать выбранные элементы в текстовые поля, что предполагает, что вы можете заставить maya преодолеть вновь обретенную ненависть к функции cmds.windows

Ошибки, которые я получаю, являются тройными, если вы попытаетесь загрузить код в новое окно, вы просто получите

Ошибка: имя 'окно' не определено ', если вы сделаете этоС этим препятствием вы столкнетесь с двумя проблемами: первая из них - просто вставка приведенного ниже кода. Меню будет загружаться очень хорошо, но если вы нажмете «Load A Node» или «Load B Node», вы получите ошибку "# Error: Объект 'window1 | columnLayout9 | sld_surfaceTextHJ' не найден.

Я никогда не вставлял в код "sld_surfaceTextHJ", поэтому я не знаю, почему Maya продолжает спрашивать об этом.Однако, если вы позаботитесь об этом и попытаетесь изменить имя 'sld_surfaceTextA' или 'sld_surfaceTextB' на любое другое имя, вы получите третью ошибку: # Ошибка: имя 'window1 | columnLayout9 | sld_surfaceTextHJ' не определено.

Скрипт работал нормально, загружая выборки, но кажется, что все скрипты, которые я сделал в этом формате, отказываются работать.

Вот если вы захотите попробовать

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

window = cmds.window(title='DS selection connector demo')
column = cmds.columnLayout(adj=True)

sld_textFldA = cmds.textField('sld_surfaceText1', width =240)
load_button = cmds.button( label='Load A Node', c = set_textfield)

sld_textFldB = cmds.textField('sld_surfaceText2', width =240)
load_button = cmds.button( label='Load B Node', c = set_textfield)

node_button = cmds.button( label='Connect Node', c = make_node)


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

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


def connect_node(_):
   text_value = cmds.textField(sld_textFldA, q = True, text=True)
   text_value = cmds.textField(sld_textFldB, q = True, text=True)
   if text_value:
       print "created:", cmds.connectAttr('transform', n=text_value +'_firstGuy')
       print "created:", cmds.connectAttr('transform', n=text_value +'_secondGuy')

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

cmds.showWindow( window )

Ожидаемые результаты довольно просты: вы нажимаете «Load A Node» на любом узле, который вы создаете, чтобы загрузить первый Node, затем вы нажимаете «Load B Node» на втором созданном вами узле: затем при нажатии «Connect Node»атрибут translate вашего первого узла должен быть подключен ко второму узлу, как редактор соединений.

1 Ответ

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

Не берите в голову, ребята, для всех, кто интересуется: вот фиксированный код, я еще не разобрался в части атрибутов подключения: но для тех, кто ищет простую демонстрацию загрузчика выбора textField, вот вам:

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

window = cmds.window(title='DS selection connector demo')
column = cmds.columnLayout(adj=True)

sld_textFldA = cmds.textField('sld_surfaceText1', width =240)
load_button = cmds.button( label='Load A Node', c = set_textfield1)

sld_textFldB = cmds.textField('sld_surfaceText2', width =240)
load_button = cmds.button( label='Load B Node', c = set_textfield2)


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

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


cmds.showWindow( window )
...