//Matrix Generation MEL
//started 9.23.09
//front end for matrix-generating procedures
//by Dave Lewis
//VSFX 705
//================
//declaration of global variables to spread to procs
//================
global string $rotSlider;
global string $arcSlider;
global string $xtranSlider;
global string $ytranSlider;
global string $groupList[];
global string $arcaList[];
global string $arcbList[];
//================
//matrix-generation proc
//================
global proc makeMatrixType(int $geoType, int $arcs, float $rot){
global string $groupList[];
global string $arcaList[];
global string $arcbList[];
for ($j=1; $j<=$arcs; $j++) {
for ($i=1.0; $i<=10; $i++) {
int $arrayNum= (($j-1)*10)+($i-1);
if ($geoType == 1){
polyCone;
} else if ($geoType == 2){
polyCube;
} else if ($geoType == 3){
polyHelix -c 3 -h 2 -w 2 -r 0.2;
};
$arcaList[$arrayNum] = `rename ("arca" + $j + "_" + $i)`;
rotate -r `rand 0 180` `rand 0 180` `rand 0 180`;
scale -a (1/$i) ($i/3) (1/$i);
move -r ((($i/1.5)*($i/1.5))/2) ($i*1.7) 0;
if ($geoType == 1){
polyCone;
} else if ($geoType == 2){
polyCube;
} else if ($geoType == 3){
polyHelix -c 3 -h 2 -w 2 -r 0.2;
};
$arcbList[$arrayNum] = `rename ("arcb" + $j + "_" + $i)`;
rotate -r `rand 0 180` `rand 0 180` `rand 0 180`;
scale -a (1/$i) ($i/3) (1/$i);
move -r ((($i/2)*($i/2))/4) ($i*1.7) 0;
}
select ("arc*" + $j + "_*");
$groupList[$j-1] = `group`;
select "group*";
xform -piv 0 0 0;
rotate - p 0 0 0 -r 0 $rot 0;
}
}
//================
//clear old matrices and array information to prevent conflicts
//================
global proc clearOld(){
global string $groupList[];
global string $arcaList[];
global string $arcbList[];
select "group*";
delete;
clear $groupList;
clear $arcaList;
clear $arcbList;
}
//================
//update matrix when rotation slider is updated
//================
global proc updateRot() {
global string $rotSlider;
global string $groupList[];
$numGroups = size($groupList);
float $rotV =`floatSliderGrp -q -v $rotSlider`;
select -cl;
for ($i=0; $i<$numGroups; $i++){
setAttr ($groupList[$i] + ".rotateY") ($rotV*($i+1));
}
}
//================
//update matrix when rotation slider is dragged
//================
global proc dragRot(){
global string $rotSlider;
global string $groupList[];
$numGroups = size($groupList);
float $rotV=`floatSliderGrp -q -v $rotSlider`;
select -cl;
for ($i=0; $i<$numGroups; $i++){
setAttr ($groupList[$i] + ".rotateY") ($rotV*($i+1));
}
}
//================
//update matrix when x position slider is updated
//================
global proc updateX() {
global string $xtranSlider;
global string $arcaList[];
global string $arcbList[];
$numArca = size($arcaList);
$numArcb = size($arcbList);
float $xtranV =`floatSliderGrp -q -v $xtranSlider`;
select -cl;
for ($i=0; $i<$numArca; $i++){
int $ones = endString ($i, 1);
setAttr ($arcaList[$i] + ".translateX") ((($ones*$xtranV)*($ones*$xtranV))/32);
}
select -cl;
for ($i=0; $i<$numArcb; $i++){
int $ones = endString ($i, 1);
setAttr ($arcbList[$i] + ".translateX") ((($ones*$xtranV)*($ones*$xtranV))/64);
}
}
//================
//update matrix when x position slider is dragged
//================
global proc dragX() {
global string $xtranSlider;
global string $arcaList[];
global string $arcbList[];
$numArca = size($arcaList);
$numArcb = size($arcbList);
float $xtranV =`floatSliderGrp -q -v $xtranSlider`;
select -cl;
for ($i=0; $i<$numArca; $i++){
int $ones = endString ($i, 1);
setAttr ($arcaList[$i] + ".translateX") ((($ones*$xtranV)*($ones*$xtranV))/32);
}
select -cl;
for ($i=0; $i<$numArcb; $i++){
int $ones = endString ($i, 1);
setAttr ($arcbList[$i] + ".translateX") ((($ones*$xtranV)*($ones*$xtranV))/64);
}
}
//================
//update matrix when y position slider is updated
//================
global proc updateY() {
global string $ytranSlider;
global string $arcaList[];
global string $arcbList[];
$numArca = size($arcaList);
$numArcb = size($arcbList);
float $ytranV =`floatSliderGrp -q -v $ytranSlider`;
select -cl;
for ($i=0; $i<$numArca; $i++){
int $ones = endString ($i, 1);
setAttr ($arcaList[$i] + ".translateY") ($ones*$ytranV);
}
select -cl;
for ($i=0; $i<$numArcb; $i++){
int $ones = endString ($i, 1);
setAttr ($arcbList[$i] + ".translateY") ($ones*$ytranV);
}
}
//================
//update matrix when y position slider is dragged
//================
global proc dragY() {
global string $ytranSlider;
global string $arcaList[];
global string $arcbList[];
$numArca = size($arcaList);
$numArcb = size($arcbList);
float $ytranV =`floatSliderGrp -q -v $ytranSlider`;
select -cl;
for ($i=0; $i<$numArca; $i++){
int $ones = endString ($i, 1);
setAttr ($arcaList[$i] + ".translateY") ($ones*$ytranV);
}
select -cl;
for ($i=0; $i<$numArcb; $i++){
int $ones = endString ($i, 1);
setAttr ($arcbList[$i] + ".translateY") ($ones*$ytranV);
}
}
//================
//generate window UI with controls
//================
global proc testUI(){
global string $rotSlider;
global string $arcSlider;
global string $xtranSlider;
global string $ytranSlider;
global float $rotV;
global int $buildType = 1;
if (`window -exists matrixWin`){
deleteUI -window matrixWin;
};
if (`windowPref -exists matrixWin`){
windowPref -remove matrixWin;
};
window -title "Matrix Generation" -rtf 1 -wh 430 160 -s false matrixWin;
columnLayout;
$arcSlider = `intSliderGrp
-label "Arcs"
-columnAttach 1 "left" 0
-field true
-min 1
-max 20
-value 12
-ann "Number of arcs to generate. Not live."`;
$rotSlider = `floatSliderGrp
-label "Rotation"
-columnAttach 1 "left" 0
-field true
-min 0.1
-max 360
-value 20
-ann "Rotation value for spread between arcs."
-changeCommand "updateRot()"
-dragCommand "dragRot()"`;
$xtranSlider = `floatSliderGrp
-label "X Position"
-columnAttach 1 "left" 0
-field true
-min 0.1
-max 5
-value 1
-ann "X position value for spread between shapes."
-changeCommand "updateX()"
-dragCommand "dragX()"`;
$ytranSlider = `floatSliderGrp
-label "Y Position"
-columnAttach 1 "left" 0
-field true
-min 0.1
-max 5
-value 1
-ann "Y position value for spread between shapes."
-changeCommand "updateY()"
-dragCommand "dragY()"`;
$geoRadio = `radioButtonGrp
-label "Geometry Type"
-columnAttach 1 "left" 0
-nrb 3
-sl 1
-la3 "Cone" "Cube" "Helix"
-on1 "$buildType = 1"
-on2 "$buildType = 2"
-on3 "$buildType = 3"
-ann "Type of geometry primitive used in generation. Not live."`;
setParent..;
rowLayout -nc 2;
button -label "Generate" -command "makeMatrixType($buildType, `intSliderGrp -q -v $arcSlider`, `floatSliderGrp -q -v $rotSlider`)";
button -label "Clear matricies" -command ("clearOld()");
setParent..;
frameLayout -lv false -cll false -w 430 -h 25;
helpLine;
showWindow matrixWin;
}
testUI();