blob: 7420382fdeffd5c31b2447af112ca974042cffe2 (
plain) (
tree)
|
|
/* rndPoints V1.6 - Maya2.0
This script may be freely distributed. Modify at your own risk.
Author: Dirk Bialluch (DirkBi@Software2000.de)
Creation date: 21.12.98
Last update: 15.10.00
Description:
Please refer to integrated help window.
History:
V1.1
NEW
-added lattice points and polygon vertices
V1.2
NEW
-set world space axes
V1.3
NEW
-store UI values
-transform mode added (world/object space)
-set intensity range
-use seed value checkbox added
-show min/max value
V1.4
ENHANCED
-store UI values as soon as UI element changes
NEW
-randomize along normal, u & v tangent
V1.5
FIXED
-"Use Seed Value" flag will now be recognized
NEW
-added threshold value for point randomization
V1.6
CHANGED
-UI point count display removed, due to performance issues
ENHANCED
-poly vertices can now be randomized along the uv direction
NEW
-major UI update
-reset UI
-help window
*/
//
// Create UI **********************************************************************************
//
global proc rndPoints ()
{
// set select tool
global string $gSelect;
setToolTo $gSelect;
int $uiLabelWidth = 140;
int $uiInputWidth = 240;
int $uiWidth = $uiLabelWidth + $uiInputWidth + 40;
if (`window -exists rp_ui` == true)
deleteUI rp_ui;
window
-maximizeButton 0
-resizeToFitChildren 0
-title "Randomize Points V1.6"
-iconName "Randomize Points"
-menuBar true
-menuBarVisible true
rp_ui;
menu
-label "Edit"
-tearOff false;
menuItem
-label "Reset Settings"
-c "rp_storeRecallUI reset; rndPoints";
menu
-label "Help"
-tearOff 0;
menuItem
-label "Help with Randomize Points tool"
-c "rp_help 1";
menuItem
-divider true;
menuItem
-label "Script Information"
-c "rp_help 2";
string $rp_form = `formLayout -numberOfDivisions 100`;
string $rp_scroll = `scrollLayout -hst 16 -vst 16 -childResizable true -minChildWidth $uiWidth`;
columnLayout -adjustableColumn true -rowSpacing 5;
frameLayout
-label "Settings"
-labelAlign "center"
-cll true
-lw $uiWidth
-mh 3
-borderStyle "etchedIn"
-cc "rp_adjustUI nop"
-ec "rp_adjustUI nop"
-bv true
rp_sFrame;
columnLayout -adjustableColumn true;
rowLayout
-numberOfColumns 3
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text -l "Intensity";
floatSliderGrp
-field true
-precision 4
-value .1
-minValue 0
-maxValue 1
-fieldMinValue 0
-fieldMaxValue 10000
-sliderStep .1
-cc "rp_adjustUI nop"
-dc "rp_adjustUI nop"
rp_intensity;
text -l "WS";
setParent ..;
rowLayout
-numberOfColumns 3
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text -l "Intensity Range";
floatSliderGrp
-field true
-precision 4
-value 0
-minValue -100
-maxValue 100
-sliderStep 5
-cc "rp_adjustUI nop"
-dc "rp_adjustUI nop"
rp_intensityRange;
text -l "-/+ %";
setParent ..;
rowLayout
-numberOfColumns 4
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 ( $uiInputWidth / 2 )
-columnWidth 3 ( $uiInputWidth / 2 );
text -l "Min/Max Value";
floatField
-w ( $uiInputWidth / 2 )
-precision 4
-editable false
rp_min;
floatField
-w ( $uiInputWidth / 2 )
-precision 4
-editable false
rp_max;
text -label "Info";
setParent ..;
separator -h 10;
rowLayout
-numberOfColumns 3
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text -l "Threshold";
floatSliderGrp
-field true
-precision 4
-value 0
-minValue 0
-maxValue 1
-sliderStep .1
-cc "rp_adjustUI nop"
-dc "rp_adjustUI nop"
rp_threshold;
text -l "0-1";
setParent ..;
separator -h 10;
rowLayout
-numberOfColumns 2
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text -label "Use Seed Value";
checkBox
-label ""
-value true
-cc "rp_adjustUI nop"
rp_useSeed;
setParent ..;
rowLayout
-numberOfColumns 2
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text -l "Seed Value";
intSliderGrp
-field true
-value 1234
-minValue 0
-maxValue 99999
-cc "rp_adjustUI nop"
rp_seed;
setParent ..;
separator -h 10;
rowLayout
-numberOfColumns 2
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 $uiInputWidth;
text
-label "Transform Mode";
radioButtonGrp
-numberOfRadioButtons 3
-cw 1 100
-cw 2 105
-labelArray3 "World Space" "Object Space" "Distance"
-select 1
-cc "rp_adjustUI nop"
rp_transMode;
setParent ..;
separator -h 10;
rowLayout
-numberOfColumns 4
-cat 1 "right" 5
-columnWidth 1 $uiLabelWidth
-columnWidth 2 50
-columnWidth 3 50;
text -label "Enable Axes";
checkBox
-label "X"
-value true
-cc "rp_adjustUI nop"
rp_x;
checkBox
-label "Y"
-value true
-cc "rp_adjustUI nop"
rp_y;
checkBox
-label "Z"
-value true
-cc "rp_adjustUI nop"
rp_z;
setParent ..;
setParent ..;
setParent ..;
setParent ..;
setParent ..;
button
-label "Randomize Points"
-command "rp_main"
rp_execButton;
button
-label "Close"
-command "deleteUI rp_ui"
rp_closeButton;
// set form layouts
formLayout -edit
-attachForm $rp_scroll "top" 2
-attachForm $rp_scroll "left" 2
-attachControl $rp_scroll "bottom" 2 rp_execButton
-attachForm $rp_scroll "right" 2
-attachNone rp_execButton "top"
-attachForm rp_execButton "left" 2
-attachForm rp_execButton "bottom" 2
-attachPosition rp_execButton "right" 2 50
-attachNone rp_closeButton "top"
-attachPosition rp_closeButton "left" 2 50
-attachForm rp_closeButton "bottom" 2
-attachForm rp_closeButton "right" 2
$rp_form;
rp_storeRecallUI recall;
// check UI settings after restoring values
rp_adjustUI nop;
showWindow rp_ui;
}
global proc rp_storeRecallUI ( string $mode )
{
string $floatFieldList[] = {
};
string $intFieldList[] = {
};
string $optionMenuList[] = {
};
string $floatSliderGrpList[] = {
"rp_intensity",
"rp_intensityRange",
"rp_threshold"
};
string $intSliderGrpList[] = {
"rp_seed"
};
string $checkBoxList[] = {
"rp_useSeed",
"rp_x",
"rp_y",
"rp_z"
};
string $radioButtonGrpList[] = {
"rp_transMode"
};
string $frameLayoutList[] = {
"rp_sFrame"
};
int $cnt;
if ( $mode == "store" )
{
for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
optionVar -floatValue $floatFieldList[$cnt] `floatField -q -value $floatFieldList[$cnt]`;
for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
optionVar -intValue $intFieldList[$cnt] `intField -q -value $intFieldList[$cnt]`;
for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
optionVar -floatValue $floatSliderGrpList[$cnt] `floatSliderGrp -q -value $floatSliderGrpList[$cnt]`;
for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
optionVar -intValue $intSliderGrpList[$cnt] `intSliderGrp -q -value $intSliderGrpList[$cnt]`;
for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
optionVar -intValue $checkBoxList[$cnt] `checkBox -q -value $checkBoxList[$cnt]`;
for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
optionVar -intValue $optionMenuList[$cnt] `optionMenu -q -select $optionMenuList[$cnt]`;
for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
optionVar -intValue $radioButtonGrpList[$cnt] `radioButtonGrp -q -select $radioButtonGrpList[$cnt]`;
for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
optionVar -intValue $frameLayoutList[$cnt] `frameLayout -q -collapse $frameLayoutList[$cnt]`;
}
if ( $mode == "recall" )
{
for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
if ( `optionVar -exists $floatFieldList[$cnt]` )
floatField -e -value `optionVar -q $floatFieldList[$cnt]` $floatFieldList[$cnt];
for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
if ( `optionVar -exists $intFieldList[$cnt]` )
intField -e -value `optionVar -q $intFieldList[$cnt]` $intFieldList[$cnt];
for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
if ( `optionVar -exists $floatSliderGrpList[$cnt]` )
floatSliderGrp -e -value `optionVar -q $floatSliderGrpList[$cnt]` $floatSliderGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
if ( `optionVar -exists $intSliderGrpList[$cnt]` )
intSliderGrp -e -value `optionVar -q $intSliderGrpList[$cnt]` $intSliderGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
if ( `optionVar -exists $checkBoxList[$cnt]` )
checkBox -e -value `optionVar -q $checkBoxList[$cnt]` $checkBoxList[$cnt];
for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
if ( `optionVar -exists $optionMenuList[$cnt]` )
optionMenu -e -select `optionVar -q $optionMenuList[$cnt]` $optionMenuList[$cnt];
for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
if ( `optionVar -exists $radioButtonGrpList[$cnt]` )
radioButtonGrp -e -select `optionVar -q $radioButtonGrpList[$cnt]` $radioButtonGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
if ( `optionVar -exists $frameLayoutList[$cnt]` )
frameLayout -e -collapse `optionVar -q $frameLayoutList[$cnt]` $frameLayoutList[$cnt];
}
if ( $mode == "reset" )
{
for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
optionVar -remove $floatFieldList[$cnt];
for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
optionVar -remove $intFieldList[$cnt];
for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
optionVar -remove $floatSliderGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
optionVar -remove $intSliderGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
optionVar -remove $checkBoxList[$cnt];
for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
optionVar -remove $optionMenuList[$cnt];
for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
optionVar -remove $radioButtonGrpList[$cnt];
for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
optionVar -remove $frameLayoutList[$cnt];
}
}
//
// Adjust UI settings
//
global proc rp_adjustUI ( string $function )
{
if ( `checkBox -q -v rp_useSeed` )
intSliderGrp -e -enable true rp_seed;
else
intSliderGrp -e -enable false rp_seed;
if ( ( `checkBox -q -v rp_x` || `checkBox -q -v rp_y` || `checkBox -q -v rp_z` ) && `floatSliderGrp -q -value rp_intensity` )
button -e -enable true rp_execButton;
else
button -e -enable false rp_execButton;
if ( `radioButtonGrp -q -select rp_transMode` == 1 )
floatSliderGrp -e -extraLabel "WS" rp_intensity;
else
floatSliderGrp -e -extraLabel "OS" rp_intensity;
if ( `radioButtonGrp -q -select rp_transMode` == 3 )
{
checkBox -e -label "U" rp_x;
checkBox -e -label "V" rp_y;
checkBox -e -label "N" rp_z;
}
else
{
checkBox -e -label "X" rp_x;
checkBox -e -label "Y" rp_y;
checkBox -e -label "Z" rp_z;
}
// calculate min/max displacement value
float $intensity = `floatSliderGrp -q -value rp_intensity`;
float $intensityRange = `floatSliderGrp -q -value rp_intensityRange`;
float $min = -($intensity / 2) + ($intensity * $intensityRange / 200);
float $max = $intensity / 2 + ($intensity * $intensityRange / 200);
floatField -e -value $min rp_min;
floatField -e -value $max rp_max;
rp_storeRecallUI store;
}
//
// Main function
//
global proc rp_main ()
{
// get settings from UI
float $min = `floatField -q -value rp_min`;
float $max = `floatField -q -value rp_max`;
int $seed = `intSliderGrp -q -value rp_seed`;
int $useSeed = `checkBox -q -v rp_useSeed`;
int $enX = `checkBox -q -v rp_x`;
int $enY = `checkBox -q -v rp_y`;
int $enZ = `checkBox -q -v rp_z`;
int $transMode = `radioButtonGrp -q -select rp_transMode`;
float $threshold = `floatSliderGrp -q -value rp_threshold`;
// init random function for repeatable results
if ( $useSeed )
seed $seed;
string $objList[];
// get selected points
if ( $transMode != 3 )
// filter cv, poly vertices and lattice points
$objList = `filterExpand -ex true -sm 28 -sm 31 -sm 46`;
else
// filter cv and poly vertices
$objList = `filterExpand -ex true -sm 28 -sm 31`;
int $listSize = size($objList);
waitCursor -state on;
// transform CV
float $xmin, $ymin, $zmin, $xmax, $ymax, $zmax;
int $count;
string $u = "";
string $v = "";
string $n = "";
int $threshArray[] = {};
for ($count = 0; $count < $listSize; $count++)
{
float $threshRnd = `rand 0 1`;
if ( $threshRnd >= $threshold )
{
$threshArray[$count] = 1;
$xmin = $ymin = $zmin = $xmax = $ymax = $zmax = 0;
if ($enX)
{
$xmin = $min;
$xmax = $max;
}
if ($enY)
{
$ymin = $min;
$ymax = $max;
}
if ($enZ)
{
$zmin = $min;
$zmax = $max;
}
if ( $transMode == 1 )
move -r -ws `rand $xmin $xmax` `rand $ymin $ymax` `rand $zmin $zmax` $objList[$count];
else if ( $transMode == 2 )
move -r -os `rand $xmin $xmax` `rand $ymin $ymax` `rand $zmin $zmax` $objList[$count];
else
{
$u += "-u " + ( `rand $xmin $xmax` ) + " ";
$v += "-v " + ( `rand $ymin $ymax` ) + " ";
$n += "-n " + ( `rand $zmin $zmax` ) + " ";
}
}
}
if ( $transMode == 3)
{
string $pointList = "";
for ( $cnt = 0; $cnt < size ( $threshArray ); $cnt++ )
{
if ( $threshArray[$cnt] )
$pointList += ( $objList[$cnt] + " " );
}
if ( size ( $pointList ) )
{
eval ( "moveVertexAlongDirection " + $n + $pointList );
eval ( "moveVertexAlongDirection " + $u + $pointList );
eval ( "moveVertexAlongDirection " + $v + $pointList );
}
}
waitCursor -state off;
}
// end of script
|