Добавим также кнопку, которая будет очищать очередь Undo, это банальная задача, надо только не забыть увеличить количество столбцов до трех в gridLayout.

Дополнительно добавим в окно галку, которая будет включать обновление экрана во время построения кривой. Галка добавляется командой checkBox, однако лучше использовать команду checkBoxGrp, так как она располагает метку слева от галки и лучше вписывается в дизайн нашего окна. Кроме того, она позволяет создавать до четырех галок одновременно, поэтому для задания значения галки (то есть для включения/выключения) надо использовать флаг -valuel, а не -value. В цикле для построения кривой должна быть проверка типа:

if{'checkBoxGrp -q -valuel REFR'==1) { refresh; }

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

global proc updateMemoryField()

{

float $memArray[] = 'memory -freeMemory’; textFieldGrp -e -text ($memArray[0]+” MB”) FREEMEM;

}

//..............................

global proc curveBuilderProc()

{

int $NumPoints=500;

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

$NumPoints = 'intSliderGrp -q -value NUMP';

$Amp = 'floatSliderGrp -q -valueAMP';

SFreq = 'floatSliderGrp -q -value FREQ';

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

SxSpeed = 'floatSliderGrp -q -value XSPEED'; if(objExists(“myCurve”)==1) { delete “myCurve”; } int Si;

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

{

float $t=$i/$Density;

float $x=$t/SxSpeed;

float $y=$Amp * sin($t*$Freq);

float $z=$Amp * cos($t*$Freq);

if($i==0) { curve -p ($x) ($y) ($z) -n “myCurve”;}

else { curve -p ($x) ($y) ($z) -a “myCurve"; }

iff checkBoxGrp -q -valuel REFR'==1) { refresh; }

}

updateMemoryField;

}

global proc curveBuilder() i

string Swin.name = “CURVE_BUILDER”; if(' window -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; checkBoxGrp -I “Refresh Screen” -valuel 0 REFR; textFieldGrp -I “Free memory” -text (“XXX MB”) -editable 0 FREEMEM; updateMemoryField; separator -style “none” -h 15;

gridLayout -numberOfColumns 3 -cellWidthHeight 128 32; button -I “Build Curve” -w 124 -c “curveBuilderProc”; button -I “Flush Undo” -w 124 -c “flushUndo; updateMemoryField;”; button -I “Close” -w 124 -c (“deleteUI “+$win_name); showWindow $win_name;

curveBuilder; // вызов процедуры

Так как внезапно обнаружилось, что команда memory возвращает массив чисел, то пришлось создать маленькую процедуру updateMemoryField, которая берет первый элемент этого массива и обновляет текстовое поле, содержащее количество свободной памяти. Эту процедуру удобно вызывать сразу после построения кривой, а также после нажатия кнопки Flush Undo.

Теперь, очевидно, следует сохранить получившийся скрипт как текстовый файл под названием curveBuilder.mel и вызывать его командой curveBuilder.


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