Как подключить пользовательские атрибуты к входам узла? - PullRequest
0 голосов
/ 28 декабря 2018

Я наконец-то нахожусь в конце игры со скриптом Helper Joint, над которым я работаю, и только одна последняя проблема стоит у меня на пути.Вот как скрипт должен работать.Создайте соединение, назовите его «Parent_Joint», затем создайте узел «multDoubleLinear» в редакторе узлов, назовите его «bob, нажмите« Загрузить родительское соединение »после выбора созданного вами соединения и нажмите« Добавить атрибут ». В идеальном мире, где я»Более разумно в этом вопросе. Пользовательский атрибут, добавленный в соединение, будет подключен к «входу1» Боба, вместо этого я получаю сообщение об ошибке: «# Ошибка: исходный атрибут« 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)

Я знаю, как использоватьКоманда connectAttr по умолчанию атрибутов в майя, но где я faВсе квартиры - это пользовательские атрибуты.Я надеюсь, что смог понять, как писать код, который создает и связывает пользовательские атрибуты соединения.Заранее благодарю за помощь

1 Ответ

0 голосов
/ 02 января 2019

То, как вы использовали 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)
...