Наш скрипт в этом случае может выглядеть так:

window -t “drop attributes”; columnLayout MAIN_LAYOUT;

frameLayout -I “push Field Attributes” -ell 1 FRAME 1_LAY0UT; columnLayout; attrFieldSliderGrp -at pushField.mag -min 0 -max 50; attrFieldSliderGrp -at pushField.att -min 0 -max 4 ; attrFieldSliderGrp -at pushField.max -min 0 -max 10 ; setParent MAIN_LAYOUT;

frameLayout -I "putl Field Attributes” -ell 1 FRAME2_LAYOUT; columnLayout; attrFieldSliderGrp -at pullField.mag -min -50 -max 0; attrFieldSliderGrp -at pullField.att -min 0 -max 4 ; attrFieldSliderGrp -at pullField.max -min 0 -max 10 ; setParent MA)N_LAYOUT; showWindow; Однако взрослые мальчики так обычно не пишут, потому что теряется последовательность программы, а внезапные переходы сразу на конкретный уровень напоминают команду goto, запрещенную уже во всех цивилизованных странах.

Кроме того, конструкция типа:

frameLayout -1 “pull Field Attributes” -ell 1; columnLayout;

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

Поэтому останемся в рамках прежнего варианта и озадачимся следующей проблемой. Очень неудобно каждый раз закрывать окно перед выполнением очередного улучшения или исправления. Если у всех элементов могут быть имена, то хорошо бы проверять в самом начале, существует ли окно с данным именем, и если да, то удалять его перед выполнением остальных команд.

У команды window есть флаг -ех, который переводит ее из режима создания окна в режим возврата информации о существовании конкретного окна. Если добавить одну строчку в начало скрипта и не забыть дать имя основному окну, не надо будет удалять его каждый раз перед выполнением. К команде showWindow также следует добавить имя данного окна.

iff window -ex DROP_WINDOW'==1) { deleteUI DROP_WINDOW; }

window -t “drop attributes” DROP_WINDOW;

columnLayout;

frameLayout -I “push Field Attributes” -ell 1; columnLayout; attrFieldSliderGrp -at pushField.mag -min 0 -max 50; attrFieldSliderGrp -at pushField.att -min 0 -max 4 ; attrFieldSliderGrp -at pushField.max -min 0 -max 10 ; setParent setParent

frameLayout -I "pud Field Attributes” -ell 1; columnLayout; attrFieldSliderGrp -at pullField.mag -min -50 -max 0; attrFieldSliderGrp -at pullField.att -min 0 -max 4 ; attrFieldSliderGrp -at pullField.max -min 0 -max 10 ; setParent..; setParent..;

showWindow DROP_WINDOW; Как видите, для удаления элементов интерфейса существует команда deleteUI, для которой достаточно указать имя элемента. Называть собственные элементы я предпочитаю большими буквами, чтобы гарантированно не перепутать их со стандартными, используемыми MAYA. Команда window -ex DROP_WINDOW вернет единицу, если окно с таким именем существует. Кавычки по-прежнему нужны, чтобы получить возвращаемое значение и сравнить его с единицей.

Cosem. Сохраните в текстовом файле следующую конструкцию как шаблон для создания нового окна.

string $win_name = “WIN_NAME”; iff window -ex $win_name '==1) { deleteUI $win_name;} window -t “drop attributes” $win_name; columnLayout; ii . . . showWindow $win_name;


⇐ вернуться назад | | далее ⇒