// Creation Date: Jan-05-2002 // // Author: // // ------------------------- // --------------------------- // Klaus Stangl // Student@TU Graz // Demoartist/Developer // Educator@Siliconstudio Graz // www.worldofmaya.com // office@worldofmaya.com // ----------------------------- // ------------------------------- // // // Help on technical questions and thanks to: // Roland Reyer (AWGermany) // // Script Name: // // createSurfaceParticle (version: 1.0) // // Description: // This script allows you to create a fully controllable // tornado to destroy some bits and bytes -) // // If you want it to be autoloaded place the userSetup.mel and the createSurfaceParticle.mel // in your first Script Directory! If you don't use any Script Path, the Script directory can // be found in your homedirectory ($HOME/maya/4.0/scripts). // If you use the MAYA_SCRIPT_PATH variable, copy the userSetup file in your first directory // in this variable! // If you already have a userSetup.mel, than paste the following code: // evalDeferred -lp "source createSurfaceParticle.mel; createSurfaceParticle;"; // // If you completed this or you started it manually, than you should find a menu entry in under // [Dynamics]/Effects named "Create Surface Particle" // Use the Option Box to customize! // // Create a shelf button with this command: // source createSurfaceParticle.mel;createSurfaceParticle(); // // For more infos read the documentation on www.worldofmaya.com or mail! // // proc printf(string $output) { print($output+"\n"); } proc string createLocator(string $tornado_group_name, string $surfacename,float $selectionXYZ[]) { string $locatorname; spaceLocator -n ($surfacename+"_locator#") -p $selectionXYZ[0] $selectionXYZ[1] $selectionXYZ[2]; string $temp[] = `ls -sl`; $locatorname = $temp[0]; /* select -r $locatorname; select -add $surfacename; if (`exists align`) { align -atl -x Mid -z Mid; //-y Mid } select -cl; */ parent $locatorname $tornado_group_name; return $locatorname; } //-------------------------------------------------------------- proc string getShape( string $xform ) { string $shapes[]; $shapes[0] = $xform; if ( "transform" == `nodeType $xform` ) { $shapes = `listRelatives -shapes $xform`; } //-fullPath return $shapes[0]; } //-------------------------- proc string[] create_SurfaceParticle(string $tornado_group_name, string $surfacename, string $shapeName, string $locatorname, int $which_uv, float $emitter_rate, float $max_emitter_rate, int $die_on_end, int $EmitSpawn, int $up_colorentry, int $round_colorentry, float $upSpeed, float $roundSpeed, float $spawnLife, int $invert_round, int $invert_up) { string $emittername; string $particlename; string $particleshapename; string $spawnparticlename=""; string $spawnparticleshapename=""; if(($die_on_end==0)&&($EmitSpawn==1)) { string $temp[] = `particle -n ("spawnparticle#")`; $spawnparticlename = $temp[0]; $spawnparticleshapename = $temp[1]; setAttr ($spawnparticleshapename+".lifespanMode") 1; setAttr ($spawnparticleshapename+".lifespan") $spawnLife; parent $spawnparticlename $tornado_group_name; } $emittername = "surfaceEmitter#"; //create surfaceemitter select $shapeName; $temp = `emitter -type surface -name $emittername -r $emitter_rate -sro 1 -nuv 1 -cye none -cyi 1 -spd 0.5 -srn 0 -nsp 1 -tsp 0 -mxd 0 -mnd 0 -dx 1 -dy 0 -dz 0 -sp 0 `; $emittername = $temp[1]; setAttr ($emittername+".enableTextureRate") 1; // There're sometimes problems with Primitive Cones that're scaled below 1.3! string $emitterramp = `shadingNode -asTexture -n ("ramp_"+$emittername+"#") ramp`; // emitter-ramps string $emitterramp2d = `shadingNode -asUtility -n ("place2dTexture_"+$emittername+"#") place2dTexture`; connectAttr ($emitterramp2d+".outUV") ($emitterramp+".uv"); connectAttr ($emitterramp2d+".outUvFilterSize") ($emitterramp+".uvFilterSize"); connectAttr -f ($emitterramp+".outColor") ($emittername+".textureRate"); if($which_uv == 0) { setAttr ($emitterramp+".type") 1; } else { setAttr ($emitterramp+".type") 0; } setAttr ($emitterramp+".interpolation") 0; removeMultiInstance -break true ($emitterramp+".colorEntryList[2]"); if($invert_up==0) { setAttr ($emitterramp+".colorEntryList[1].position") 0.015; setAttr ($emitterramp+".colorEntryList[1].color") -type double3 0 0 0; setAttr ($emitterramp+".colorEntryList[0].color") -type double3 1 1 1; } if($invert_up==1) { setAttr ($emitterramp+".colorEntryList[1].position") 0.0; setAttr ($emitterramp+".colorEntryList[1].color") -type double3 0 0 0; setAttr ($emitterramp+".colorEntryList[0].color") -type double3 1 1 1; } addAttr -ln ("emitter_rate") -at double -min 0 -dv $emitter_rate $locatorname; setAttr -e -keyable true ($locatorname+".emitter_rate"); connectAttr ("|" + $tornado_group_name + "|" + $locatorname + ".emitter_rate") ($emittername+".rate"); if($invert_up==1) { addAttr -ln ("emitter_position") -at double -max 1.0 -min 0.0 -dv 0.985 $locatorname; setAttr -e -keyable true ($locatorname+".emitter_position"); connectAttr ("|" + $tornado_group_name + "|" + $locatorname + ".emitter_position") ($emitterramp+".colorEntryList[0].position"); } if($invert_up==0) { addAttr -ln ("emitter_position") -at double -max 1.0 -min 0.0 -dv 0.015 $locatorname; setAttr -e -keyable true ($locatorname+".emitter_position"); connectAttr ("|" + $tornado_group_name + "|" + $locatorname + ".emitter_position") ($emitterramp+".colorEntryList[1].position"); } $temp = `particle -n "surfaceParticle#"`; // create particle $particlename=$temp[0]; $particleshapename=$temp[1]; connectDynamic -em $emittername $particlename; goal -w 1.0 -utr 0 -g $surfacename $particlename; setAttr ($particleshapename+".lifespanMode") 3; parent $particlename $tornado_group_name; // Add custom Attribut addAttr -ln goalU -dt doubleArray $particleshapename; addAttr -ln goalU0 -dt doubleArray $particleshapename; addAttr -ln goalV -dt doubleArray $particleshapename; addAttr -ln goalV0 -dt doubleArray $particleshapename; addAttr -ln parentU -dt doubleArray $particleshapename; addAttr -ln parentU0 -dt doubleArray $particleshapename; addAttr -ln parentV -dt doubleArray $particleshapename; addAttr -ln parentV0 -dt doubleArray $particleshapename; addAttr -ln uInc0 -dt doubleArray $particleshapename; addAttr -ln uInc -dt doubleArray $particleshapename; setAttr -e -keyable true ($particleshapename+".uInc"); addAttr -ln vInc0 -dt doubleArray $particleshapename; addAttr -ln vInc -dt doubleArray $particleshapename; setAttr -e -keyable true ($particleshapename+".vInc"); // Add Creation and Runtime Expression cycleCheck -e off; string $creation_String = $particleshapename + ".goalV=" + $particleshapename + ".parentV;\r\n" + $particleshapename + ".goalU=" + $particleshapename + ".parentU;"; string $creation_Name = "creation_"+$surfacename; dynExpression -n $creation_Name -s $creation_String -c $particleshapename; select($surfacename); $shapeName = getShape($surfacename); $minmax_U[0] = getAttr($shapeName+".minValueU"); $minmax_U[1] = getAttr($shapeName+".maxValueU"); $minmax_V[0] = getAttr($shapeName+".minValueV"); $minmax_V[1] = getAttr($shapeName+".maxValueV"); string $runtime_String; if($which_uv == 0) { if($invert_round==0) $runtime_String = $particleshapename+".goalV+="+$particleshapename+".vInc;\r\n"; if($invert_round==1) $runtime_String = $particleshapename+".goalV-="+$particleshapename+".vInc;\r\n"; if($invert_up==0) $runtime_String += $particleshapename+".goalU+="+$particleshapename+".uInc;\r\n"; // add u/vInc if($invert_up==1) $runtime_String += $particleshapename+".goalU-="+$particleshapename+".uInc;\r\n"; // add u/vInc if($invert_round==0) $runtime_String += "if("+$particleshapename+".goalV>"+$minmax_V[1]+")"+$particleshapename+".goalV="+$minmax_V[0]+";\r\n"; // jump over V-seam if($invert_round==1) $runtime_String += "if("+$particleshapename+".goalV<"+$minmax_V[0]+")"+$particleshapename+".goalV="+$minmax_V[1]+";\r\n"; // jump over V-seam if($invert_up==0) $runtime_String += $particleshapename+".goalU=max("+$particleshapename+".goalU, "+$particleshapename+".uInc);\r\n"; // reached end? if(($die_on_end==0)&&($EmitSpawn==1)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalU>"+$minmax_U[1]+") \n{\n"; if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalU<"+$minmax_U[0]+") \n{\n"; $runtime_String += " vector $p="+$particleshapename+".position;\n"; $runtime_String += " vector $v="+$particleshapename+".velocity;\n"; $runtime_String += " emit -object "+$spawnparticlename+" -position ($p.x) ($p.y) ($p.z) -at velocity -vv ($v.x) ($v.y) ($v.z);\n}\n"; } else if(($die_on_end==0)&&($EmitSpawn==0)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalU>"+$minmax_U[1]+") \n{\n"; if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalU<"+$minmax_U[0]+") \n{\n"; $runtime_String += " "+$particleshapename+".goalPP = 0; \n}\n"; } if((($die_on_end==0)&&($EmitSpawn==1))||($die_on_end==1)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalU>"+$minmax_U[1]+")"+$particleshapename+".lifespanPP=0;\r\n"; // end reached=death! if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalU<"+$minmax_U[0]+")"+$particleshapename+".lifespanPP=0;\r\n"; // end reached=death! } } else { if($invert_up==0) $runtime_String = $particleshapename+".goalV+="+$particleshapename+".vInc;\r\n"; if($invert_up==1) $runtime_String = $particleshapename+".goalV-="+$particleshapename+".vInc;\r\n"; if($invert_round==0) $runtime_String += $particleshapename+".goalU+="+$particleshapename+".uInc;\r\n"; // add u/vInc if($invert_round==1) $runtime_String += $particleshapename+".goalU-="+$particleshapename+".uInc;\r\n"; // add u/vInc if($invert_round==0) $runtime_String += "if("+$particleshapename+".goalU>"+$minmax_U[1]+")"+$particleshapename+".goalU="+$minmax_U[0]+";\r\n"; // jump over V-seam if($invert_round==1) $runtime_String += "if("+$particleshapename+".goalU<"+$minmax_U[0]+")"+$particleshapename+".goalU="+$minmax_U[1]+";\r\n"; // jump over V-seam if($invert_up==0) $runtime_String += $particleshapename+".goalV=max("+$particleshapename+".goalV, "+$particleshapename+".vInc);\r\n"; // reached end? if(($die_on_end==0)&&($EmitSpawn==1)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalV>"+$minmax_V[1]+") \n{\n"; if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalV<"+$minmax_V[0]+") \n{\n"; $runtime_String += " vector $p="+$particleshapename+".position;\n"; $runtime_String += " vector $v="+$particleshapename+".velocity;\n"; $runtime_String += " emit -object "+$spawnparticlename+" -position ($p.x) ($p.y) ($p.z) -at velocity -vv ($v.x) ($v.y) ($v.z);\n}\n"; } else if(($die_on_end==0)&&($EmitSpawn==0)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalV>"+$minmax_V[1]+") \n{\n"; if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalV<"+$minmax_V[0]+") \n{\n"; $runtime_String += " "+$particleshapename+".goalPP = 0; \n}\n"; } if((($die_on_end==0)&&($EmitSpawn==1))||($die_on_end==1)) { if($invert_up==0) $runtime_String += "if("+$particleshapename+".goalV>"+$minmax_V[1]+")"+$particleshapename+".lifespanPP=0;\r\n"; // end reached=death! if($invert_up==1) $runtime_String += "if("+$particleshapename+".goalV<"+$minmax_V[0]+")"+$particleshapename+".lifespanPP=0;\r\n"; // end reached=death! } } $runtime_Name = "runtime_"+$surfacename; dynExpression -n $runtime_Name -s $runtime_String -r $particleshapename; // create Runtimeexpression $u_ramp_name = `shadingNode -asTexture -n ("ramp_particle_uInc#") ramp`; $v_ramp_name = `shadingNode -asTexture -n ("ramp_particle_vInc#") ramp`; $u_place2d_name = `shadingNode -asUtility -n ("place2dTexture_particle_uInc#") place2dTexture`; $v_place2d_name = `shadingNode -asUtility -n ("place2dTexture_particle_vInc#") place2dTexture`; connectAttr ($u_place2d_name+".outUV") ($u_ramp_name+".uv"); connectAttr ($u_place2d_name+".outUvFilterSize") ($u_ramp_name+".uvFilterSize"); connectAttr ($v_place2d_name+".outUV") ($v_ramp_name+".uv"); connectAttr ($v_place2d_name+".outUvFilterSize") ($v_ramp_name+".uvFilterSize"); if($which_uv == 0) { setAttr ($u_ramp_name+".type") 1; setAttr ($v_ramp_name+".type") 1; } else { setAttr ($u_ramp_name+".type") 0; setAttr ($v_ramp_name+".type") 0; } setAttr ($v_ramp_name+".interpolation") 1; setAttr ($u_ramp_name+".interpolation") 1; setAttr ($v_place2d_name+".coverageU") $minmax_U[1]; setAttr ($u_place2d_name+".coverageU") $minmax_U[1]; setAttr ($v_place2d_name+".coverageV") $minmax_V[1]; setAttr ($u_place2d_name+".coverageV") $minmax_V[1]; //--------------------------------- removeMultiInstance -break true ($u_ramp_name+".colorEntryList[1]"); removeMultiInstance -break true ($u_ramp_name+".colorEntryList[2]"); removeMultiInstance -break true ($v_ramp_name+".colorEntryList[1]"); removeMultiInstance -break true ($v_ramp_name+".colorEntryList[2]"); for ($m = 0;$m<=($up_colorentry-1);$m++) { addAttr -ln ("up_Speed_Position"+$m) -at double -min 0.0 -max 1 -dv $roundSpeed ("|"+$tornado_group_name+"|"+$locatorname); setAttr -e -keyable true ("|"+$tornado_group_name+"|"+$locatorname+".up_Speed_Position"+$m); } for ($m = 0;$m<=($round_colorentry-1);$m++) { addAttr -ln ("round_Speed_Position"+$m) -at double -min 0.0 -max 1 -dv $roundSpeed ("|"+$tornado_group_name+"|"+$locatorname); setAttr -e -keyable true ("|"+$tornado_group_name+"|"+$locatorname+".round_Speed_Position"+$m); } for ($m = 0;$m<=($up_colorentry-1);$m++) { addAttr -ln ("up_Speed"+$m) -at double -min 0.0 -max 1 -dv $upSpeed ("|"+$tornado_group_name+"|"+$locatorname); setAttr -e -keyable true ("|"+$tornado_group_name+"|"+$locatorname+".up_Speed"+$m); } for ($m = 0;$m<=($round_colorentry-1);$m++) { addAttr -ln ("round_Speed"+$m) -at double -min 0.0 -max 1 -dv $roundSpeed ("|"+$tornado_group_name+"|"+$locatorname); setAttr -e -keyable true ("|"+$tornado_group_name+"|"+$locatorname+".round_Speed"+$m); } //--------------------------------- for ($m = 0;$m<=($up_colorentry-1);$m++) { setAttr ($u_ramp_name+".colorEntryList["+$m+"].color") -type double3 $upSpeed $upSpeed $upSpeed; if ($up_colorentry-1>1) { setAttr ($u_ramp_name+".colorEntryList["+$m+"].position") ((1.0/($up_colorentry-1))*$m); setAttr ($locatorname+".up_Speed_Position"+$m) ((1.0/($up_colorentry-1))*$m); } /* else { setAttr ($u_ramp_name+".colorEntryList[0].position") 0; setAttr ($u_ramp_name+".colorEntryList[0].color") -type double3 $roundSpeed $roundSpeed $roundSpeed; }*/ connectAttr -f ($locatorname+".up_Speed_Position"+$m) ($u_ramp_name+".colorEntryList["+$m+"].position"); connectAttr -f ($locatorname+".up_Speed"+$m) ($u_ramp_name+".colorEntryList["+$m+"].colorR") ; connectAttr -f ($locatorname+".up_Speed"+$m) ($u_ramp_name+".colorEntryList["+$m+"].colorG") ; connectAttr -f ($locatorname+".up_Speed"+$m) ($u_ramp_name+".colorEntryList["+$m+"].colorB") ; } for ($m = 0;$m<=($round_colorentry-1);$m++) { if ($round_colorentry-1>1){ setAttr ($v_ramp_name+".colorEntryList["+$m+"].color") -type double3 $roundSpeed $roundSpeed $roundSpeed; setAttr ($v_ramp_name+".colorEntryList["+$m+"].position") ((1.0/($round_colorentry-1))*$m); setAttr ($locatorname+".round_Speed_Position"+$m) ((1.0/($round_colorentry-1))*$m); } // else setAttr ($v_ramp_name+".colorEntryList[0].color") -type double3 $roundSpeed $roundSpeed $roundSpeed; connectAttr -f ($locatorname+".round_Speed_Position"+$m) ($v_ramp_name+".colorEntryList["+$m+"].position") ; connectAttr -f ($locatorname+".round_Speed"+$m) ($v_ramp_name+".colorEntryList["+$m+"].colorR") ; connectAttr -f ($locatorname+".round_Speed"+$m) ($v_ramp_name+".colorEntryList["+$m+"].colorG") ; connectAttr -f ($locatorname+".round_Speed"+$m) ($v_ramp_name+".colorEntryList["+$m+"].colorB") ; } if($which_uv == 0) { arrayMapper -target $particleshapename -destAttr vInc -inputU goalU -inputV goalU -mt $v_ramp_name; arrayMapper -target $particleshapename -destAttr uInc -inputU goalU -inputV goalU -mt $u_ramp_name; } else { arrayMapper -target $particleshapename -destAttr vInc -inputU goalV -inputV goalV -mt $u_ramp_name; arrayMapper -target $particleshapename -destAttr uInc -inputU goalV -inputV goalV -mt $v_ramp_name; } //--------------------------------- $temp[0] = $emittername; $temp[1] = $particlename; $temp[2] = $spawnparticlename; return $temp; } //-------------------------- proc string createLattice (string $tornado_group_name, string $zyl_name, string $locatorname, int $rows, int $max_lattice_xz_scale, int $max_lattice_y_scale, string $layername) { string $lat_name = "lattice"+$zyl_name+"#"; /* How to get the full path of shape and parent!!! listRelatives -f -shapes tornadoSurface1; select (`listRelatives -f -shapes tornadoSurface1`); listRelatives -f -p (`listRelatives -f -shapes tornadoSurface1`); */ // Creates Latticebox select -r $zyl_name; $temp = `lattice -divisions 2 $rows 2 -cp -objectCentered true -ldv 2 2 2 -n $lat_name`; $lat_name = $temp[0]; move 0 0 0 ($lat_name+"LatticeGroup"+".scalePivot") ($lat_name+"LatticeGroup"+".rotatePivot"); move 0 0 0 ($lat_name+"Lattice"+".scalePivot") ($lat_name+"Lattice"+".rotatePivot"); layerEditorAddObjects $layername; string $rowname= "|" + $lat_name + "LatticeGroup"; string $rowattr; int $i; for ($i=1; $i<=$rows; $i++) { $rowattr=$locatorname+".row"+$i; $rowattr2=$rowattr+"_"+($i+1); addAttr -ln ("row"+$i) -min -10.0 -max 100 -at double $locatorname; setAttr -e -keyable true $rowattr; if ($i<=($rows-1)) { addAttr -ln ("row"+$i+"_"+($i+1)) -min -10.0 -max 10 -dv 0 -at double $locatorname; setAttr -e -keyable true ($locatorname+".row"+$i+"_"+($i+1)); } } // ScaleUP-Attribut int $ScaleY_value=`getAttr ($lat_name+"Lattice.scaleY")`; addAttr -ln ScaleUP -min -10.0 -max 10 -dv 0 -at double $locatorname; setAttr -e -keyable true ($locatorname+".ScaleUP"); setAttr ($locatorname+".ScaleUP") 0; setDrivenKeyframe -cd ($locatorname+".ScaleUP") ($lat_name+"Lattice.scaleY"); setAttr ($locatorname+".ScaleUP") 10; setAttr ($lat_name+"Lattice.scaleY") ($max_lattice_y_scale*$ScaleY_value); setDrivenKeyframe -cd ($locatorname+".ScaleUP") ($lat_name+"Lattice.scaleY"); setAttr ($locatorname+".ScaleUP") (-10); setAttr ($lat_name+"Lattice.scaleY") (0); setDrivenKeyframe -cd ($locatorname+".ScaleUP") ($lat_name+"Lattice.scaleY"); setAttr ($locatorname+".ScaleUP") 1; $rowname= $lat_name + "LatticeGroup"; string $points_1; string $points_2; float $y_Value; float $dy = 10.0 / ($rows-1); // Scale XZ-Attribut => .row1-$rows for ($i=1; $i<=$rows; $i++) { $points_1= $lat_name + "Lattice.pt[0:1]["+($rows-$i)+"][0]"; $points_2= $lat_name + "Lattice.pt[0:1]["+($rows-$i)+"][1]"; $y_Value =(10 - $dy * $i + $dy); setAttr ($locatorname+".row"+$i) 0; setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".zValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".zValue"); setAttr ($locatorname+".row"+$i) 100; select -r $points_1 $points_2; scale -r -p 0 $y_Value 0 50 0 50; setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".zValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".zValue"); setAttr ($locatorname+".row"+$i) (-10); select -r $points_1 $points_2; scale -r -p 0 $y_Value 0 0 0 0; setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_1+".zValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".xValue"); setDrivenKeyframe -cd ($locatorname+".row"+$i) ($points_2+".zValue"); setAttr ($locatorname+".row"+$i) 0; select -cl; } // Scale Y-Attribut => .row1_2-$rows_$rows-1 for ($i=1; $i<=($rows-1); $i++) { $points_1= $lat_name + "Lattice.pt[0:1]["+($rows-$i-1)+":"+($rows-$i)+"][0:1]"; $y_Value =(10 - $dy * $i); setAttr ($locatorname+".row"+$i+"_"+($i+1)) 0; setDrivenKeyframe -cd ($locatorname+".row"+$i+"_"+($i+1)) ($points_1+".yValue"); setAttr ($locatorname+".row"+$i+"_"+($i+1)) 10; select -r $points_1; scale -r -p 0 $y_Value 0 0 $max_lattice_xz_scale 0; setDrivenKeyframe -cd ($locatorname+".row"+$i+"_"+($i+1)) ($points_1+".yValue"); setAttr ($locatorname+".row"+$i+"_"+($i+1)) -10; select -r $points_1; scale -r -p 0 $y_Value 0 0 ($max_lattice_xz_scale*-1) 0; setDrivenKeyframe -cd ($locatorname+".row"+$i+"_"+($i+1)) ($points_1+".yValue"); setAttr ($locatorname+".row"+$i+"_"+($i+1)) (0); select -cl; } for ($i=1; $i<=$rows; $i++) { setAttr ($locatorname+".row"+$i) 1; } for ($i=1; $i<=($rows-1); $i++) { setAttr ($locatorname+".row"+$i+"_"+($i+1)) 0; } // Set Keytangent Flat!!! for ($i=0; $i<($rows*4); $i++) { selectKey -add -k -f 0 ($lat_name + "LatticeShape_controlPoints_"+$i+"__xValue"); selectKey -add -k -f 0 ($lat_name + "LatticeShape_controlPoints_"+$i+"__yValue"); selectKey -add -k -f 0 ($lat_name + "LatticeShape_controlPoints_"+$i+"__zValue"); keyTangent -itt flat -ott flat; select -cl; } parent ($lat_name+"LatticeGroup") $tornado_group_name; select -cl; return(""); } //-------------------------- proc int is_it_nurbs(string $surfacename) { $return_value=0; $shapename=getShape($surfacename); if($shapename!="") { select($shapename); $showtype = `ls -sl -showType`; if($showtype[1]=="nurbsSurface") $return_value=1; } return $return_value; } //-------------------------- global proc createSurfaceParticle () { setupSurfaceParticleMenuItem; } global proc createSurfaceParticleProc (string $oldWinPosition) { // Variables that should be set by UI float $emitter_rate = 50.0; // Default Emitterrate float $max_emitter_rate = 1000; // Default Emitterrate int $up_colorentry = 3; // Number of Controlpoints Up int $round_colorentry = 3; // Number of Controlpoints Round float $upSpeed = 0.005; //Default Up float $roundSpeed = 0.005; //Default Round int $automatic = 1; // Default 1 (automatic Detection of Surfaceseam) // 0 Overrides Detection and sets Var $selected_dir int $selected_dir = 0; // only used if automatic is overrided or Surface is open in both directions! int $die_on_end = 1; // Sets if Particle die, or new particle will be emitted on death float $spawnLife = 5; // Lifelenght for Spawnparticles... int $new_tornado = 0; // Overrides every Selection and creates a tornadostyled // Zylinder with Lattice (and Latticecontrols)! (not implemented by now!) int $t_Spans = 6; int $t_Sections = 8; int $rows = 5; int $max_lattice_xz_scale = 20; int $max_lattice_y_scale = 5; int $invert_round = 1; // Changes left-right/right-left int $invert_up = 1; // Changes from up to down int $EmitSpawn = 0; //-------------------------------------------- // optionVars? if ( `optionVar -exists createSurfaceParticleEmitterRate` ) $emitter_rate = `optionVar -q createSurfaceParticleEmitterRate`; if ( `optionVar -exists createSurfaceParticleMaxEmitterRate` ) $max_emitter_rate = `optionVar -q createSurfaceParticleMaxEmitterRate`; if ( `optionVar -exists createSurfaceParticleColorEntryUp` ) $up_colorentry = `optionVar -q createSurfaceParticleColorEntryUp`; if ( `optionVar -exists createSurfaceParticleColorEntryRound` ) $round_colorentry = `optionVar -q createSurfaceParticleColorEntryRound`; if ( `optionVar -exists createSurfaceParticleUpSpeed` ) $upSpeed = `optionVar -q createSurfaceParticleUpSpeed`; if ( `optionVar -exists createSurfaceParticleRoundSpeed` ) $roundSpeed = `optionVar -q createSurfaceParticleRoundSpeed`; if ( `optionVar -exists createSurfaceParticleDirDetection` ) $automatic = `optionVar -q createSurfaceParticleDirDetection`; if ( `optionVar -exists createSurfaceParticleDirSelected` ) $selected_dir = `optionVar -q createSurfaceParticleDirSelected`; if ( `optionVar -exists createSurfaceParticleDieOnEnd` ) $die_on_end = `optionVar -q createSurfaceParticleDieOnEnd`; if ( `optionVar -exists createSurfaceParticleEmitSpawn` ) $EmitSpawn = `optionVar -q createSurfaceParticleEmitSpawn`; if ( `optionVar -exists createSurfaceParticleSpawnLife` ) $spawnLife = `optionVar -q createSurfaceParticleSpawnLife`; if ( `optionVar -exists createSurfaceParticleNewTornadoSystem` )$new_tornado = `optionVar -q createSurfaceParticleNewTornadoSystem`; if ( `optionVar -exists createSurfaceParticleNewSpans` ) $t_Spans = `optionVar -q createSurfaceParticleNewSpans`; if ( `optionVar -exists createSurfaceParticleNewSections` ) $t_Sections = `optionVar -q createSurfaceParticleNewSections`; if ( `optionVar -exists createSurfaceParticleNewRows` ) $rows = `optionVar -q createSurfaceParticleNewRows`; if ( `optionVar -exists createSurfaceParticleNewScaleXZ` ) $max_lattice_xz_scale = `optionVar -q createSurfaceParticleNewScaleXZ`; if ( `optionVar -exists createSurfaceParticleNewScaleY` ) $max_lattice_y_scale = `optionVar -q createSurfaceParticleNewScaleY`; if ( `optionVar -exists createSurfaceParticleInvertRound` ) $invert_round = `optionVar -q createSurfaceParticleInvertRound`; if ( `optionVar -exists createSurfaceParticleInvertUp` ) $invert_up = `optionVar -q createSurfaceParticleInvertUp`; //warning ($upSpeed + " " +$roundSpeed); //-------------------------------------------- string $group_pre = "group_"; // default prefix for groups string $tornado_group_name; string $locatorname; string $emittername; int $which_uv; float $selectionXYZ[]; string $emitter_particle[]; string $layername; if ($new_tornado==1) { $temp = `cylinder -name "tornadoSurface#" -p 0 1 0 -ax 0 1 0 -ssw 0 -esw 360 -r 1 -hr 2 -d 3 -ut 0 -tol 0.01 -s $t_Sections -nsp $t_Spans -ch 1`; $cylindername = $temp[0]; scale -r 2 5 2; rebuildSurface -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 1 -kc 0 -su 24 -du 3 -sv 36 -dv 3 -tol 0.01 -dir 2 $cylindername; DeleteHistory; $layername = `createDisplayLayer -name ("layer_"+$cylindername+"#") -number 1 -empty`; layerEditorAddObjects $layername; setAttr ($layername+".displayType") 1; setAttr ($layername+".shading") 0; select $cylindername; } string $namerSel[] = `ls -sl`; int $namerSiz = `size $namerSel`; for ($i=0; $i<$namerSiz; $i++) { if ( `optionVar -exists createSurfaceParticleDieOnEnd` ) $die_on_end = `optionVar -q createSurfaceParticleDieOnEnd`; if((`is_it_nurbs($namerSel[$i])`)==1) { /* choose which direction automatic=1 => U open? / V open? automatic=0 => manual set dir */ select($namerSel[$i]); $shapeName = getShape($namerSel[$i]); if($automatic==1) { if((getAttr($shapeName+".formU") == 0)&&(getAttr($shapeName+".formV") != 0)) $which_uv=0; if((getAttr($shapeName+".formU") != 0)&&(getAttr($shapeName+".formV") == 0)) $which_uv=1; if((getAttr($shapeName+".formU") == 0)&&(getAttr($shapeName+".formV") == 0)) { $which_uv=$selected_dir;} // $die_on_end=1;} // both open (Plane) if((getAttr($shapeName+".formU") != 0)&&(getAttr($shapeName+".formV") != 0)) { $which_uv=$selected_dir; $die_on_end=1;} // both closed (Torus) if((getAttr($shapeName+".formU") == 2)&&(getAttr($shapeName+".formV") == 1)) {$which_uv=1;$die_on_end=1;} // closed loft! if((getAttr($shapeName+".formU") == 1)&&(getAttr($shapeName+".formV") == 2)) {$which_uv=0;$die_on_end=1;} // if it is a closed loft, the param on top is 1 and at the bottom is 0 and 2... than every created particle emitts a spawn particle at the beginning!!! } else $which_uv=$selected_dir; // End of choose-direction-section // Creates own Group for particlesytems,controls... select $namerSel[$i]; $tornado_group_name =`group -em -name ($group_pre+$namerSel[$i]+"#")`; select -r $tornado_group_name; select -add $namerSel[$i]; if (`exists align`) { int $lock[]; $lock[0]=`getAttr -l ($namerSel[$i]+".tx")`; // Transforms locked? $lock[1]=`getAttr -l ($namerSel[$i]+".ty")`; $lock[2]=`getAttr -l ($namerSel[$i]+".tz")`; setAttr -lock false ($namerSel[$i]+".tx"); setAttr -lock false ($namerSel[$i]+".ty"); setAttr -lock false ($namerSel[$i]+".tz"); align -atl -x Mid -z Mid; // Align breaks the script if the dest object is locked!!! setAttr -l $lock[0] ($namerSel[$i]+".tx"); // unlock Transforms! setAttr -l $lock[1] ($namerSel[$i]+".ty"); setAttr -l $lock[2] ($namerSel[$i]+".tz"); } select $namerSel[$i]; $selectionXYZ[0]=getAttr($tornado_group_name+".tx"); $selectionXYZ[1]=getAttr($tornado_group_name+".ty"); $selectionXYZ[2]=getAttr($tornado_group_name+".tz"); /*$selectionXYZ[0]=getAttr($namerSel[$i]+".tx"); $selectionXYZ[1]=getAttr($namerSel[$i]+".ty"); $selectionXYZ[2]=getAttr($namerSel[$i]+".tz"); /*move -xyz $selectionXYZ[0] $selectionXYZ[1] $selectionXYZ[2] $tornado_group_name;*/ // Creates Locator which holds all controls! Postion will be the value of the surface-transfromnode! $locatorname = createLocator($tornado_group_name, $namerSel[$i], $selectionXYZ); if ($new_tornado==1) { parent $namerSel[$i] $tornado_group_name; createLattice ($tornado_group_name, $namerSel[$i], $locatorname, $rows, $max_lattice_xz_scale, $max_lattice_y_scale, $layername); } // Creates SurfaceEmitter & ParticleSystem $emitter_particle = create_SurfaceParticle($tornado_group_name, $namerSel[$i], $shapeName, $locatorname, $which_uv, $emitter_rate, $max_emitter_rate, $die_on_end, $EmitSpawn, $up_colorentry, $round_colorentry, $upSpeed, $roundSpeed, $spawnLife, $invert_round, $invert_up); select $locatorname; // Outputs statistics printf("\n----------------------------------------------------------"); printf("Surfacename: "+$namerSel[$i]); printf("Groupname: "+$tornado_group_name); printf("Locatorname: "+$locatorname); if($which_uv==0)printf("Direction: U"); else printf("Direction: V"); printf("Emittername: "+$emitter_particle[0]); printf("Particlename: "+$emitter_particle[1]); if($emitter_particle[2]!="") printf(" "+$emitter_particle[2]); if($invert_up) printf("Inverse UP: true"); if($invert_round) printf("Inverse Round: true"); if(!$invert_up) printf("Inverse UP: false"); if(!$invert_round) printf("Inverse Round: false"); printf("----------------------------------------------------------"); } else printf("Note: Selected Object named "+$namerSel[$i]+" is no Nurbssurface!"); } if($namerSiz==0)warning("Nothing selected! Select a least one Nurbssurface!"); } //---------------------------------------------------------------------- // Setup optionVars global proc SurfaceParticleOptionVars(int $what_to_do) { // If param == 1 then setup optionVars with default value / reset!!! if ($what_to_do==1) optionVar -fv createSurfaceParticleEmitterRate 50.0; if ($what_to_do==1) optionVar -fv createSurfaceParticleMaxEmitterRate 1000; if ($what_to_do==1) optionVar -fv createSurfaceParticleColorEntryUp 3; if ($what_to_do==1) optionVar -fv createSurfaceParticleColorEntryRound 3; if ($what_to_do==1) optionVar -fv createSurfaceParticleUpSpeed 0.005; if ($what_to_do==1) optionVar -fv createSurfaceParticleRoundSpeed 0.005; if ($what_to_do==1) optionVar -iv createSurfaceParticleDirDetection 1; if ($what_to_do==1) optionVar -iv createSurfaceParticleDirSelected 0; if ($what_to_do==1) optionVar -iv createSurfaceParticleDieOnEnd 1; if ($what_to_do==1) optionVar -iv createSurfaceParticleEmitSpwan 0; if ($what_to_do==1) optionVar -fv createSurfaceParticleSpawnLife 5; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewTornadoSystem 0; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewSpans 6; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewSections 8; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewRows 5; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewScaleXZ 20; if ($what_to_do==1) optionVar -iv createSurfaceParticleNewScaleY 5; if ($what_to_do==1) optionVar -iv createSurfaceParticleInvertRound 0; if ($what_to_do==1) optionVar -iv createSurfaceParticleInvertUp 0; // If param == 2 and optionvars doesn't exist then setup optionVars with default value!!! if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleEmitterRate` )==0)) optionVar -fv createSurfaceParticleEmitterRate 50.0; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleMaxEmitterRate` )==0)) optionVar -fv createSurfaceParticleMaxEmitterRate 1000; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleColorEntryUp` )==0)) optionVar -fv createSurfaceParticleColorEntryUp 3; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleColorEntryRound` )==0)) optionVar -fv createSurfaceParticleColorEntryRound 3; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleUpSpeed` )==0)) optionVar -fv createSurfaceParticleUpSpeed 0.005; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleRoundSpeed` )==0)) optionVar -fv createSurfaceParticleRoundSpeed 0.005; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleDirDetection` )==0)) optionVar -iv createSurfaceParticleDirDetection 1; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleDirSelected` )==0)) optionVar -iv createSurfaceParticleDirSelected 0; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleDieOnEnd` )==0)) optionVar -iv createSurfaceParticleDieOnEnd 1; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleEmitSpwan` )==0)) optionVar -iv createSurfaceParticleEmitSpwan 1; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleSpawnLife` )==0)) optionVar -fv createSurfaceParticleSpawnLife 5; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewTornadoSystem` )==0)) optionVar -iv createSurfaceParticleNewTornadoSystem 0; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewSpans` )==0)) optionVar -iv createSurfaceParticleNewSpans 6; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewSections` )==0)) optionVar -iv createSurfaceParticleNewSections 8; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewRows` )==0)) optionVar -iv createSurfaceParticleNewRows 5; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewScaleXZ` )==0)) optionVar -iv createSurfaceParticleNewScaleXZ 20; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleNewScaleY` )==0)) optionVar -iv createSurfaceParticleNewScaleY 5; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleInvertRound` )==0)) optionVar -iv createSurfaceParticleInvertRound 0; if (($what_to_do==2)&&(( `optionVar -exists createSurfaceParticleInvertUp` )==0)) optionVar -iv createSurfaceParticleInvertUp 0; // If param == 3 then delete optionVars!!! if ($what_to_do==3) optionVar -rm createSurfaceParticleEmitterRate ; if ($what_to_do==3) optionVar -rm createSurfaceParticleMaxEmitterRate ; if ($what_to_do==3) optionVar -rm createSurfaceParticleColorEntryUp ; if ($what_to_do==3) optionVar -rm createSurfaceParticleColorEntryRound ; if ($what_to_do==3) optionVar -rm createSurfaceParticleUpSpeed ; if ($what_to_do==3) optionVar -rm createSurfaceParticleRoundSpeed ; if ($what_to_do==3) optionVar -rm createSurfaceParticleDirDetection ; if ($what_to_do==3) optionVar -rm createSurfaceParticleDirSelected ; if ($what_to_do==3) optionVar -rm createSurfaceParticleDieOnEnd ; if ($what_to_do==3) optionVar -rm createSurfaceParticleEmitSpwan ; if ($what_to_do==3) optionVar -rm createSurfaceParticleSpawnLife ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewTornadoSystem ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewSpans ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewSections ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewRows ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewScaleXZ ; if ($what_to_do==3) optionVar -rm createSurfaceParticleNewScaleY ; if ($what_to_do==3) optionVar -rm createSurfaceParticleInvertRound ; if ($what_to_do==3) optionVar -rm createSurfaceParticleInvertUp ; } //-------------------------------------------------------------- global proc createSurfaceParticleresetOptionVars() { SurfaceParticleOptionVars(1); floatSliderGrp -e -value `optionVar -q createSurfaceParticleEmitterRate` "float_Rate"; floatSliderGrp -e -value `optionVar -q createSurfaceParticleMaxEmitterRate` "float_maxRate"; intSliderGrp -e -value `optionVar -q createSurfaceParticleColorEntryUp` "int_UpSpeed"; intSliderGrp -e -value `optionVar -q createSurfaceParticleColorEntryRound` "int_RoundSpeed"; floatSliderGrp -e -value `optionVar -q createSurfaceParticleUpSpeed` "float_UpSpeed"; floatSliderGrp -e -value `optionVar -q createSurfaceParticleRoundSpeed` "float_RoundSpeed"; checkBox -e -value `optionVar -q createSurfaceParticleInvertUp` "inverse_Up"; checkBox -e -value `optionVar -q createSurfaceParticleInvertRound` "inverse_Round"; checkBox -e -value `optionVar -q createSurfaceParticleDirDetection` "check_DirDetect"; radioButtonGrp -e -select (`optionVar -q createSurfaceParticleDirSelected`+1) "radio_dir"; checkBox -e -value `optionVar -q createSurfaceParticleDieOnEnd` "check_DieOnEnd"; checkBox -e -en false -value `optionVar -q createSurfaceParticleEmitSpawn` "check_EmitSpawn"; floatSliderGrp -e -en false -value `optionVar -q createSurfaceParticleSpawnLife` "float_Spawn_slider"; checkBox -e -value `optionVar -q createSurfaceParticleNewTornadoSystem` "check_NewTornadoSystem"; intSliderGrp -e -en false -value `optionVar -q createSurfaceParticleNewSpans` "csp_s1"; intSliderGrp -e -en false -value `optionVar -q createSurfaceParticleNewSections` "csp_s2"; intSliderGrp -e -en false -value `optionVar -q createSurfaceParticleNewRows` "csp_s3"; intSliderGrp -e -en false -value `optionVar -q createSurfaceParticleNewScaleXZ` "csp_s4"; intSliderGrp -e -en false -value `optionVar -q createSurfaceParticleNewScaleY` "csp_s5"; } //-------------------------------------------------------------- proc string createSurfaceParticleOptions(string $parent) { SurfaceParticleOptionVars(2); string $column = `columnLayout/* -rowSpacing 2 -adjustableColumn true*/`; floatSliderGrp -label "Emitter Rate" -field true -minValue 0.0 -maxValue 150.0 -fieldMinValue 0.0 -fieldMaxValue 1000.0 -value `optionVar -q createSurfaceParticleEmitterRate` -cc "optionVar -fv createSurfaceParticleEmitterRate #1" //#1 ???? "float_Rate"; floatSliderGrp -label "Max Emitter Rate" -field true -minValue 100.0 -maxValue 10000.0 -fieldMinValue 0.0 -fieldMaxValue 100000.0 -value `optionVar -q createSurfaceParticleMaxEmitterRate` -cc "optionVar -fv createSurfaceParticleMaxEmitterRate #1" "float_maxRate"; separator; intSliderGrp -label "UP Speed Controlpoints" -field true -minValue 1 -maxValue 10 -fieldMinValue 1 -fieldMaxValue 200 -value `optionVar -q createSurfaceParticleColorEntryUp` -cc "optionVar -iv createSurfaceParticleColorEntryUp #1" "int_UpSpeed"; intSliderGrp -label "Round Speed Controlpoints" -field true -minValue 1 -maxValue 10 -fieldMinValue 1 -fieldMaxValue 200 -value `optionVar -q createSurfaceParticleColorEntryRound` -cc "optionVar -iv createSurfaceParticleColorEntryRound #1" "int_RoundSpeed"; floatSliderGrp -label "Default Up Speed" -field true -minValue 0.000 -maxValue 1.000 -fieldMinValue 0.000 -fieldMaxValue 1.000 -pre 4 -value `optionVar -q createSurfaceParticleUpSpeed` -cc "optionVar -fv createSurfaceParticleUpSpeed #1" "float_UpSpeed"; checkBox -label "Reverse Up Direction" -value `optionVar -q createSurfaceParticleInvertUp` -onc "optionVar -iv createSurfaceParticleInvertUp 1" -ofc "optionVar -iv createSurfaceParticleInvertUp 0" "inverse_Up"; floatSliderGrp -label "Default Round Speed" -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -pre 4 -value `optionVar -q createSurfaceParticleRoundSpeed` -cc "optionVar -fv createSurfaceParticleRoundSpeed #1" "float_RoundSpeed"; checkBox -label "Reverse Round Direction" -value `optionVar -q createSurfaceParticleInvertRound` -onc "optionVar -iv createSurfaceParticleInvertRound 1" -ofc "optionVar -iv createSurfaceParticleInvertRound 0" "inverse_Round"; separator; checkBox -label "Automatic Direction Detection" -value `optionVar -q createSurfaceParticleDirDetection` -onc "optionVar -iv createSurfaceParticleDirDetection 1" -ofc "optionVar -iv createSurfaceParticleDirDetection 0" "check_DirDetect"; radioButtonGrp -nrb 2 -l "Which Direction to use?" -l1 "U" -l2 "V" -on1 "optionVar -iv createSurfaceParticleDirSelected 0" -on2 "optionVar -iv createSurfaceParticleDirSelected 1" "radio_dir"; radioButtonGrp -e -select (`optionVar -q createSurfaceParticleDirSelected`+1) "radio_dir"; string $cpde_checkbox_on = "optionVar -iv createSurfaceParticleDieOnEnd 1; checkBox -e -en false \"check_EmitSpawn\";"; string $cpde_checkbox_off = "optionVar -iv createSurfaceParticleDieOnEnd 0; checkBox -e -en true \"check_EmitSpawn\";"; print($cpde_checkbox_off); string $spawn_checkbox_on = "optionVar -iv createSurfaceParticleEmitSpawn 1; floatSliderGrp -e -en true \"float_Spawn_slider\";"; string $spawn_checkbox_off = "optionVar -iv createSurfaceParticleEmitSpawn 0; floatSliderGrp -e -en false \"float_Spawn_slider\";"; int $spawn_on = `optionVar -q createSurfaceParticleEmitSpawn`; int $die_on = `optionVar -q createSurfaceParticleDieOnEnd`; checkBox -label "Particle die at end?" -value `optionVar -q createSurfaceParticleDieOnEnd` -onc $cpde_checkbox_on -ofc $cpde_checkbox_off "check_DieOnEnd"; checkBox -label "Emit Spawn Particle?" -value `optionVar -q createSurfaceParticleEmitSpawn` -en false -onc $spawn_checkbox_on -ofc $spawn_checkbox_off "check_EmitSpawn"; floatSliderGrp -label "Spawn Particle Lifetime" -field true -minValue 0.0 -maxValue 50.0 -fieldMinValue 0.0 -fieldMaxValue 100000.0 -en false -value `optionVar -q createSurfaceParticleSpawnLife` -cc "optionVar -fv createSurfaceParticleSpawnLife #1" "float_Spawn_slider"; if ($die_on == 0) { checkBox -e -en true "check_EmitSpawn"; } if (($die_on == 0)&&($spawn_on==1)) { floatSliderGrp -e -en true "float_Spawn_slider"; } separator; string $cdt_checkbox_on = "optionVar -iv createSurfaceParticleNewTornadoSystem 1; intSliderGrp -e -en true \"csp_s1\"; intSliderGrp -e -en true \"csp_s2\"; intSliderGrp -e -en true \"csp_s3\"; intSliderGrp -e -en true \"csp_s4\"; intSliderGrp -e -en true \"csp_s5\";"; string $cdt_checkbox_off = "optionVar -iv createSurfaceParticleNewTornadoSystem 0; intSliderGrp -e -en false \"csp_s1\"; intSliderGrp -e -en false \"csp_s2\"; intSliderGrp -e -en false \"csp_s3\"; intSliderGrp -e -en false \"csp_s4\"; intSliderGrp -e -en false \"csp_s5\";"; checkBox -label "Create default Tornado" -value `optionVar -q createSurfaceParticleNewTornadoSystem` -onc $cdt_checkbox_on -ofc $cdt_checkbox_off "check_NewTornadoSystem"; intSliderGrp -en `optionVar -q createSurfaceParticleNewTornadoSystem` -label "Cylinder Spans" -field true -minValue 1 -maxValue 25 -fieldMinValue 1 -fieldMaxValue 200 -value `optionVar -q createSurfaceParticleNewSpans` -cc "optionVar -iv createSurfaceParticleNewSpans #1" "csp_s1"; intSliderGrp -en `optionVar -q createSurfaceParticleNewTornadoSystem` -label "Cylinder Sections" -field true -minValue 4 -maxValue 25 -fieldMinValue 4 -fieldMaxValue 200 -value `optionVar -q createSurfaceParticleNewSections` -cc "optionVar -iv createSurfaceParticleNewSections #1" "csp_s2"; intSliderGrp -en `optionVar -q createSurfaceParticleNewTornadoSystem` -label "Lattice Rows" -field true -minValue 5 -maxValue 25 -fieldMinValue 1 -fieldMaxValue 100 -value `optionVar -q createSurfaceParticleNewRows` -cc "optionVar -iv createSurfaceParticleNewRows #1" "csp_s3"; intSliderGrp -en `optionVar -q createSurfaceParticleNewTornadoSystem` -label "Max scale value XZ" -field true -minValue 20 -maxValue 50 -fieldMinValue 1 -fieldMaxValue 500 -value `optionVar -q createSurfaceParticleNewScaleXZ` -cc "optionVar -iv createSurfaceParticleNewScaleXZ #1" "csp_s4"; intSliderGrp -en `optionVar -q createSurfaceParticleNewTornadoSystem` -label "Max scale value Y" -field true -minValue 5 -maxValue 25 -fieldMinValue 1 -fieldMaxValue 500 -value `optionVar -q createSurfaceParticleNewScaleY` -cc "optionVar -iv createSurfaceParticleNewScaleY #1" "csp_s5"; return $column; } global proc createSurfaceParticledisplayOptions (string $oldWinPosition) { string $layout = getOptionBox(); setParent $layout; string $commandName = "createSurfaceParticle"; setOptionBoxCommandName($commandName); setUITemplate -pushTemplate DefaultTemplate; string $parent = `tabLayout -scrollable true`; string $SurfaceParticleOptionsLayout = createSurfaceParticleOptions($parent); tabLayout -edit -tabLabel $SurfaceParticleOptionsLayout "Create Surface Particle" $parent; setUITemplate -popTemplate; // 'Apply' button. // string $applyCloseBtn = getOptionBoxApplyBtn(); button -edit -l "Create" -command ("createSurfaceParticle\;createSurfaceParticleProc \" \"") $applyCloseBtn; // 'Apply' button. // string $applyBtn = getOptionBoxApplyBtn(); button -edit -command ("createSurfaceParticle\;createSurfaceParticleProc \" \"") $applyBtn; // 'Reset' button. // string $resetBtn = getOptionBoxResetBtn(); button -edit -command ("createSurfaceParticleresetOptionVars") $resetBtn; setOptionBoxTitle("Create Surface Particle Tool Options"); // Helpmenu string $helpItem = getOptionBoxHelpItem(); menuItem -edit -label "about createSurfaceParticle()" -command "showHelp -docs \"Scripts/createSurfaceParticle.html\";" $helpItem; // global string $gOptionBoxEditMenuResetItem; global string $gOptionBoxEditMenuSaveItem; // menuItem -e -en false $gOptionBoxEditMenuResetItem; menuItem -e -en false $gOptionBoxEditMenuSaveItem; showOptionBox(); } //-------------------------------------------------------------- proc int findSurfacesMenu() { global string $gDynamicsMenus[]; int $i; for ($i=0 ; $i