Примечание. Использование флагов -q и -е сильно напоминает работу с командами getAttr и setAttr для запроса или редактирования атрибутов объектов.

Имена элементов интерфейса Очевидно, что те поля в окне, значения которых мы захотим прочитать перед созданием кривой, должны иметь уникальные имена. Кроме того, следует добавить максимальные и минимальные границы для значений числовых полей Поэтому команды создания окна должны теперь выглядеть примерно так:

string $win_name = “CURVE_BUILDER”;

iffwindow -ex $win_name '==1) { deleteUI $win_name; }

window -t “Curve Builder" $win_name;

columnLayout;

intSliderGrp -I “Num Points” -field 1 -value 500 -min 4 -max 5000 NUMP; floatSliderGrp -I “Amplitude” -field 1 -value 3.0 -min 0 -max 10 AMP; floatSliderGrp -I “Frequency” -field 1 -value 2.0 -min 0 -max 10 FREQ; floatSliderGrp -I “Density” -field 1 -value 10.0 -min 0.01 -max 100 DENS; floatSliderGrp -I “X Speed” -field 1 -value 5.0 -min 0.01 -max 50 XSPEED; separator-style “none” -h 15;

gridLayout -numberOfColumns 2 -cellWidthHeight 192 32; button -I “Build Curve” -w 188 -c “curveBuilderProc “; button -I “Close” -w 188 -c (“deleteUI “+$win_name); showWindow $win_name; Обычно я использую прописные буквы для имен собственных элементов интерфейса, чтобы не перепутать их с уже имеющимися элементами.

Для взрослых. Более профессиональный подход заключается в использовании того имени, которое MAYA сама дает создаваемому элементу. Это имя всегда возвращается командой в режиме создания элемента. Его можно запомнить в переменную (возможно, глобальную) и использовать позже:

Siname = 'intSliderGrp -I ‘‘Num Points" -f 1 -value 500 -min 4 -max 5000';

// Result: CURVE_BLNLDER|columnLayout2|gridLayout3|intSliderGrp1 //

Если вышеприведенные команды создают окно без ошибок, то дело за малым - переделать незначительно процедуру построения кривой. Очевидно, что надо просто прочитать значения числовых полей из окна и «засунуть» их в нужные переменные.

global proc curveBuilderProc()

{

int $NumPoints=500;

float $Amp=3.0, $Freq=2.0, $Density=10.0, $xSpeed=5.0;

SNumPoints = 'intSliderGrp -q -value NUMP';

$Amp = 'floatSliderGrp -q -valueAMP';

SFreq = 'floatSliderGrp -q -value FREQ’;

$Density = 'floatSliderGrp -q -value DENS';

$xSpeed = ’ floatSliderGrp -q -value XSPEED'; if(objExists(“myCurve”)==1) { delete “myCurve"; } int $i;

for($i=0; $i<$NumPoints; $i=$i+1)

{

float $t=$i/$Density; float $x=$t/$xSpeed; float $y=$Amp * sin($t*$Freq); float $z=$Amp * cos($t*$Freq);

ff($i==0) { curve -p ($x) ($y) ($z) -n “myCurve”;} else { curve -p ($x) ($y) ($z) -a “myCurve"; }

}

}

Чтобы прочитать значения числовых полей, надо обратиться к ним с помощью тех же команд, что использовались при их создании, только с флагом -q, при этом запрашивать надо значение флага -value, содержащего числовое значение.

Совет. Добавьте самостоятельно поле для задания спепени кривой.

Посмотрим, как можно также обновлять свойства элементов в окне. Я напомню, что скрипты подобного типа довольно активно поедают память, особенно если у вас задана бесконечная очередь Undo. Чтобы контролировать расход памяти, добавим еще одно числовое поле, которое будет содержать количество свободной памяти и будет обновляться после каждого построения кривой. Команда, с помощью которой можно узнать у MAYA, сколько, по ее мнению, еще есть свободной памяти, называется memory.


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