Skip to content

Instantly share code, notes, and snippets.

@berniebernie
Last active August 29, 2015 14:25
Show Gist options
  • Select an option

  • Save berniebernie/4aae1c01fa3774ab82a9 to your computer and use it in GitHub Desktop.

Select an option

Save berniebernie/4aae1c01fa3774ab82a9 to your computer and use it in GitHub Desktop.
Hide objects that are outside of control spheres http://i.imgur.com/MtcyybR.gif
/* usage:
run script, select objects to be hidden, press "Select Objects to be hidden" =)
then create and select spheres that will serve as control objects and "Select balls to control"
you can add/remove spheres and objects afterwards by adding remove from the two sets 'objs' and 'control'
slightly buggy because of setAttr in expressions
*/
global string $objs;
global string $controlsObjs;
$objs = "";
$controlsObjs = "";
string $window = `window -menuBar true -title "Hide stuff with balls" "johny"`;
columnLayout -adjustableColumn true;
button -label "Select objects to be hidden" -command "set(0)";
button -label "Select balls to control" -command "set(1)";
showWindow $window;
proc set(int $n){
global string $objs;
global string $controlsObjs;
string $names[] = {"objs","control"};
$createSetResult = `sets -name $names[$n]`;
if($n==0){
$objs = $createSetResult;
}
if($n==1){
$controlsObjs = $createSetResult;
}
print($objs+"------"+$controlsObjs);
if($n){
string $expr = "";
string $controls[] = `listConnections -s 1 -d 0 -p 0 -c 0 $controlsObjs`;
string $updates = "";
for($o in $controls){
$updates += $o+".tx +"+$o+".sx +";
}
$updates += "0";
for($o in $controls){
$expr += $o+".shearXY = 0*("+$updates+");\n";
}
$expr += "string $objs[] = `listConnections -s 1 -d 0 -p 0 -c 0 \""+$objs+"\"`;\n";
$expr += "string $controls[] = `listConnections -s 1 -d 0 -p 0 -c 0 \""+$controlsObjs+"\"`;\n";
$expr += "float $controlCenters[] = {};\n";
$expr += "for($o in $controls){\n";
$expr += " setAttr ($o+\".overrideEnabled\") 1;\n";
$expr += " setAttr ($o+\".overrideShading\") 0;\n";
$expr += " float $center[] = `xform -ws -q -t $o`;\n";
$expr += " $i = size($controlCenters);\n";
$expr += " $controlCenters[$i] = $center[0];\n";
$expr += " $controlCenters[$i+1] = $center[1];\n";
$expr += " $controlCenters[$i+2] = $center[2];\n";
$expr += " $controlCenters[$i+3] = getAttr($o+\".sx\");\n";
$expr += "}\n";
$expr += "for($o in $objs){\n";
$expr += " float $c[] = `xform -ws -q -bb $o`;\n";
$expr += " $c = {($c[0]+$c[3])/2,($c[1]+$c[4])/2,($c[2]+$c[5])/2};\n";
$expr += " int $visib = false;\n";
$expr += " for($i = 0;$i<size($controlCenters);$i+=4){\n";
$expr += " vector $distVect = <<$controlCenters[$i]-$c[0],$controlCenters[$i+1]-$c[1],$controlCenters[$i+2]-$c[2]>>;\n";
$expr += " float $dist = `mag($distVect)`;\n";
$expr += " if($dist<abs($controlCenters[$i+3])){\n";
$expr += " $visib = true;\n";
$expr += " }\n";
$expr += " }\n";
$expr += " setAttr($o+\".visibility\") $visib; \n";
$expr += "} \n";
expression -s $expr "objs";
deleteUI "johny";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment