//=============== // DLS_defShield.mel // Author: Davide La Sala // e-mail: daxx@davidelasala.com //=============== // Instructions: // run DLS_defShield($namespace,$selections) // example DLS_defShield("JohnSS",`ls -sl`) //########################################################################## global proc dls_pGrp(int $type) { string $list[] = `ls -sl`; string $namex; if ($type ==1) $namex = `tolower $list[0]`; else $namex = `substring $list[0] 1 (size($list[0])-4)`; group -name ($namex+ "_GRP"); xform -cp; } global proc dls_createColorCTL(string $type,int $color) { string $spCtl[]; if (`gmatch $type "sphere"`) { $spCtl=`sphere -p 0 0 0 -ax 0 0 -1 -ssw 0 -esw 360 -r 1 -d 3 -ut 0 -tol 0.01 -s 8 -nsp 4 -ch 0`; } else { $spCtl=`torus -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360 -msw -180 -r 1 -hr 0.9 -d 3 -ut 0 -tol 0.01 -s 8 -nsp 4 -ch 0`; } string $spCtlRel[]=`listRelatives $spCtl[0]`; string $plug[]=`listConnections -p 1 ($spCtlRel[0]+".instObjGroups[0]")`; disconnectAttr ($spCtlRel[0]+".instObjGroups[0]") $plug[0]; setAttr ($spCtlRel[0]+".overrideEnabled") 1; setAttr ($spCtlRel[0]+".overrideColor") $color; } global proc dls_booster_mul_attr(string $boosterattr, string $boostedattr, float $mux) { string $basename = `basenameEx($boostedattr)`; //string $stripname = `substring $basename 1 (size($basename)-3)`; // find source $source =`connectionInfo -sourceFromDestination $boostedattr`; int $ssize = size($source); if ($ssize == 0) { $mulnode =`createNode multiplyDivide`; setAttr ($mulnode+".input2X") $mux; connectAttr -f $boosterattr ($mulnode+".input1X"); connectAttr -f ($mulnode+".outputX") $boostedattr; string $listmulnode[] =`select ("*multiplyDivide*")`; string $list[] =`ls -sl`; $size = `size($list)`; $mulname = $list[($size-1)]; rename $mulname ($basename+"MUL"); } else { $mulnode =`createNode multiplyDivide`; setAttr ($mulnode+".input2X") $mux; $addnode = `createNode plusMinusAverage`; connectAttr -f $boosterattr ($mulnode+".input1X"); connectAttr -f ($mulnode+".outputX")($addnode+".input1D[0]"); connectAttr -f $source ($addnode+".input1D[1]"); connectAttr -f ($addnode+".output1D") $boostedattr; string $listmulnode[] =`select ("*plusMinusAverage*")`; string $list[] =`ls -sl`; $size = `size($list)`; $mulname = $list[($size-1)]; rename $mulname ($basename+"mul_PMA"); string $listmulnode[] =`select ("*multiplyDivide*")`; string $list[] =`ls -sl`; $size = `size($list)`; $mulname = $list[($size-1)]; rename $mulname ($basename+"MUL"); } } global proc DLS_defShield(string $namespace,string $selection[]) { // -----------deformers string $latt[]=`lattice -divisions 6 6 6 -cp -objectCentered true -ol 1 $selection`; rename $latt[1] ($namespace+"_Sqs_LTH"); rename $latt[0] ($namespace+"_Sqs_LAT"); rename $latt[2] ($namespace+"_Sqs_LTB"); rename ($latt[1]+"Group") ($namespace+"_SqsLat_GRP"); setAttr ($namespace+"_Sqs_LTH.visibility") 1; setAttr ($namespace+"_Sqs_LTH.template") 1; float $sstoppos[]; $sstoppos[0]=(`getAttr ($namespace+"_Sqs_LTH.boundingBoxMinX")`+`getAttr ($namespace+"_Sqs_LTH.boundingBoxMaxX")`)/2 ; $sstoppos[1]=`getAttr ($namespace+"_Sqs_LTH.boundingBoxMaxY")`; $sstoppos[2]=(`getAttr ($namespace+"_Sqs_LTH.boundingBoxMinZ")`+`getAttr ($namespace+"_Sqs_LTH.boundingBoxMaxZ")`)/2 ; string $selectionx[]; $selectionx[0]=$latt[1]; string $namedef = ($namespace+"_SQS"); string $namedefH = ($namespace+"_SQH"); select -cl; string $ssdef[] =`nonLinear -type squash -lowBound -1 -highBound 1 -startSmoothness 1 -endSmoothness 1 -maxExpandPos 0.8 -expand 2 -factor 0 ($namespace+"_Sqs_LTH")`; string $ssdefTwist[] =`nonLinear -type twist -lowBound -1 -highBound 1 -startAngle 0 -endAngle 0 ($namespace+"_Sqs_LTH")`; string $ssdefBend1[] =`nonLinear -type bend -lowBound -1 -highBound 1 -curvature 0 ($namespace+"_Sqs_LTH")`; string $ssdefBend2[] =`nonLinear -type bend -lowBound -1 -highBound 1 -curvature 0 ($namespace+"_Sqs_LTH")`; setAttr ($ssdefBend2[1]+".rotateY") -90; // -------------mainCTL string $mainLoc[]=`dls_createColorCTL torus 13`; move -ws $sstoppos[0] ((`getAttr ($namespace+"_Sqs_LTH.boundingBoxMaxY")`+`getAttr ($namespace+"_Sqs_LTH.boundingBoxMinY")`)/2) $sstoppos[2] ; setAttr ($mainLoc[0]+".sy") 0.1; rename $mainLoc ($namespace+"_ssmain_CTL"); makeIdentity -apply true -t 0 -r 0 -s 1 -n 0 ($namespace+"_ssmain_CTL"); addAttr -ln scale_ctls -at double -dv 1 ($namespace+"_ssmain_CTL"); setAttr -e -keyable true ($namespace+"_ssmain_CTL.scale_ctls"); setAttr -lock true -keyable false ($namespace+"_ssmain_CTL.nds"); setAttr -lock true -keyable false ($namespace+"_ssmain_CTL.v"); parent $ssdef[1] ($namespace+"_ssmain_CTL"); parent $ssdefTwist[1] ($namespace+"_ssmain_CTL"); parent $ssdefBend1[1] ($namespace+"_ssmain_CTL"); parent $ssdefBend2[1] ($namespace+"_ssmain_CTL"); // manage Max Expand Pos string $plus=`shadingNode -asUtility plusMinusAverage`; rename $plus ($namespace+"_Sqs_PLS"); setAttr ($namespace+"_Sqs_PLS.operation") 1; connectAttr -f ($ssdef[1]+".lowBound") ($namespace+"_Sqs_PLS.input1D[0]"); connectAttr -f ($ssdef[1]+".highBound") ($namespace+"_Sqs_PLS.input1D[1]"); setAttr ($ssdef[0]+".lowBound") 0; setAttr ($ssdef[0]+".highBound") 1; setAttr ($ssdef[0]+".maxExpandPos") .8; setDrivenKeyframe -cd ($namespace+"_Sqs_PLS.output1D") ($ssdef[0]+".maxExpandPos"); setAttr ($ssdef[0]+".lowBound") -1; setAttr ($ssdef[0]+".highBound") 0; setAttr ($ssdef[0]+".maxExpandPos") .1; setDrivenKeyframe -cd ($namespace+"_Sqs_PLS.output1D") ($ssdef[0]+".maxExpandPos"); setAttr ($ssdef[0]+".lowBound") -1; setAttr ($ssdef[0]+".highBound") 1; setAttr ($ssdef[0]+".maxExpandPos") .5; setDrivenKeyframe -cd ($namespace+"_Sqs_PLS.output1D") ($ssdef[0]+".maxExpandPos"); //----------------- Factor control string $ring[]=`dls_createColorCTL sphere 17`; rename $ring ($namespace+"_ssfactor_CTL"); move $sstoppos[0] $sstoppos[1] $sstoppos[2] ($namespace+"_ssfactor_CTL"); makeIdentity -apply true -t 1 -r 0 -s 1 -n 0 ($namespace+"_ssfactor_CTL"); addAttr -ln lowBound -at double -max 0 -dv 0 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable true ($namespace+"_ssfactor_CTL.lowBound"); addAttr -ln highBound -at double -min 0 -dv 1 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable true ($namespace+"_ssfactor_CTL.highBound"); addAttr -ln twist_end_angle -at double -dv 0 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable true ($namespace+"_ssfactor_CTL.twist_end_angle"); addAttr -ln mux -at double -dv 0.5 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable true ($namespace+"_ssfactor_CTL.mux"); addAttr -ln lattice_vis -at bool -dv 0 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable false -channelBox true ($namespace+"_ssfactor_CTL.lattice_vis"); addAttr -ln def_vis -at bool -dv 0 ($namespace+"_ssfactor_CTL"); setAttr -e -keyable false -channelBox true ($namespace+"_ssfactor_CTL.def_vis"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.rx"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.rz"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.sx"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.sy"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.sz"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.nds"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTLShape.nds"); setAttr -lock true -keyable false ($namespace+"_ssfactor_CTL.v"); dls_booster_mul_attr(($namespace+"_ssfactor_CTL.translateY"),($ssdef[0]+".factor"),1); dls_booster_mul_attr(($namespace+"_ssfactor_CTL.translateX"),($ssdefBend1[0]+".curvature"),1); dls_booster_mul_attr(($namespace+"_ssfactor_CTL.translateZ"),($ssdefBend2[0]+".curvature"),1); connectAttr -f ($namespace+"_ssfactor_CTL.mux") ($ssdef[0]+"MUL.input2X"); connectAttr -f ($namespace+"_ssfactor_CTL.mux") ($ssdefBend1[0]+"MUL.input2X"); connectAttr -f ($namespace+"_ssfactor_CTL.mux") ($ssdefBend2[0]+"MUL.input2X"); select -r ($namespace+"_ssfactor_CTL");dls_pGrp(0); parentConstraint -mo ($namespace+"_ssmain_CTL") ($namespace+"_ssfactor_GRP"); connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($namespace+"_ssfactor_GRP.scaleX"); connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($namespace+"_ssfactor_GRP.scaleY"); connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($namespace+"_ssfactor_GRP.scaleZ"); select -r ($namespace+"_ssmain_CTL.cv[0:6][0:7]"); string $clux[]=`newCluster " -envelope 1"`; connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($clux[1]+".scaleX"); connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($clux[1]+".scaleY"); connectAttr -f ($namespace+"_ssmain_CTL.scale_ctls") ($clux[1]+".scaleZ"); setAttr ($namespace+"_ssmain_CTL.scaleX") 4; setAttr ($namespace+"_ssmain_CTL.scaleY") 2; setAttr ($namespace+"_ssmain_CTL.scaleZ") 4; hide $clux[1]; select -r ($namespace+"_ssmain_CTL") ($namespace+"_ssfactor_GRP") $clux[1] ($namespace+"_SqsLat_GRP"); group -w -n ($namespace+"_dlsDefShield_GRP"); rename $ssdef[0] ($namespace+"_dlsDefShield_SQS"); rename $ssdef[1] ($namespace+"_dlsDefShield_SQH"); rename $clux[1] ($namespace+"_dlsDefShield_CLH"); setAttr ($namespace+"_dlsDefShield_SQH.template") 1; connectAttr -f ($namespace+"_ssfactor_CTL.lowBound") ($namespace+"_dlsDefShield_SQS.lowBound"); connectAttr -f ($namespace+"_ssfactor_CTL.highBound") ($namespace+"_dlsDefShield_SQS.highBound"); connectAttr -f ($namespace+"_ssfactor_CTL.lowBound") ($ssdefBend1[1]+".lowBound"); connectAttr -f ($namespace+"_ssfactor_CTL.lowBound") ($ssdefBend2[1]+".lowBound"); connectAttr -f ($namespace+"_ssfactor_CTL.highBound") ($ssdefBend1[1]+".highBound"); connectAttr -f ($namespace+"_ssfactor_CTL.highBound") ($ssdefBend2[1]+".highBound"); dls_booster_mul_attr(($namespace+"_ssfactor_CTL.rotateY"), ($ssdefTwist[1]+".endAngle"),-1); connectAttr -f ($namespace+"_ssfactor_CTL.twist_end_angle") ($ssdefTwist[1]+".startAngle"); connectAttr -f ($namespace+"_ssfactor_CTL.lattice_vis") ($namespace+"_Sqs_LTH.visibility"); rename $ssdefTwist[0] ($namespace+"_dlsDefShield_TWS"); rename $ssdefTwist[1] ($namespace+"_dlsDefShield_TWH"); rename $ssdefBend1[0] ($namespace+"_dlsDefShield_BN1S"); rename $ssdefBend1[1] ($namespace+"_dlsDefShield_BN1H"); rename $ssdefBend2[0] ($namespace+"_dlsDefShield_BN2S"); rename $ssdefBend2[1] ($namespace+"_dlsDefShield_BN2H"); connectAttr -f ($namespace+"_ssfactor_CTL.def_vis") ($namespace+"_dlsDefShield_TWH.visibility"); connectAttr -f ($namespace+"_ssfactor_CTL.def_vis") ($namespace+"_dlsDefShield_BN1H.visibility"); connectAttr -f ($namespace+"_ssfactor_CTL.def_vis") ($namespace+"_dlsDefShield_BN2H.visibility"); connectAttr -f ($namespace+"_ssfactor_CTL.def_vis") ($namespace+"_dlsDefShield_SQH.visibility"); setAttr ($namespace+"_dlsDefShield_TWH.template") 1; setAttr ($namespace+"_dlsDefShield_BN1H.template") 1; setAttr ($namespace+"_dlsDefShield_BN2H.template") 1; select -cl; select ($namespace+"_ssmain_CTL"); }