#maya #mel
#maya #mel
Вопрос:
Новичок в mel, и я пишу пользовательский интерфейс для выбора объекта в моей сцене Maya, и мне нужна помощь в том, как я могу использовать задание скрипта, чтобы изменить цвет кнопки на белый при выборе объекта и вернуться к цвету по умолчанию, когда объект отменен. Цвет кнопки должен оставаться белым до тех пор, пока выбран объект. Пожалуйста, предоставьте решения, основанные на приведенном ниже коде. Спасибо!
if (`window -exists MyPicker`) deleteUI MySelecter;
window -title "Item Selecter" -widthHeight 170 300 -sizeable false -mxb false MySelecter;
formLayout -numberOfDivisions 100 MySelecter;{
button -label "object1" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object1" object1_Btn;
button -label "object2" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object2" object2_Btn;
button -label "object3" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object3" object3_Btn;
button -label "object4" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object4" object4_Btn;
button -label "object5" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object5" object5_Btn;
}
formLayout -edit
//object button
-attachForm object1_Btn "top" 14
-attachForm object1_Btn "left" 0
-attachForm object2_Btn "top" 71
-attachForm object2_Btn "left" 0
-attachForm object3_Btn "top" 128
-attachForm object3_Btn "left" 0
-attachForm object4_Btn "top" 185
-attachForm object4_Btn "left" 0
-attachForm object5_Btn "top" 242
-attachForm object5_Btn "left" 0
MySelecter;
showWindow MySelecter;
Комментарии:
1. Итак, это не сервис для написания сценариев, поэтому, учитывая, что этот вопрос касается scriptJobs, что вы пробовали и в чем проблема, с которой это связано? В документах Maya есть очень четкие объяснения того, как работают scriptJobs.
2. Можно спросить, почему вы переключились на mel вместо python? Благодаря пользовательскому интерфейсу python значительно упрощает вашу жизнь.
3. Спасибо, ребята, что уделили время. Прежде всего, документы Maya хороши, когда вы разбираетесь в программировании, я аниматор и так долго игнорировал программирование из-за страха перед ним. У меня нет опыта программирования. В последнее время я много учусь и расспрашиваю окружающих, вижу код в действии и обдумываю его, что помогает мне учиться. Итак, это может показаться простым, но, честно говоря, это не для новичка вроде меня. У меня есть только голова о задании скрипта из моего другого вопроса, когда кто-то предложил это.
4. Я открываю Maya docs baam, я понятия не имею, что происходит. Итак, я знаю, что могу использовать: $ Job1 = scriptJob -e «RecentCommandChanged» «colorChange»; $ Job2 = scriptJob -e «SelectionChanged» «colorChange»; но подключить это к моему коду без посторонней помощи — это кошмар. хагги Крей, я не переключался с python на mel, на самом деле я вроде как изучаю оба языка, я верю, что знание mel тоже помогло бы мне легко переводить коды на python, поскольку Maya плюет mel на что угодно. Еще раз спасибо.
5. Ну, чтобы заставить эту задачу работать, вам нужно знать, как работать с глобальными переменными, глобальными процедурами, как использовать аргументы в процедурах. Итак, пока вы не знаете, как справиться с этими вещами, любой ответ вызовет разочарование, потому что он вам не очень поможет. Возможно, это могло бы помочь начать с более простой версии вашего скрипта.
Ответ №1:
Весь этот ответ написан на Python, поэтому вы можете преобразовать его в MEL, если настаиваете на его использовании.
Задания скрипта могут запускаться многими различными способами при возникновении события. Это может быть, например, когда время изменилось, пользователь выполняет отмену или, в вашем случае, когда изменился выбор.
Вы можете получить полный список названий этих событий, выполнив это:
cmds.scriptJob(listEvents=True)
То, что вы ищете, это "SelectionChanged"
.
Чтобы заставить это работать, вам нужно определить функцию, которая будет вызываться при запуске задания скрипта (при изменении выбора). Вот простой пример этого.
import maya.cmds as cmds
# Create a function that will be called from the script job whenever there's a change to the selection.
def func():
print "The selection has changed!"
# Create a new script job and save the result to a variable. The result is the script job's id number.
script_job_id = cmds.scriptJob(event=["SelectionChanged", func])
# When it's no longer needed, pass the script job's id with the kill parameter to remove it.
#cmds.scriptJob(kill=script_job_id)
Итак, в вашем случае, когда вы запускаете функцию, она может проверить, выбран ли объект, и в зависимости от того, выбран он или нет, вы можете покрасить кнопку.
Когда ваш инструмент закроется, вы можете удалить задание скрипта, используя его kill
параметр, чтобы оно больше не выполнялось, когда оно вам не нужно.
И в качестве дополнительного примечания, которое вы написали в Haggi, если у вас нет веской причины, я бы просто придерживался Python вместо MEL. Синтаксис намного проще, в нем безумное количество библиотек, и он просто более мощный для выполнения простых вещей, таких как манипулирование строками. Плюс Python используется во многих других программах, MEL — нет. Это правда, что есть некоторые команды, которые могут быть выполнены только в MEL, но вы можете легко вычислить строку MEL с помощью Python.
Комментарии:
1. Я бы никогда не попросил лучшего объяснения, это просто потрясающе просто для понимания и по существу. И да, я буду придерживаться python, как вы сказали, python используется во многих программах, я больше сосредоточусь на нем, спасибо.
2. Поверьте мне, то, что вам нужно сделать в 5-6 строках в MEL, будет сделано в виде однострочника в Python: P