// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== proc string controlType_melToUI(string $mel) { string $ui = $mel; if($mel == "cube") { $ui = (uiRes("m_cMuscleBuilder.kControlTypeCube")) ; } else if ($mel == "circleY") { $ui = (uiRes("m_cMuscleBuilder.kControlTypeCircleY")) ; } else if ($mel == "null") { $ui = (uiRes("m_cMuscleBuilder.kControlTypeNull")) ; } else { uiToMelMsg("controlType_melToUI", $mel, 0); } return $ui; } proc string controlType_uiToMel(string $ui) { string $mel = $ui; if($ui == (uiRes("m_cMuscleBuilder.kControlTypeCube"))) { $mel = "cube"; } else if($ui == (uiRes("m_cMuscleBuilder.kControlTypeCircleY"))) { $mel = "circleY"; } else if($ui == (uiRes("m_cMuscleBuilder.kControlTypeNull"))) { $mel = "null"; } else { uiToMelMsg("controlType_uiToMel", $ui, 0); } return $mel; } /* * cMuscleBuilder() - Main Entry */ global proc cMuscleBuilder() { if (!`pluginInfo -q -loaded "MayaMuscle"`) error (uiRes("m_cMuscleBuilder.kMustLoadMusclePlugin")); if (`window -q -ex cMuscleBuilderWin`) { showWindow cMuscleBuilderWin ; return ; } window -w 420 -h 630 -t (uiRes("m_cMuscleBuilder.kMuscleBuilder")) cMuscleBuilderWin ; formLayout mainTabForm ; tabLayout -innerMarginWidth 2 -innerMarginHeight 2 -sc ("cMBld_CBTabChanged();") bldTabs ; formLayout -e -af bldTabs "top" 5 -af bldTabs "bottom" 0 -af bldTabs "left" 0 -af bldTabs "right" 0 mainTabForm ; scrollLayout -cr 1 -p bldTabs mainScroll ; formLayout bldForm ; tabLayout -e -tabLabelIndex 1 (uiRes("m_cMuscleBuilder.kBuild")) bldTabs ; // Build Tab // // Attach 1 Stuff button -l (uiRes("m_cMuscleBuilder.kAttachObj1")) -h 20 -w 93 -c ("select -r cMuscleBuilder_locAimStart; ") -ann (uiRes("m_cMuscleBuilder.kAttachObj1Annot")) txAttach1 ; textField -tx "" tfAttach1 ; button -l "<<<" -c ("cMBld_loadSel(\"tfAttach1\");") -w 30 -ann (uiRes("m_cMuscleBuilder.kLoadSelectedObject1")) btnLoadAttach1 ; $labelAt = (uiRes("m_cMuscleBuilder.kAt")); $labelOffX = (uiRes("m_cMuscleBuilder.kOffX")); $labelOffZ = (uiRes("m_cMuscleBuilder.kOffZ")); floatSliderGrp -label $labelAt -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.25 -pre 3 -adj 3 -cw3 50 60 90 fsgAt1 ; floatSliderGrp -label $labelOffX -field true -minValue -1.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.0 -pre 3 -adj 3 -cw3 50 60 90 fsgOffX1 ; floatSliderGrp -label $labelOffZ -field true -minValue -1.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.0 -pre 3 -adj 3 -cw3 50 60 90 fsgOffZ1 ; separator -h 3 sep1 ; // Attach 2 Stuff button -l (uiRes("m_cMuscleBuilder.kAttachObj2")) -h 20 -w 93 -c ("select -r cMuscleBuilder_locAimEnd; ") -ann (uiRes("m_cMuscleBuilder.kAttachObj2Annot")) txAttach2 ; textField -tx "" tfAttach2 ; button -l "<<<" -c ("cMBld_loadSel(\"tfAttach2\");") -w 30 -ann (uiRes("m_cMuscleBuilder.kLoadSelectedObject2")) btnLoadAttach2 ; floatSliderGrp -label $labelAt -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.25 -pre 3 -adj 3 -cw3 50 60 90 fsgAt2 ; floatSliderGrp -label $labelOffX -field true -minValue -1.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.0 -pre 3 -adj 3 -cw3 50 60 90 fsgOffX2 ; floatSliderGrp -label $labelOffZ -field true -minValue -1.0 -maxValue 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -value 0.0 -pre 3 -adj 3 -cw3 50 60 90 fsgOffZ2 ; separator -h 3 sep2 ; intSliderGrp -label (uiRes("m_cMuscleBuilder.kNSpans")) -field true -minValue 3 -maxValue 24 -fieldMinValue 3 -fieldMaxValue 128 -value 7 -adj 3 -cw3 50 60 90 isgSpans ; intSliderGrp -label (uiRes("m_cMuscleBuilder.kNSegs")) -field true -minValue 3 -maxValue 24 -fieldMinValue 3 -fieldMaxValue 128 -value 6 -adj 3 -cw3 50 60 90 isgSegs ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kWidth")) -field true -minValue 0 -maxValue 5 -fieldMinValue 0.0 -fieldMaxValue 128 -value 1.0 -pre 3 -adj 3 -cw3 50 60 90 fsgWidth ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kFalloff")) -field true -minValue 0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -value 0.5 -pre 3 -adj 3 -cw3 50 60 90 fsgFalloff ; button -l (uiRes("m_cMuscleBuilder.kBuildUpdate")) -c ("cMBld_build();") -ann (uiRes("m_cMuscleBuilder.kBuildUpdateAnnot")) btnBld ; button -l (uiRes("m_cMuscleBuilder.kDelete")) -c ("cMBld_delete(1);") -ann (uiRes("m_cMuscleBuilder.kDeleteAnnot")) btnDel ; formLayout -e -af txAttach1 "top" 5 -an txAttach1 "bottom" -af txAttach1 "left" 5 -an txAttach1 "right" -af tfAttach1 "top" 5 -an tfAttach1 "bottom" -ac tfAttach1 "left" 5 txAttach1 -ac tfAttach1 "right" 5 btnLoadAttach1 -af btnLoadAttach1 "top" 5 -an btnLoadAttach1 "bottom" -an btnLoadAttach1 "left" -af btnLoadAttach1 "right" 5 -ac fsgAt1 "top" 0 tfAttach1 -an fsgAt1 "bottom" -af fsgAt1 "left" 5 -af fsgAt1 "right" 5 -ac fsgOffX1 "top" 0 fsgAt1 -an fsgOffX1 "bottom" -af fsgOffX1 "left" 5 -af fsgOffX1 "right" 5 -ac fsgOffZ1 "top" 0 fsgOffX1 -an fsgOffZ1 "bottom" -af fsgOffZ1 "left" 5 -af fsgOffZ1 "right" 5 -ac sep1 "top" 2 fsgOffZ1 -an sep1 "bottom" -af sep1 "left" 5 -af sep1 "right" 5 -ac txAttach2 "top" 5 sep1 -an txAttach2 "bottom" -af txAttach2 "left" 5 -an txAttach2 "right" -ac tfAttach2 "top" 5 sep1 -an tfAttach2 "bottom" -ac tfAttach2 "left" 5 txAttach2 -ac tfAttach2 "right" 5 btnLoadAttach2 -ac btnLoadAttach2 "top" 5 sep1 -an btnLoadAttach2 "bottom" -an btnLoadAttach2 "left" -af btnLoadAttach2 "right" 5 -ac fsgAt2 "top" 0 tfAttach2 -an fsgAt2 "bottom" -af fsgAt2 "left" 5 -af fsgAt2 "right" 5 -ac fsgOffX2 "top" 0 fsgAt2 -an fsgOffX2 "bottom" -af fsgOffX2 "left" 5 -af fsgOffX2 "right" 5 -ac fsgOffZ2 "top" 0 fsgOffX2 -an fsgOffZ2 "bottom" -af fsgOffZ2 "left" 5 -af fsgOffZ2 "right" 5 -ac sep2 "top" 2 fsgOffZ2 -an sep2 "bottom" -af sep2 "left" 5 -af sep2 "right" 5 -ac isgSpans "top" 2 sep2 -an isgSpans "bottom" -af isgSpans "left" 5 -af isgSpans "right" 5 -ac isgSegs "top" 0 isgSpans -an isgSegs "bottom" -af isgSegs "left" 5 -af isgSegs "right" 5 -ac fsgWidth "top" 0 isgSegs -an fsgWidth "bottom" -af fsgWidth "left" 5 -af fsgWidth "right" 5 -ac fsgFalloff "top" 0 fsgWidth -an fsgFalloff "bottom" -af fsgFalloff "left" 5 -af fsgFalloff "right" 5 -ac btnBld "top" 0 fsgFalloff -an btnBld "bottom" -af btnBld "left" 5 -ap btnBld "right" 0 50 -ac btnDel "top" 0 fsgFalloff -an btnDel "bottom" -ap btnDel "left" 0 50 -af btnDel "right" 5 bldForm ; // Cross Section Tab // // scrollLayout -cr 1 -p bldTabs crossScroll ; formLayout -p bldTabs crossForm ; tabLayout -e -tabLabelIndex 2 (uiRes("m_cMuscleBuilder.kCrossSection")) bldTabs ; cMBld_createCamera() ; // Make camera if needed. // Delete old panel if it existed. if (`modelPanel -exists camPanelMuscleBuilder`) { modelEditor -e -vs 0 camPanelMuscleBuilder; // turn off show selected deleteUI -pnl camPanelMuscleBuilder; } // Delete old panel if it existed. if (`modelPanel -exists camPanelMuscleBuilderSide`) { modelEditor -e -vs 0 camPanelMuscleBuilderSide; // turn off show selected deleteUI -pnl camPanelMuscleBuilderSide; } // Make camera isolate conn... if (`selectionConnection -q -ex isoConnMuscleBuilder` != true) selectionConnection isoConnMuscleBuilder; else selectionConnection -e -clr isoConnMuscleBuilder; setParent crossForm ; textScrollList -ams true -sc ("cMBld_editCrossSection();") tslEditSpan ; // button -l "Edit Cross Section" -c ("cMBld_editCrossSection();") -ann ("Edit specified cross section") btnEditSpan ; string $labelEditCrossSection = (uiRes("m_cMuscleBuilder.kEditCrossSection")); string $labelEditCrossSectionAnnot = (uiRes("m_cMuscleBuilder.kEditCrossSectionAnnot")); if (`about -macOS`) checkBox -h 20 -l $labelEditCrossSection -onc ("cMBld_editCrossSection();") -ofc ("cMBld_editCrossSectionEnd();") -v 0 -ann $labelEditCrossSectionAnnot btnEditSpan ; else iconTextCheckBox -h 20 -l $labelEditCrossSection -onc ("cMBld_editCrossSection();") -ofc ("cMBld_editCrossSectionEnd();") -v 0 -style "textOnly" -ann $labelEditCrossSectionAnnot btnEditSpan ; // Make the panel modelPanel -p crossForm -mbv false -cam "MuscleBuilderCamera" camPanelMuscleBuilder ; modelPanel -p crossForm -mbv false -cam "MuscleBuilderCameraSide" camPanelMuscleBuilderSide ; formLayout -e -af tslEditSpan "top" 5 -af tslEditSpan "bottom" 5 -af tslEditSpan "left" 5 -ap tslEditSpan "right" 0 20 -af btnEditSpan "top" 5 -an btnEditSpan "bottom" -ap btnEditSpan "left" 0 21 -af btnEditSpan "right" 5 -ac camPanelMuscleBuilder "top" 5 btnEditSpan -ac camPanelMuscleBuilder "bottom" 5 camPanelMuscleBuilderSide -ac camPanelMuscleBuilder "left" 5 tslEditSpan -af camPanelMuscleBuilder "right" 5 -ap camPanelMuscleBuilderSide "top" 0 70 -af camPanelMuscleBuilderSide "bottom" 5 -ac camPanelMuscleBuilderSide "left" 5 tslEditSpan -af camPanelMuscleBuilderSide "right" 5 crossForm ; modelEditor -e -da smoothShaded -activeOnly false camPanelMuscleBuilder ; modelEditor -e -allObjects 0 camPanelMuscleBuilder ; modelEditor -e -nurbsSurfaces 0 -deformers 0 -nurbsCurves 1 -controlVertices 1 -grid 0 camPanelMuscleBuilder ; modelEditor -e -vs 1 -mlc isoConnMuscleBuilder camPanelMuscleBuilder; // isolate select on IsoConn! modelEditor -e -da smoothShaded -activeOnly false camPanelMuscleBuilderSide ; modelEditor -e -allObjects 0 camPanelMuscleBuilderSide ; modelEditor -e -nurbsSurfaces 0 -deformers 0 -nurbsCurves 1 -controlVertices 1 -grid 0 camPanelMuscleBuilderSide ; modelEditor -e -vs 1 -mlc isoConnMuscleBuilder camPanelMuscleBuilderSide; // isolate select on IsoConn! // Finalize Tab // formLayout -p bldTabs finalizeForm ; tabLayout -e -tabLabelIndex 3 (uiRes("m_cMuscleBuilder.kFinalize")) bldTabs ; radioButtonGrp -l (uiRes("m_cMuscleBuilder.kDeformer")) -nrb 2 -la2 (uiRes("m_cMuscleBuilder.kMuscleSplineDeformer")) (uiRes("m_cMuscleBuilder.kMuscleStretch")) -sl 1 -cw3 70 160 120 -cc ("cMBld_updateFinalizeUI();") rbgDef ; intSliderGrp -label (uiRes("m_cMuscleBuilder.kNumControls")) -field 1 -min 2 -max 24 -fmn 2 -fmx 256 -v 3 -cw3 80 40 120 -adj 3 isgCtrls ; optionMenu -l (uiRes("m_cMuscleBuilder.kType")) omCtrlType ; menuItem -l (controlType_melToUI("cube")); menuItem -l (controlType_melToUI("circleY")); menuItem -l (controlType_melToUI("null")); optionMenu -e -sl 1 omCtrlType ; separator sepFin1 ; radioButtonGrp -l (uiRes("m_cMuscleBuilder.kCreateMirroredMuscle")) -nrb 4 -la4 (uiRes("m_cMuscleBuilder.kNone")) (uiRes("m_cMuscleBuilder.kX")) (uiRes("m_cMuscleBuilder.kY")) (uiRes("m_cMuscleBuilder.kZ")) -sl 1 -cw5 146 50 40 40 40 rbgMirrorMus ; text -l (uiRes("m_cMuscleBuilder.kSearch")) txSearch ; textField -tx "" tfSearch ; text -l (uiRes("m_cMuscleBuilder.kReplace")) txReplace ; textField -tx "" tfReplace ; popupMenu -p tfSearch pmSearch ; menuItem -l (uiRes("m_cMuscleBuilder.kSearchNone")) -c ("textField -e -tx \"\" tfSearch; textField -e -tx \"\" tfReplace; radioButtonGrp -e -sl 1 rbgMirrorMus ;") ; menuItem -l "Lf" -c ("textField -e -tx \"Lf\" tfSearch; textField -e -tx \"Rt\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "Rt" -c ("textField -e -tx \"Rt\" tfSearch; textField -e -tx \"Lf\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "Lt" -c ("textField -e -tx \"Lt\" tfSearch; textField -e -tx \"Rt\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "Rt" -c ("textField -e -tx \"Rt\" tfSearch; textField -e -tx \"Lt\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "_L" -c ("textField -e -tx \"_L\" tfSearch; textField -e -tx \"_R\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "_R" -c ("textField -e -tx \"_R\" tfSearch; textField -e -tx \"_L\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "Left" -c ("textField -e -tx \"Left\" tfSearch; textField -e -tx \"Right\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; menuItem -l "Right" -c ("textField -e -tx \"Right\" tfSearch; textField -e -tx \"Left\" tfReplace; radioButtonGrp -e -sl 2 rbgMirrorMus ;") ; separator sepFin2 ; button -l (uiRes("m_cMuscleBuilder.kConvertToMuscle")) -c ("cMBld_finishModel();") -ann (uiRes("m_cMuscleBuilder.kConvertToMuscleAnnot")) btnMakeMuscle ; formLayout -e -af rbgDef "top" 5 -an rbgDef "bottom" -af rbgDef "left" 0 -af rbgDef "right" 0 -ac isgCtrls "top" 5 rbgDef -an isgCtrls "bottom" -af isgCtrls "left" 0 -an isgCtrls "right" -ac omCtrlType "top" 5 rbgDef -an omCtrlType "bottom" -ac omCtrlType "left" 5 isgCtrls -af omCtrlType "right" 0 -ac sepFin1 "top" 5 omCtrlType -an sepFin1 "bottom" -af sepFin1 "left" 0 -af sepFin1 "right" 0 -ac rbgMirrorMus "top" 5 sepFin1 -an rbgMirrorMus "bottom" -af rbgMirrorMus "left" 5 -af rbgMirrorMus "right" 5 -ac txSearch "top" 8 rbgMirrorMus -an txSearch "bottom" -af txSearch "left" 5 -an txSearch "right" -ac tfSearch "top" 5 rbgMirrorMus -an tfSearch "bottom" -ac tfSearch "left" 5 txSearch -ap tfSearch "right" 0 50 -ac txReplace "top" 8 rbgMirrorMus -an txReplace "bottom" -ap txReplace "left" 0 50 -an txReplace "right" -ac tfReplace "top" 5 rbgMirrorMus -an tfReplace "bottom" -ac tfReplace "left" 5 txReplace -af tfReplace "right" 5 -ac sepFin2 "top" 5 tfSearch -an sepFin2 "bottom" -af sepFin2 "left" 0 -af sepFin2 "right" 0 -ac btnMakeMuscle "top" 5 sepFin2 -an btnMakeMuscle "bottom" -af btnMakeMuscle "left" 5 -af btnMakeMuscle "right" 5 finalizeForm ; // Muscle Parameters Tab // scrollLayout -cr 1 -p bldTabs paramsScroll ; formLayout muscleForm ; tabLayout -e -tabLabelIndex 4 (uiRes("m_cMuscleBuilder.kMuscleParameters")) bldTabs ; checkBox -l (uiRes("m_cMuscleBuilder.kRealtimeUpdate")) -v 1 cbRealtime ; // MuscleObjct FRAME frameLayout -l (uiRes("m_cMuscleBuilder.kMuscleObjectSettings")) -cl 0 -cll 1 -cc ("cMBld_widgetBuildWindow();") -ec ("cMBld_widgetBuildWindow();") frameMO ; formLayout frameMOForm ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kStickyStrength")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 100.0 -value 1.0 -pre 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,1);") -dc ("cMBld_realtimeUpdate(2,1);") fsgStr ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kFat")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1000.0 -value 0.1 -pre 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,2);") -dc ("cMBld_realtimeUpdate(2,2);") fsgFat ; checkBox -l (uiRes("m_cMuscleBuilder.kReverseNormals")) -v 0 -cc ("cMBld_realtimeUpdate(2,3);") cbRevNormals ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kRadius")) -field true -minValue 0.0 -maxValue 10.0 -fieldMinValue 0.0 -fieldMaxValue 1000.0 -value 1.0 -pre 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,4);") -dc ("cMBld_realtimeUpdate(2,4);") fsgRadius ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kLength")) -field true -minValue 0.0 -maxValue 10.0 -fieldMinValue 0.0 -fieldMaxValue 1000.0 -value 1.0 -pre 3 -adj 3 -cw3 60 60 100 -cc ("cMBld_realtimeUpdate(2,5);") -dc ("cMBld_realtimeUpdate(2,5);") fsgLength ; optionMenu -l (uiRes("m_cMuscleBuilder.kCapsuleAxis")) -cc ("cMBld_realtimeUpdate(2,6);") omCapAxis ; menuItem -l (uiRes("m_cMuscleBuilder.kXAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kYAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kZAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kNegXAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kNegYAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kNegZAxis")) ; optionMenu -e -sl 2 omCapAxis ; optionMenu -l (uiRes("m_cMuscleBuilder.kShaded")) -cc ("cMBld_realtimeUpdate(2,7);") omShaded ; menuItem -l (uiRes("m_cMuscleBuilder.kShadedWireframeOnly")) ; menuItem -l (uiRes("m_cMuscleBuilder.kShadedShaded")) ; menuItem -l (uiRes("m_cMuscleBuilder.kShadedWireframeAndShaded")) ; optionMenu -e -sl 2 omShaded ; optionMenu -l (uiRes("m_cMuscleBuilder.kDraw")) -cc ("cMBld_realtimeUpdate(2,8);") omDraw ; menuItem -l (uiRes("m_cMuscleBuilder.kDrawOff")) ; menuItem -l (uiRes("m_cMuscleBuilder.kDrawFat")) ; menuItem -l (uiRes("m_cMuscleBuilder.kDrawMuscle")) ; optionMenu -e -sl 1 omDraw ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kHighlightWire")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -value 1.0 -pre 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,9);") -dc ("cMBld_realtimeUpdate(2,9);") fsgHighlight ; colorSliderGrp -l "" -rgb 1.0 0.2 0.2 -h 18 -cw3 1 24 60 -adj 3 -cc ("cMBld_realtimeUpdate(2,10);") -dc ("cMBld_realtimeUpdate(2,10);") csgWireColor ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kHighlightShaded")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -value 1.0 -pre 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,11);") -dc ("cMBld_realtimeUpdate(2,11);") fsgHighlightShaded ; colorSliderGrp -l "" -rgb 0.7 0.2 0.25 -h 18 -cw3 1 24 60 -adj 3 -cc ("cMBld_realtimeUpdate(2,12);") -dc ("cMBld_realtimeUpdate(2,12);") csgShadeColor ; intSliderGrp -label (uiRes("m_cMuscleBuilder.kNSeg")) -field true -minValue 1 -maxValue 48 -fieldMinValue 1 -fieldMaxValue 1024 -value 3 -adj 3 -cw3 100 60 100 -cc ("cMBld_realtimeUpdate(2,13);") -dc ("cMBld_realtimeUpdate(2,13);") isgSeg ; intSliderGrp -label (uiRes("m_cMuscleBuilder.kNSides")) -field true -minValue 3 -maxValue 48 -fieldMinValue 3 -fieldMaxValue 1024 -value 12 -adj 3 -cw3 60 60 100 -cc ("cMBld_realtimeUpdate(2,14);") -dc ("cMBld_realtimeUpdate(2,14);") isgSides ; button -l (uiRes("m_cMuscleBuilder.kLoadSelected")) -c ("cMBld_readPresetFromSel(2);") -ann (uiRes("m_cMuscleBuilder.kLoadSelectedAnnot")) btnLoadSelMO ; button -l (uiRes("m_cMuscleBuilder.kApplyMuscleObjectValues")) -c ("cMBld_applyPreset(2,0);") -ann (uiRes("m_cMuscleBuilder.kApplyMuscleObjectValuesAnnot")) btnApplyMO ; formLayout -e -af fsgStr "top" 5 -an fsgStr "bottom" -af fsgStr "left" 5 -af fsgStr "right" 5 -ac fsgFat "top" 5 fsgStr -an fsgFat "bottom" -af fsgFat "left" 5 -ap fsgFat "right" 0 50 -ac cbRevNormals "top" 7 fsgStr -an cbRevNormals "bottom" -ap cbRevNormals "left" 20 50 -af cbRevNormals "right" 5 -ac fsgRadius "top" 5 fsgFat -an fsgRadius "bottom" -af fsgRadius "left" 5 -ap fsgRadius "right" 0 50 -ac fsgLength "top" 5 fsgFat -an fsgLength "bottom" -ap fsgLength "left" 0 50 -af fsgLength "right" 5 -ac omCapAxis "top" 5 fsgLength -an omCapAxis "bottom" -af omCapAxis "left" 10 -an omCapAxis "right" -ac omShaded "top" 5 omCapAxis -an omShaded "bottom" -af omShaded "left" 10 -an omShaded "right" -ac omDraw "top" 5 omCapAxis -an omDraw "bottom" -ac omDraw "left" 5 omShaded -af omDraw "right" 5 -ac fsgHighlight "top" 5 omDraw -an fsgHighlight "bottom" -af fsgHighlight "left" 5 -ap fsgHighlight "right" 0 75 -ac csgWireColor "top" 5 omDraw -an csgWireColor "bottom" -ap csgWireColor "left" 0 75 -af csgWireColor "right" 5 -ac fsgHighlightShaded "top" 5 fsgHighlight -an fsgHighlightShaded "bottom" -af fsgHighlightShaded "left" 5 -ap fsgHighlightShaded "right" 0 75 -ac csgShadeColor "top" 5 fsgHighlight -an csgShadeColor "bottom" -ap csgShadeColor "left" 0 75 -af csgShadeColor "right" 5 -ac isgSeg "top" 5 fsgHighlightShaded -an isgSeg "bottom" -af isgSeg "left" 5 -ap isgSeg "right" 0 50 -ac isgSides "top" 5 fsgHighlightShaded -an isgSides "bottom" -ap isgSides "left" 0 50 -af isgSides "right" 5 -ac btnLoadSelMO "top" 5 isgSeg -af btnLoadSelMO "bottom" 5 -af btnLoadSelMO "left" 5 -ap btnLoadSelMO "right" 0 25 -ac btnApplyMO "top" 5 isgSeg -af btnApplyMO "bottom" 5 -ap btnApplyMO "left" 0 25 -af btnApplyMO "right" 5 frameMOForm ; setParent ".." ; setParent ".." ; // Stretch FRAME frameLayout -l (uiRes("m_cMuscleBuilder.kStretchVolumePresets")) -cl 0 -cll 1 -cc ("cMBld_widgetBuildWindow();") -ec ("cMBld_widgetBuildWindow();") frameStretch ; formLayout frameStretchForm ; button -l (uiRes("m_cMuscleBuilder.kStretchDefault")) -c ("cMBld_setPreset(4); cMBld_realtimeUpdate(0,0);") -ann (uiRes("m_cMuscleBuilder.kStretchDefaultAnnot")) btnStDef ; button -l (uiRes("m_cMuscleBuilder.kStretchSmall")) -c ("cMBld_setPreset(5); cMBld_realtimeUpdate(0,0);") -ann (uiRes("m_cMuscleBuilder.kStretchSmallAnnot")) btnStLight ; button -l (uiRes("m_cMuscleBuilder.kStretchMedium")) -c ("cMBld_setPreset(6); cMBld_realtimeUpdate(0,0);") -ann (uiRes("m_cMuscleBuilder.kStretchMediumAnnot")) btnStMed ; button -l (uiRes("m_cMuscleBuilder.kStretchLarge")) -c ("cMBld_setPreset(7); cMBld_realtimeUpdate(0,0);") -ann (uiRes("m_cMuscleBuilder.kStretchLargeAnnot")) btnStHeavy ; gridLayout -nc 4 -cw 80 -ch 24 gridStretch ; text -l "" ; text -l (uiRes("m_cMuscleBuilder.kStretchStart")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kStretchMid")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kStretchEnd")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kStretchSquashX")) -al "right" ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,1);") ffSquashXStart ; floatField -v 2.0 -cc ("cMBld_realtimeUpdate(0,2);") ffSquashXMid ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,3);") ffSquashXEnd ; text -l (uiRes("m_cMuscleBuilder.kStretchSquashZ")) -al "right" ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,4);") ffSquashZStart ; floatField -v 2.0 -cc ("cMBld_realtimeUpdate(0,5);") ffSquashZMid ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,6);") ffSquashZEnd ; text -l (uiRes("m_cMuscleBuilder.kStretchStretchX")) -al "right" ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,7);") ffStretchXStart ; floatField -v 0.5 -cc ("cMBld_realtimeUpdate(0,8);") ffStretchXMid ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,9);") ffStretchXEnd ; text -l (uiRes("m_cMuscleBuilder.kStretchStretchZ")) -al "right" ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,10);") ffStretchZStart ; floatField -v 0.5 -cc ("cMBld_realtimeUpdate(0,11);") ffStretchZMid ; floatField -v 1.0 -cc ("cMBld_realtimeUpdate(0,12);") ffStretchZEnd ; setParent ".." ; optionMenu -l (uiRes("m_cMuscleBuilder.kStretchUpAxis")) -cc ("cMBld_realtimeUpdate(0,13);") omUpAxis ; menuItem -l (uiRes("m_cMuscleBuilder.kStretchXAxis")) ; menuItem -l (uiRes("m_cMuscleBuilder.kStretchZAxis")) ; optionMenu -e -sl 1 omUpAxis ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kStretchAimStart")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -value 0.8 -pre 3 -adj 3 -cw3 79 60 100 -cc ("cMBld_realtimeUpdate(0,14);") -dc ("cMBld_realtimeUpdate(0,14);") fsgAimStart ; floatSliderGrp -label (uiRes("m_cMuscleBuilder.kStretchAimEnd")) -field true -minValue 0.0 -maxValue 1.0 -fieldMinValue 0.0 -fieldMaxValue 1.0 -value 0.8 -pre 3 -adj 3 -cw3 60 60 100 -cc ("cMBld_realtimeUpdate(0,15);") -dc ("cMBld_realtimeUpdate(0,15);") fsgAimEnd ; button -l (uiRes("m_cMuscleBuilder.kStretchLoadSelected")) -c ("cMBld_readPresetFromSel(0);") -ann (uiRes("m_cMuscleBuilder.kStretchLoadSelectedAnnot")) btnLoadSelStretch ; button -l (uiRes("m_cMuscleBuilder.kStretchApplyStretchValues")) -c ("cMBld_applyPreset(0,0);") -ann (uiRes("m_cMuscleBuilder.kStretchApplyStretchValuesAnnot")) btnApplyStretch ; formLayout -e -af btnStDef "top" 5 -an btnStDef "bottom" -af btnStDef "left" 5 -ap btnStDef "right" 0 25 -af btnStLight "top" 5 -an btnStLight "bottom" -ap btnStLight "left" 0 25 -ap btnStLight "right" 0 50 -af btnStMed "top" 5 -an btnStMed "bottom" -ap btnStMed "left" 0 50 -ap btnStMed "right" 0 75 -af btnStHeavy "top" 5 -an btnStHeavy "bottom" -ap btnStHeavy "left" 0 75 -af btnStHeavy "right" 5 -ac gridStretch "top" 5 btnStDef -an gridStretch "bottom" -af gridStretch "left" 5 -af gridStretch "right" 5 -ac omUpAxis "top" 5 gridStretch -an omUpAxis "bottom" -af omUpAxis "left" 5 -an omUpAxis "right" -ac fsgAimStart "top" 5 omUpAxis -an fsgAimStart "bottom" -af fsgAimStart "left" 5 -ap fsgAimStart "right" 0 50 -ac fsgAimEnd "top" 5 omUpAxis -an fsgAimEnd "bottom" -ap fsgAimEnd "left" 0 50 -af fsgAimEnd "right" 5 -ac btnLoadSelStretch "top" 5 fsgAimStart -af btnLoadSelStretch "bottom" 5 -af btnLoadSelStretch "left" 5 -ap btnLoadSelStretch "right" 0 25 -ac btnApplyStretch "top" 5 fsgAimStart -af btnApplyStretch "bottom" 5 -ap btnApplyStretch "left" 0 25 -af btnApplyStretch "right" 5 frameStretchForm ; setParent ".." ; setParent ".." ; // Spline FRAME frameLayout -l (uiRes("m_cMuscleBuilder.kSplineLengthSettings")) -cl 0 -cll 1 -cc ("cMBld_widgetBuildWindow();") -ec ("cMBld_widgetBuildWindow();") frameSpline ; formLayout frameSplineForm ; button -l (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsDefault")) -c ("cMBld_setSplineDefLength(0);") -ann (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsDefaultAnnot")) btnSetDefault ; button -l (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsSquash")) -c ("cMBld_setSplineDefLength(1);") -ann (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsSquashAnnot")) btnSetSquash ; button -l (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsStretch")) -c ("cMBld_setSplineDefLength(2);") -ann (uiRes("m_cMuscleBuilder.kSplineSetCurrentAsStretchAnnot")) btnSetStretch ; formLayout -e -af btnSetDefault "top" 5 -af btnSetDefault "bottom" 5 -af btnSetDefault "left" 5 -ap btnSetDefault "right" 0 33 -af btnSetSquash "top" 5 -af btnSetSquash "bottom" 5 -ap btnSetSquash "left" 0 33 -ap btnSetSquash "right" 0 66 -af btnSetStretch "top" 5 -af btnSetStretch "bottom" 5 -ap btnSetStretch "left" 0 66 -af btnSetStretch "right" 5 frameSplineForm ; setParent ".." ; setParent ".." ; // Jiggle FRAME frameLayout -l (uiRes("m_cMuscleBuilder.kJigglePresets")) -cl 0 -cll 1 -cc ("cMBld_widgetBuildWindow();") -ec ("cMBld_widgetBuildWindow();") frameJiggle ; formLayout frameJiggleForm ; button -l (uiRes("m_cMuscleBuilder.kJiggleDefault")) -c ("cMBld_setPreset(0); cMBld_realtimeUpdate(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleDefaultAnnot")) btnJigDef ; button -l (uiRes("m_cMuscleBuilder.kJiggleLight")) -c ("cMBld_setPreset(1); cMBld_realtimeUpdate(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleLightAnnot")) btnJigLight ; button -l (uiRes("m_cMuscleBuilder.kJiggleMedium")) -c ("cMBld_setPreset(2); cMBld_realtimeUpdate(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleMediumAnnot")) btnJigMed ; button -l (uiRes("m_cMuscleBuilder.kJiggleHeavy")) -c ("cMBld_setPreset(3); cMBld_realtimeUpdate(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleHeavyAnnot")) btnJigHeavy ; button -l (uiRes("m_cMuscleBuilder.kJiggleOff")) -c ("cMBld_setPreset(8); cMBld_realtimeUpdate(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleOffAnnot")) btnJigDisable ; gridLayout -nc 4 -cw 80 -ch 24 gridJiggle ; text -l "" ; text -l (uiRes("m_cMuscleBuilder.kJiggleStart")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kJiggleMid")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kJiggleEnd")) -fn "boldLabelFont" ; text -l (uiRes("m_cMuscleBuilder.kJiggleJiggle")) -al "right" ; floatField -v 0.0 -cc ("cMBld_realtimeUpdate(1,1);") ffJiggleStart ; floatField -v 0.0 -cc ("cMBld_realtimeUpdate(1,2);") ffJiggleMid ; floatField -v 0.0 -cc ("cMBld_realtimeUpdate(1,3);") ffJiggleEnd ; text -l (uiRes("m_cMuscleBuilder.kJiggleCycle")) -al "right" ; floatField -v 12.0 -cc ("cMBld_realtimeUpdate(1,4);") ffCycleStart ; floatField -v 12.0 -cc ("cMBld_realtimeUpdate(1,5);") ffCycleMid ; floatField -v 12.0 -cc ("cMBld_realtimeUpdate(1,6);") ffCycleEnd ; text -l (uiRes("m_cMuscleBuilder.kJiggleReset")) -al "right" ; floatField -v 24.0 -cc ("cMBld_realtimeUpdate(1,7);") ffRestStart ; floatField -v 24.0 -cc ("cMBld_realtimeUpdate(1,8);") ffRestMid ; floatField -v 24.0 -cc ("cMBld_realtimeUpdate(1,9);") ffRestEnd ; setParent ".." ; rowColumnLayout -nc 2 -cw 1 160 -cw 2 70 rcDampSq ; text -l (uiRes("m_cMuscleBuilder.kJiggleDampenOnSquash")) -al "right" ; floatField -v 0.75 -cc ("cMBld_realtimeUpdate(1,10);") ffDampSq ; setParent ".." ; rowColumnLayout -nc 2 -cw 1 160 -cw 2 70 rcDampSt ; text -l (uiRes("m_cMuscleBuilder.kJiggleDampenOnStretch")) -al "right" ; floatField -v 0.75 -cc ("cMBld_realtimeUpdate(1,11);") ffDampSt ; setParent ".." ; button -l (uiRes("m_cMuscleBuilder.kJiggleLoadSelected")) -c ("cMBld_readPresetFromSel(1);") -ann (uiRes("m_cMuscleBuilder.kJiggleLoadSelectedAnnot")) btnLoadSelJiggle ; button -l (uiRes("m_cMuscleBuilder.kJiggleApplyJiggleValues")) -c ("cMBld_applyPreset(1,0);") -ann (uiRes("m_cMuscleBuilder.kJiggleApplyJiggleValuesAnnot")) btnApplyJiggle ; formLayout -e -af btnJigDef "top" 5 -an btnJigDef "bottom" -af btnJigDef "left" 5 -ap btnJigDef "right" 0 20 -af btnJigLight "top" 5 -an btnJigLight "bottom" -ap btnJigLight "left" 0 20 -ap btnJigLight "right" 0 40 -af btnJigMed "top" 5 -an btnJigMed "bottom" -ap btnJigMed "left" 0 40 -ap btnJigMed "right" 0 60 -af btnJigHeavy "top" 5 -an btnJigHeavy "bottom" -ap btnJigHeavy "left" 0 60 -ap btnJigHeavy "right" 0 80 -af btnJigDisable "top" 5 -an btnJigDisable "bottom" -ap btnJigDisable "left" 0 80 -af btnJigDisable "right" 5 -ac gridJiggle "top" 5 btnJigDef -an gridJiggle "bottom" -af gridJiggle "left" 5 -af gridJiggle "right" 5 -ac rcDampSq "top" 5 gridJiggle -an rcDampSq "bottom" -af rcDampSq "left" 5 -af rcDampSq "right" 5 -ac rcDampSt "top" 5 rcDampSq -an rcDampSt "bottom" -af rcDampSt "left" 5 -af rcDampSt "right" 5 -ac btnLoadSelJiggle "top" 5 rcDampSt -af btnLoadSelJiggle "bottom" 5 -af btnLoadSelJiggle "left" 5 -ap btnLoadSelJiggle "right" 0 25 -ac btnApplyJiggle "top" 5 rcDampSt -af btnApplyJiggle "bottom" 5 -ap btnApplyJiggle "left" 0 25 -af btnApplyJiggle "right" 5 frameJiggleForm ; setParent ".." ; setParent ".." ; // Copy/Paste FRAME frameLayout -l (uiRes("m_cMuscleBuilder.kCopyPasteMuscleSettings")) -cl 0 -cll 1 -cc ("cMBld_widgetBuildWindow();") -ec ("cMBld_widgetBuildWindow();") frameCopyPaste ; formLayout frameCopyPasteForm ; button -l (uiRes("m_cMuscleBuilder.kCopyPasteCopyFromSelection")) -c ("cMBld_copyValues();") -ann (uiRes("m_cMuscleBuilder.kCopyPasteCopyFromSelectionAnnot")) btnCopy ; button -l (uiRes("m_cMuscleBuilder.kCopyPastePasteToSelected")) -c ("cMBld_pasteValues();") -ann (uiRes("m_cMuscleBuilder.kCopyPastePasteToSelectedAnnot")) btnPaste ; formLayout -e -af btnCopy "top" 5 -af btnCopy "bottom" 5 -af btnCopy "left" 5 -ap btnCopy "right" 0 50 -af btnPaste "top" 5 -af btnPaste "bottom" 5 -ap btnPaste "left" 0 50 -af btnPaste "right" 5 frameCopyPasteForm ; setParent ".." ; setParent ".." ; // Main parameters form: // formLayout -e -af cbRealtime "top" 5 -an cbRealtime "bottom" -af cbRealtime "left" 5 -af cbRealtime "right" 5 -ac frameMO "top" 5 cbRealtime -an frameMO "bottom" -af frameMO "left" 5 -af frameMO "right" 5 -ac frameStretch "top" 5 frameMO -an frameStretch "bottom" -af frameStretch "left" 5 -af frameStretch "right" 5 -ac frameSpline "top" 5 frameStretch -an frameSpline "bottom" -af frameSpline "left" 5 -af frameSpline "right" 5 -ac frameJiggle "top" 5 frameSpline -an frameJiggle "bottom" -af frameJiggle "left" 5 -af frameJiggle "right" 5 -ac frameCopyPaste "top" 5 frameJiggle -an frameCopyPaste "bottom" -af frameCopyPaste "left" 5 -af frameCopyPaste "right" 5 muscleForm ; showWindow cMuscleBuilderWin ; /* cMBld_widgetBuildWindow(); */ scriptJob -p cMuscleBuilderWin -uiDeleted "cMuscleBuilderWin" "cMBld_CBQuit" ; scriptJob -p cMuscleBuilderWin -event "SelectionChanged" "cMBld_CBSelChanged" ; scriptJob -p cMuscleBuilderWin -event "NewSceneOpened" "deleteUI -wnd cMuscleBuilderWin; evalDeferred(\"cMuscleBuilder\"); " ; scriptJob -p cMuscleBuilderWin -event "SceneOpened" "deleteUI -wnd cMuscleBuilderWin; evalDeferred(\"cMuscleBuilder\"); " ; cMBld_setupBuildUI() ; // Make build controls work cMBld_setupCrossSectionUI() ; cMBld_CBSelChanged(); // Update param stuff // If MAC widget the controls so that the layout draws correctly. if (`about -macOS`) { tabLayout -e -selectTabIndex 2 bldTabs ; tabLayout -e -selectTabIndex 1 bldTabs ; } } // -------------------------------------------------------------------------- /* * cMBld_CBTabChanged() - Called when user picsk a tab */ global proc cMBld_CBTabChanged() { int $tabIdx = `tabLayout -q -selectTabIndex bldTabs`; if ($tabIdx == 2) // If we just changed to cross section, try to make sure stuff is fit nice. cMBld_setupCrossSectionUI() ; } // -------------------------------------------------------------------------- /* * cMBld_CBSelChanged() - Called when sel changed */ global proc cMBld_CBSelChanged() { int $rt = `checkBox -q -v cbRealtime` ; // If realtime, try to do a load sel for each area... if ($rt) { cMBld_readPresetFromSel(0) ; cMBld_readPresetFromSel(1) ; cMBld_readPresetFromSel(2) ; } } // -------------------------------------------------------------------------- /* * cMBld_widgetBuildWindow() - Hack to make forms update ok. */ global proc cMBld_widgetBuildWindow() { // Make form update properly...windows maya bug. if (!`window -q -ex cMuscleBuilderWin`) return ; int $w = `window -q -w cMuscleBuilderWin` ; window -e -w ($w+1) cMuscleBuilderWin ; window -e -w $w cMuscleBuilderWin ; } // -------------------------------------------------------------------------- /* * cMBld_updateFinalizeUI() - Called to make ui update nicely based on settings */ global proc cMBld_updateFinalizeUI() { int $mode = `radioButtonGrp -q -sl rbgDef` ; if ($mode == 1) // cMuscleSplineDeformer { intSliderGrp -e -en true isgCtrls ; optionMenu -e -en true omCtrlType ; } else if ($mode ==2) // cMuscleStretch { intSliderGrp -e -en false isgCtrls ; optionMenu -e -en false omCtrlType ; } } // -------------------------------------------------------------------------- /* * cMBld_loadSel() - Load sel items into a textfield */ global proc cMBld_loadSel(string $tf) { string $objs[] = `ls -sl`; textField -e -tx $objs[0] $tf ; } // -------------------------------------------------------------------------- /* * cMBld_build() - Main Builder Proc */ global proc cMBld_build() { string $o1 = `textField -q -tx tfAttach1`; string $o2 = `textField -q -tx tfAttach2`; int $nSpans = `intSliderGrp -q -v isgSpans`; int $nSegs = `intSliderGrp -q -v isgSegs`; if ($o1 == $o2 || objExists($o1) != true || objExists($o2) != true) { return ; } // Delete any old stuff we generated. cMBld_delete(1) ; // Go to current display layer default..thanks to Jason Parks! setAttr layerManager.currentDisplayLayer 0; float $len = cMBld_objDist($o1, $o2) ; //print ("// DEBUG: $len="+$len+" //\n"); // Generate Curves // string $crvs[] ; clear $crvs ; float $deltaY = $len / ($nSpans-1) ; float $curY = 0.0 ; float $mIdx = ($nSpans-1.0) / 2.0 ; // Treat as a float to get proper calc! float $avgRad = $len / 10.0 ; // Overall...how big a round? 1/10 length is good default int $i; for ($i=0; $i < $nSpans; ++$i) { float $pct = abs(($mIdx - $i) / $mIdx) ; // How far 0-1 from middle? $pct = 1.0 - ($pct*$pct) ; // x = 1.0 - x^2 ; To make it smooth up/down // Ensure tips are zero if ($i == 0 || $i == $nSpans-1) $pct = 0.0 ; float $rad = $avgRad * $pct ; // Make actual crossSection string $c[] = `circle -c 0 0 0 -nr 0 1 0 -sw 360 -r $rad -d 3 -ut 0 -tol 0.01 -s $nSegs -ch 1 -n ("cMuscleBuilder_crv#")`; $crvs[$i] = $c[0] ; // Set color on shape node. string $shapes[] = `listRelatives -shapes -ni $crvs[$i]` ; catch(`setAttr ($shapes[0]+".overrideEnabled") 1 `); catch(`setAttr ($shapes[0]+".overrideColor") 17 `); // Move it up right amount. xform -r -ws -t 0 $curY 0 $crvs[$i] ; $curY += $deltaY ; } // Build surface string $surfs[] = `loft -ch 1 -u 1 -c 0 -ar 1 -d 3 -ss 1 -rn 0 -po 0 -rsn true -n ("cMuscleBuilder_surf#") $crvs` ; string $surf = $surfs[0] ; // If material doesn't exist...make one. // if (objExists("matMuscleBuilder") != true) { string $mat = `shadingNode -asShader blinn`; $mat = `rename $mat ("matMuscleBuilder")`; sets -renderable true -noSurfaceShader true -empty -name ($mat+"SG") ; connectAttr -f ($mat+".outColor") ($mat+"SG.surfaceShader") ; setAttr ($mat+".color") -type double3 0.82 0.20 0.0 ; setAttr ($mat+".specularColor") -type double3 0.75 0.5 0.55 ; setAttr ($mat+".reflectivity") 0.0 ; setAttr ($mat+".specularRollOff") 0.25 ; setAttr ($mat+".eccentricity") 0.60 ; } // Apply material select -r $surf ; sets -e -forceElement ("matMuscleBuilderSG"); // Make it have a Red wireframe color. setAttr ($surf+".overrideEnabled") 1 ; setAttr ($surf+".overrideColor") 13 ; // Make the aim locators string $locs[]; $locs = `spaceLocator -n ("cMuscleBuilder_locAimStart")`; string $locAimStart = $locs[0] ; $locs = `spaceLocator -n ("cMuscleBuilder_locAimEnd")`; string $locAimEnd = $locs[0] ; // and reader grp string $grpLen = `group -em -w -n ("cMuscleBuilder_grpLen")`; addAttr -ln "width" -k 1 -dv ($avgRad) $grpLen ; addAttr -ln "falloff" -k 1 -dv (1.0) -min 0.0 -max 1.0 $grpLen ; // parent parent $locAimStart $o1 ; parent $locAimEnd $o2 ; parent $grpLen $locAimStart ; // Parent up crvs...this will make them along proper direction we are about to do. parent $crvs $locAimStart ; // zero which will make them at the same spot as the parent cMBld_zeroXForm($locAimStart) ; cMBld_zeroXForm($locAimEnd) ; // Setup the aims... // We'll pick an up vector based on if it looks like we are horizontal or vertical mode. // float $pos1[3] = `xform -q -ws -rp $o1`; float $pos2[3] = `xform -q -ws -rp $o2` ; float $magV = abs($pos2[1] - $pos1[1]) ; float $magH = (abs($pos2[0] - $pos1[0]) + abs($pos2[2] - $pos1[2])) ; float $upV[3] = {0.0, 1.0, 0.0} ; if ($magV > $magH) $upV = {0.0, 0.0, -1.0} ; // xform -ws -a -t $pos1[0] $pos1[1] $pos1[2] $locAimStart ; // xform -ws -a -t $pos2[0] $pos2[1] $pos2[2] $locAimEnd ; // print ("$magV="+$magV+" $magH="+$magH+" \n"); aimConstraint -w 1 -aim 0 1 0 -u 0 0 1 -wu $upV[0] $upV[1] $upV[2] -wut "vector" -n ("cMuscleBuilder_aimCons#") $locAimEnd $locAimStart ; aimConstraint -w 1 -aim 0 -1 0 -u 0 0 1 -wu $upV[0] $upV[1] $upV[2] -wut "vector" -n ("cMuscleBuilder_aimCons#") $locAimStart $locAimEnd ; pointConstraint -w 1 $locAimEnd $grpLen ; // Make len reader. // Make expression to drive curve lengths as needed when loc lens change. string $exp=""; $exp += ("// expMuscleBuilder \n") ; $exp += ("// \n") ; $exp += ("float $len = "+$grpLen+".translateY ; // how far apart are loc? \n") ; $exp += ("float $avgRad = "+$grpLen+".width ; // What overall thickness? \n") ; $exp += ("float $fall = "+$grpLen+".falloff ; // What overall falloff? \n") ; $exp += ("// \n") ; $exp += ("// \n") ; for ($i=0; $i < $nSpans; ++$i) { $exp += ($crvs[$i]+".translateY = $len * "+(1.0*$i/($nSpans-1))+" ; \n") ; float $pct = abs(($mIdx - $i) / $mIdx) ; // How far 0-1 from middle? // $pct = 1.0 - ($pct*$pct) ; // x = 1.0 - x^2 ; To make it smooth up/down $pct = 1.0 - (($pct*$pct)*(3.0 - (2.0 * $pct))) ; // smoothstep $exp += ("float $pct = "+$pct+" ; \n") ; $exp += ("$pct = ((1.0-$fall) * $avgRad) + ($fall * $pct * $avgRad) ; \n") ; // Ensure tips are zero if ($i == 0 || $i == $nSpans-1) $exp += ("$pct = 0.0 ; \n") ; $exp += ($crvs[$i]+".scaleX = $pct ; \n") ; // $exp += ($crvs[$i]+".scaleY = 1.0 ; \n") ; $exp += ($crvs[$i]+".scaleZ = $pct ; \n") ; setAttr -l true ($crvs[$i]+".scaleY") ; } $exp += ("// \n") ; expression -n "expMuscleBuilder" -s $exp ; // Set default to match controls existing value... setAttr ($locAimStart+".translateY") `floatSliderGrp -q -v fsgAt1` ; setAttr ($locAimStart+".translateX") `floatSliderGrp -q -v fsgOffX1` ; setAttr ($locAimStart+".translateZ") `floatSliderGrp -q -v fsgOffZ1` ; setAttr ($locAimEnd+".translateY") `floatSliderGrp -q -v fsgAt2` ; setAttr ($locAimEnd+".translateX") `floatSliderGrp -q -v fsgOffX2` ; setAttr ($locAimEnd+".translateZ") `floatSliderGrp -q -v fsgOffZ2` ; setAttr ($grpLen+".width") `floatSliderGrp -q -v fsgWidth` ; setAttr ($grpLen+".falloff") `floatSliderGrp -q -v fsgFalloff` ; // Get camera to right place... string $cam = "MuscleBuilderCamera" ; string $pCons[] = `pointConstraint -w 1 -n ("cMuscleBuilder_pointConstraintCam#") $locAimStart $cam` ; string $oCons[] = `orientConstraint -w 1 -n ("cMuscleBuilder_orientConstraintCam#") $locAimStart $cam` ; setAttr ($oCons[0]+".offsetX") 90.0 ; select -r $crvs ; viewFit -f 0.8 $cam ; // Get camera to right place... string $camSide = "MuscleBuilderCameraSide" ; $pCons = `pointConstraint -w 1 -n ("cMuscleBuilder_pointConstraintCamSide#") $locAimStart $camSide` ; $oCons = `orientConstraint -w 1 -n ("cMuscleBuilder_orientConstraintCamSide#") $locAimStart $camSide` ; setAttr ($oCons[0]+".offsetX") 90.0 ; setAttr ($oCons[0]+".offsetZ") 90.0 ; select -r $crvs ; viewFit -f 0.5 $cam ; cMBld_setupBuildUI() ; // Make build controls work cMBld_setupCrossSectionUI() ; // Setup cross section area } // -------------------------------------------------------------------------- /* * cMBld_delete() - Deletes any old loft/curves */ global proc cMBld_delete(int $bDelSurf) { string $surfs[] = `ls "cMuscleBuilder_surf*"`; if (size($surfs) > 0 && $bDelSurf) delete $surfs ; string $exps[] = `ls "expMuscleBuilder*"`; if (size($exps) > 0) delete $exps ; string $cons[] = `ls "cMuscleBuilder_*Constraint*"`; if (size($cons) > 0) delete $cons ; string $locs[] = `ls "cMuscleBuilder_locAim*"`; if (size($locs) > 0) delete $locs ; string $crvs[] = `ls "cMuscleBuilder_crv*"`; if (size($crvs) > 0) delete $crvs ; } // -------------------------------------------------------------------------- /* * cMBld_objDist() - Get dist between two objs */ global proc float cMBld_objDist(string $o1, string $o2) { float $p1[3] = `xform -q -ws -rp $o1` ; float $p2[3] = `xform -q -ws -rp $o2` ; float $dist = (($p2[0]-$p1[0])*($p2[0]-$p1[0])) + (($p2[1]-$p1[1])*($p2[1]-$p1[1])) + (($p2[2]-$p1[2])*($p2[2]-$p1[2])) ; $dist = sqrt($dist) ; return $dist; } // -------------------------------------------------------------------------- /* * cMBld_zeroXForm() - */ global proc cMBld_zeroXForm(string $obj) { setAttr ($obj+".translateX") 0.0 ; setAttr ($obj+".translateY") 0.0 ; setAttr ($obj+".translateZ") 0.0 ; setAttr ($obj+".rotateX") 0.0 ; setAttr ($obj+".rotateY") 0.0 ; setAttr ($obj+".rotateZ") 0.0 ; } // -------------------------------------------------------------------------- /* * cMBld_quit() - Quit proc callback */ global proc cMBld_CBQuit() { selectionConnection -e -clr isoConnMuscleBuilder ; modelEditor -e -vs 0 -mlc isoConnMuscleBuilder camPanelMuscleBuilder ; // turn off show selected cMBld_deleteCamera() ; } // -------------------------------------------------------------------------- /* * cMBld_deleteCamera() */ global proc cMBld_deleteCamera() { if (`objExists "MuscleBuilderCamera"`) // Delete cam if it exists delete "MuscleBuilderCamera"; if (`objExists "MuscleBuilderCameraSide"`) // Delete cam if it exists delete "MuscleBuilderCameraSide"; } // -------------------------------------------------------------------------- /* * cMBld_createCamera() - Makes the actual camera used... */ global proc cMBld_createCamera() { if (!`objExists "MuscleBuilderCamera"`) { string $objs[] = `ls -sl`; // store current selection string $newCameraName[] = `camera -orthographic 1 -orthographicWidth 3 -rot -90 0 0 -position 0 100 0 -n "MuscleBuilderCamera"`; rename $newCameraName[0] "MuscleBuilderCamera"; setAttr "MuscleBuilderCamera.visibility" 0; string $locAimStart = "cMuscleBuilder_locAimStart" ; if (objExists($locAimStart)) { // Get camera to right place... string $cam = "MuscleBuilderCamera" ; string $pCons[] = `pointConstraint -w 1 -n ("cMuscleBuilder_pointConstraintSurf#") $locAimStart $cam` ; string $oCons[] = `orientConstraint -w 1 -n ("cMuscleBuilder_orientConstraintSurf#") $locAimStart $cam` ; setAttr ($oCons[0]+".offsetX") 90.0 ; string $crvs[] = `ls "cMuscleBuilder_crv*"`; if (size($crvs) > 0) { select -r $crvs ; viewFit -f 0.8 $cam ; } } select -r $objs; // reselect original stuff } if (!`objExists "MuscleBuilderCameraSide"`) { string $objs[] = `ls -sl`; // store current selection string $newCameraName[] = `camera -orthographic 1 -orthographicWidth 3 -rot -90 0 0 -position 0 100 0 -n "MuscleBuilderCameraSide"`; rename $newCameraName[0] "MuscleBuilderCameraSide"; setAttr "MuscleBuilderCameraSide.visibility" 0; string $locAimStart = "cMuscleBuilder_locAimStart" ; string $locAimEnd = "cMuscleBuilder_locAimEnd" ; if (objExists($locAimStart)) { // Get camera to right place... string $cam = "MuscleBuilderCameraSide" ; string $pCons[] = `pointConstraint -w 1 -n ("cMuscleBuilder_pointConstraintSurf#") $locAimStart $locAimEnd $cam` ; string $oCons[] = `orientConstraint -w 1 -n ("cMuscleBuilder_orientConstraintSurf#") $locAimStart $cam` ; setAttr "MuscleBuilderCameraSide.rotatePivotZ" -50 ; setAttr "MuscleBuilderCameraSide.scalePivotZ" -50 ; setAttr ($oCons[0]+".offsetX") 90.0 ; setAttr ($oCons[0]+".offsetZ") 90.0 ; string $crvs[] = `ls "cMuscleBuilder_crv*"`; if (size($crvs) > 0) { select -r $crvs ; viewFit -f 0.5 $cam ; } } select -r $objs; // reselect original stuff } } // -------------------------------------------------------------------------- /* * cMBld_setupBuildUI() - Connect stuff for building ui */ global proc cMBld_setupBuildUI() { string $locAimStart = ("cMuscleBuilder_locAimStart") ; string $locAimEnd = ("cMuscleBuilder_locAimEnd") ; string $grpLen = ("cMuscleBuilder_grpLen") ; if (objExists($locAimStart) != true || objExists($locAimEnd) != true || objExists($grpLen) != true ) return ; string $par1[] = `listRelatives -parent $locAimStart` ; string $par2[] = `listRelatives -parent $locAimEnd` ; textField -e -tx $par1[0] tfAttach1 ; textField -e -tx $par2[0] tfAttach2 ; // Make controls work connectControl fsgAt1 ($locAimStart+".translateY") ; connectControl fsgOffX1 ($locAimStart+".translateX") ; connectControl fsgOffZ1 ($locAimStart+".translateZ") ; connectControl fsgAt2 ($locAimEnd+".translateY") ; connectControl fsgOffX2 ($locAimEnd+".translateX") ; connectControl fsgOffZ2 ($locAimEnd+".translateZ") ; connectControl fsgWidth ($grpLen+".width") ; connectControl fsgFalloff ($grpLen+".falloff") ; string $childs1[] = `listRelatives -children -ni -type "transform" -type "joint" $par1[0]`; string $childs2[] = `listRelatives -children -ni -type "transform" -type "joint" $par2[0]`; float $fDist1 = cMBld_objDist($par1[0], $childs1[0]) ; float $fDist2 = cMBld_objDist($par2[0], $childs2[0]) ; if ($fDist1 >= 1.0) { floatSliderGrp -e -max $fDist1 fsgAt1 ; floatSliderGrp -e -min (-0.5*$fDist1) -max (0.5*$fDist1) fsgOffX1 ; floatSliderGrp -e -min (-0.5*$fDist1) -max (0.5*$fDist1) fsgOffZ1 ; } if ($fDist2 >= 1.0) { floatSliderGrp -e -max $fDist2 fsgAt2 ; floatSliderGrp -e -min (-0.5*$fDist1) -max (0.5*$fDist1) fsgOffX2 ; floatSliderGrp -e -min (-0.5*$fDist1) -max (0.5*$fDist1) fsgOffZ2 ; } } // -------------------------------------------------------------------------- /* * cMBld_setupCrossSectionUI() - */ global proc cMBld_setupCrossSectionUI() { // Find curves string $crvs[] = `ls -type "transform" "cMuscleBuilder_crv*"`; int $nCrvs = size($crvs) ; textScrollList -e -removeAll tslEditSpan ; for ($i=0; $i < $nCrvs; ++$i) { string $curve = (uiRes("m_cMuscleBuilder.kCrossSectionCurve")); $curve = `format -stringArg ($i+1) $curve`; textScrollList -e -a $curve tslEditSpan ; } // Set up isolate view selectionConnection -e -clr isoConnMuscleBuilder ; for ($i=0; $i < $nCrvs; ++$i) selectionConnection -e -s $crvs[$i] isoConnMuscleBuilder ; if ($nCrvs > 0) { select -r $crvs ; viewFit -f 0.8 "MuscleBuilderCamera" ; viewFit -f 0.5 "MuscleBuilderCameraSide" ; select -cl ; } } // -------------------------------------------------------------------------- /* * cMBld_editCrossSection() - Called to begin edit on cross section */ global proc cMBld_editCrossSection() { global string $gMove ; // Find curves string $crvs[] = `ls -type "transform" "cMuscleBuilder_crv*"`; int $nCrvs = size($crvs) ; if ($nCrvs <= 0) return ; int $selCrvsIdxs[] = `textScrollList -q -selectIndexedItem tslEditSpan` ; // What text is chosen ? if (size($selCrvsIdxs) <= 0) return ; string $selCrvs[] ; clear $selCrvs ; for ($i=0; $i < size($selCrvsIdxs); ++$i) $selCrvs[$i] = $crvs[($selCrvsIdxs[$i]-1)] ; // Are we active? int $active = 0 ; if (`about -macOS`) $active = `checkBox -q -v btnEditSpan`; else $active = `iconTextCheckBox -q -v btnEditSpan`; if (!$active) { cMBld_editCrossSectionEnd() ; select -r $selCrvs ; return ; } hilite -u "*"; // Un-hilight anything first please select -cl ; select -r $selCrvs ; selectMode -component; hilite $selCrvs ; setToolTo $gMove ; setFocus camPanelMuscleBuilder ; // Set focus on this panel!!! $labelEditing = (uiRes("m_cMuscleBuilder.kEditing")); if (`about -macOS`) checkBox -e -l $labelEditing btnEditSpan ; else iconTextCheckBox -e -l $labelEditing btnEditSpan ; } // -------------------------------------------------------------------------- /* * cMBld_editCrossSectionEnd() - Called to begin edit on cross section */ global proc cMBld_editCrossSectionEnd() { global string $gMove ; hilite -u "*"; // Un-hilight anything first please select -cl ; selectMode -object ; setToolTo $gMove ; setFocus camPanelMuscleBuilder ; // Set focus on this panel!!! string $labelEditCrossSection = (uiRes("m_cMuscleBuilder.kEditCrossSection2")); if (`about -macOS`) checkBox -e -l $labelEditCrossSection btnEditSpan ; else iconTextCheckBox -e -l $labelEditCrossSection btnEditSpan ; } // -------------------------------------------------------------------------- /* * cMBld_finishModel() - */ global proc cMBld_finishModel() { string $ret ; // Get info on what objs exists etc... // string $surfs[] = `ls "cMuscleBuilder_surf*"`; if (size($surfs) <= 0 || $surfs[0] == "") return ; string $locAimStart = ("cMuscleBuilder_locAimStart") ; string $locAimEnd = ("cMuscleBuilder_locAimEnd") ; string $grpLen = ("cMuscleBuilder_grpLen") ; if (objExists($locAimStart) != true || objExists($locAimEnd) != true || objExists($grpLen) != true ) return ; // Read User Settings from UI int $defMode = `radioButtonGrp -q -sl rbgDef` ; // 1=spl 2=st int $nControls = `intSliderGrp -q -v isgCtrls` ; string $controlType = (controlType_uiToMel(`optionMenu -q -v omCtrlType`)) ; int $nMirrorIdx = (`radioButtonGrp -q -sl rbgMirrorMus`-1) ; // 0=no 1=X 2=Y 3=Z float $multMirror[3] = {1.0, 1.0, 1.0} ; if ($nMirrorIdx >= 1) $multMirror[$nMirrorIdx-1] = -1.0 ; string $search = `textField -q -tx tfSearch` ; string $replace = `textField -q -tx tfReplace` ; string $labelOK = (uiRes("m_cMuscleBuilder.kOK")); string $labelCancel = (uiRes("m_cMuscleBuilder.kCancel")); // "Mus" is the default node name for the new muscle. // $ret = `promptDialog -title (uiRes("m_cMuscleBuilder.kMuscleBuilderWarning")) -message (uiRes("m_cMuscleBuilder.kThisOperationWillFinalizeModelChanges")) -tx "Mus" -button $labelOK -button $labelCancel -defaultButton $labelOK -cancelButton $labelCancel -dismissString $labelCancel `; if ($ret != $labelOK) return ; string $name = `promptDialog -q -tx`; if ($name == "") $name = "Mus#" ; //$name = capitalizeString($name) ; string $nameMirror = cMuscle_strSearchReplace($name, $search, $replace) ; // Store data on start/end locations so we can adjust stretch locs to right spot. // float $pos1[3] = `xform -q -ws -rp $locAimStart` ; float $pos2[3] = `xform -q -ws -rp $locAimEnd` ; float $posMid[3] = { (($pos2[0]+$pos1[0])/2.0), (($pos2[1]+$pos1[1])/2.0), (($pos2[2]+$pos1[2])/2.0) } ; float $pos1Mirror[3] ; float $pos2Mirror[3] ; float $posMidMirror[3] ; for ($i=0; $i <= 2; ++$i) { $pos1Mirror[$i] = $pos1[$i] * $multMirror[$i] ; $pos2Mirror[$i] = $pos2[$i] * $multMirror[$i] ; $posMidMirror[$i] = $posMid[$i] * $multMirror[$i] ; } // Store parents string $par1[] = `listRelatives -parent $locAimStart` ; string $parStart = $par1[0] ; string $par2[] = `listRelatives -parent $locAimEnd` ; string $parEnd = $par2[0] ; string $parStartMirror = cMuscle_strSearchReplace($parStart, $search, $replace) ; string $parEndMirror = cMuscle_strSearchReplace($parEnd, $search, $replace) ; cMBld_delete(0) ; // Delete all model history on the thing... // Make NURBS range 0..1 just to be nice. rebuildSurface -ch 0 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 1 -kc 0 -su 4 -du 3 -sv 4 -dv 3 -tol 0.01 -fr 0 -dir 2 $surfs[0] ; string $surf = `rename $surfs[0] $name` ; // rename! string $surfMirror = "" ; if ($nMirrorIdx >= 1) // Mirror geo! { string $surfMirrors[] = `duplicate -rr -rc $surf` ; $surfMirror = `rename $surfMirrors[0] $nameMirror`; select -r ($surfMirror+".cv[*]") ; scale -r -p 0 0 0 $multMirror[0] $multMirror[1] $multMirror[2] ; select -cl ; } select -r $surf ; if ($nMirrorIdx >= 1) select -add $surfMirror ; if (objExists("setMUSCLERIGS") != true) sets -em -n "setMUSCLERIGS" ; string $setRig = ("set"+$name+"RIG") ; if (objExists($setRig) != true) { sets -em -n $setRig ; sets -include "setMUSCLERIGS" $setRig ; } string $setRigMirror = "" ; if ($nMirrorIdx >= 1) { $setRigMirror = ("set"+$nameMirror+"RIG") ; if (objExists($setRigMirror) != true) { sets -em -n $setRigMirror ; sets -include "setMUSCLERIGS" $setRigMirror ; } } // Set up deformation // if ($defMode == 2) // cMuscleStretch { // Apply stretch! select -r $surf ; string $stretch[] = cMuscle_setupStretch() ; xform -a -ws -t $pos1[0] $pos1[1] $pos1[2] $stretch[1] ; // Start xform -a -ws -t $pos2[0] $pos2[1] $pos2[2] $stretch[3] ; // End // xform -a -ws -t $posMid[0] $posMid[1] $posMid[2] $stretch[2] ; // Mid xform -a -ws -t $pos1[0] $pos1[1] $pos1[2] $stretch[4] ; // Start Base xform -a -ws -t $pos2[0] $pos2[1] $pos2[2] $stretch[6] ; // End Base xform -a -ws -t $posMid[0] $posMid[1] $posMid[2] $stretch[5] ; // Mid Base // Now insert and snap FRZ grp to main real stretch locators... // so they are zero by default also...so orient constraint won't flip out // string $grpStartLocFRZ = `group -em -w -n ("grp"+$stretch[1]+"FRZ")` ; string $grpEndLocFRZ = `group -em -w -n ("grp"+$stretch[3]+"FRZ")` ; string $pars[] = `listRelatives -parent $stretch[1]` ; parent $grpStartLocFRZ $grpEndLocFRZ $pars[0] ; cMBld_snap($stretch[1], $grpStartLocFRZ, 1, 1) ; cMBld_snap($stretch[3], $grpEndLocFRZ, 1, 1) ; parent $stretch[1] $grpStartLocFRZ ; parent $stretch[3] $grpEndLocFRZ ; sets -in $setRig $grpStartLocFRZ $grpEndLocFRZ ; // And now setup the insertion. cMBld_setupInsertion($name, $stretch[0], "", $stretch[1], $stretch[3], $parStart, $parEnd, $setRig) ; if ($nMirrorIdx >= 1) { // Apply stretch! select -r $surfMirror ; string $stretchMirror[] = cMuscle_setupStretch() ; xform -a -ws -t $pos1Mirror[0] $pos1Mirror[1] $pos1Mirror[2] $stretchMirror[1] ; // Start xform -a -ws -t $pos2Mirror[0] $pos2Mirror[1] $pos2Mirror[2] $stretchMirror[3] ; // End // xform -a -ws -t $posMidMirror[0] $posMidMirror[1] $posMidMirror[2] $stretchMirror[2] ; // Mid xform -a -ws -t $pos1Mirror[0] $pos1Mirror[1] $pos1Mirror[2] $stretchMirror[4] ; // Start Base xform -a -ws -t $pos2Mirror[0] $pos2Mirror[1] $pos2Mirror[2] $stretchMirror[6] ; // End Base xform -a -ws -t $posMidMirror[0] $posMidMirror[1] $posMidMirror[2] $stretchMirror[5] ; // Mid Base // Now insert and snap FRZ grp to main real stretch locators... // so they are zero by default also...so orient constraint won't flip out // string $grpStartLocFRZ = `group -em -w -n ("grp"+$stretchMirror[1]+"FRZ")` ; string $grpEndLocFRZ = `group -em -w -n ("grp"+$stretchMirror[3]+"FRZ")` ; string $pars[] = `listRelatives -parent $stretchMirror[1]` ; parent $grpStartLocFRZ $grpEndLocFRZ $pars[0] ; cMBld_snap($stretchMirror[1], $grpStartLocFRZ, 1, 1) ; cMBld_snap($stretchMirror[3], $grpEndLocFRZ, 1, 1) ; parent $stretchMirror[1] $grpStartLocFRZ ; parent $stretchMirror[3] $grpEndLocFRZ ; sets -in $setRigMirror $grpStartLocFRZ $grpEndLocFRZ ; // And now setup the insertion. cMBld_setupInsertion($nameMirror, $stretchMirror[0], "", $stretchMirror[1], $stretchMirror[3], $parStartMirror, $parEndMirror, $setRigMirror) ; } } // end of muscle stretch def setup else if ($defMode == 1) // cMuscleSplineDeformer { string $ctrls[] ; // Apply spline deformer! string $splineDef = cMS_makeSplineDeformer($name, $nControls, $controlType, $ctrls, $surf, 0 ) ; string $spline = cMS_getSplineFromSplineDef($splineDef) ; // Now pretty much that sets all the stuff up, but we want the start/end controls // to be constrained to the joints.... // string $pars[] = `listRelatives -parent $ctrls[0]`; string $grpConsStart = $pars[0] ; $pars = `listRelatives -parent $ctrls[$nControls-1]`; string $grpConsEnd = $pars[0] ; cMBld_setupInsertion($name, $splineDef, $spline, $grpConsStart, $grpConsEnd, $parStart, $parEnd, $setRig) ; if ($nMirrorIdx >= 1) { string $ctrlsMirror[] ; // Apply spline deformer! string $splineDef = cMS_makeSplineDeformer($nameMirror, $nControls, $controlType, $ctrlsMirror, $surfMirror, 0 ) ; string $spline = cMS_getSplineFromSplineDef($splineDef) ; // Now pretty much that sets all the stuff up, but we want the start/end controls // to be constrained to the joints.... // string $pars[] = `listRelatives -parent $ctrlsMirror[0]`; string $grpConsStart = $pars[0] ; $pars = `listRelatives -parent $ctrlsMirror[$nControls-1]`; string $grpConsEnd = $pars[0] ; cMBld_setupInsertion($nameMirror, $splineDef, $spline, $grpConsStart, $grpConsEnd, $parStartMirror, $parEndMirror, $setRig) ; } } // end of muscle spline def setup. // Convert to muscle! (cMuscleObject) so it can be used in the system. // select -r $surf ; string $mOs[] = cMuscle_makeMuscle(0) ; string $mO = $mOs[0] ; if ($nMirrorIdx >= 1) { select -r $surfMirror ; string $mOsMirror[] = cMuscle_makeMuscle(0) ; string $mOMirror = $mOsMirror[0] ; } // End with nice selection select -r $surf ; if ($nMirrorIdx >= 1) select -add $surfMirror ; } //---------------------------------------------------------------------------- /* * cMBld_setupInsertion() - This will set up the insertion/attach points * For the given start/end movers to the given start/end objects. */ global proc cMBld_setupInsertion(string $name, string $def, string $spline, string $moverStart, string $moverEnd , string $parStart, string $parEnd, string $setRig) { // Now for some nicer rigging... // We'll make some groups at the Start-End. // First pair will be "stable" and just parented to the original parents. // The second will aim to each other. // Then we can orient the Start/End between these two and drive with an // attr to tell whether we want them to aim or be oriented to that location. string $grpStartFRZ = `group -em -w -n ("grpAttachStart"+$name+"FRZ")` ; string $grpEndFRZ = `group -em -w -n ("grpAttachEnd"+$name+"FRZ")` ; string $grpStableStart = `group -em -w -n ("grpStableStart"+$name)` ; string $grpStableEnd = `group -em -w -n ("grpStableEnd"+$name)` ; string $grpAimStart = `group -em -w -n ("grpAimStart"+$name)` ; string $grpAimEnd = `group -em -w -n ("grpAimEnd"+$name)` ; sets -in $setRig $grpStartFRZ $grpEndFRZ $grpStableStart $grpStableEnd $grpAimStart $grpAimEnd ; // Parent them up! parent $grpStartFRZ $parStart ; parent $grpEndFRZ $parEnd ; parent $grpStableStart $grpAimStart $grpStartFRZ ; parent $grpStableEnd $grpAimEnd $grpEndFRZ ; // Snap em! cMBld_snap($moverStart, $grpStartFRZ, 1, 1) ; cMBld_snap($moverStart, $grpStableStart, 1, 1) ; cMBld_snap($moverStart, $grpAimStart, 1, 1) ; cMBld_snap($moverEnd, $grpEndFRZ, 1, 1) ; cMBld_snap($moverEnd, $grpStableEnd, 1, 1) ; cMBld_snap($moverEnd, $grpAimEnd, 1, 1) ; // Set up aims string $aCons1[] = `aimConstraint -w 1 -aim 0 1 0 -u 1 0 0 -wu 1 0 0 -wut "objectrotation" -wuo $grpStableStart $grpAimEnd $grpAimStart` ; string $aCons2[] = `aimConstraint -w 1 -aim 0 -1 0 -u 1 0 0 -wu 1 0 0 -wut "objectrotation" -wuo $grpStableEnd $grpAimStart $grpAimEnd` ; sets -in $setRig $aCons1[0] $aCons2[0] ; // Now we can orient the real stretch locs between the stable and aim. string $pCons1[] = `pointConstraint -w 1 $grpStableStart $moverStart` ; string $o1s[] = `orientConstraint -w 1 $grpStableStart $grpAimStart $moverStart` ; // setAttr ($o1s[0]+".interpType") 0 ; // No-Flip orient constraint mode... setAttr ($o1s[0]+".interpType") 2 ; // Shortest orient constraint mode... sets -in $setRig $pCons1[0] $o1s[0] ; string $pCons2[] = `pointConstraint -w 1 $grpStableEnd $moverEnd` ; string $o2s[] = `orientConstraint -w 1 $grpStableEnd $grpAimEnd $moverEnd` ; // setAttr ($o2s[0]+".interpType") 0 ; // No-Flip orient constraint mode... setAttr ($o2s[0]+".interpType") 2 ; // Shortest orient constraint mode... sets -in $setRig $pCons2[0] $o2s[0] ; // Add drivers to stretch node addAttr -at "enum" -ln ("upAxis") -enumName "X-Axis=0:Z-Axis=1" -k 1 $def ; addAttr -ln ("aimStart") -dv 0.8 -min 0.0 -max 1.0 -k 1 $def ; addAttr -ln ("aimEnd") -dv 0.8 -min 0.0 -max 1.0 -k 1 $def ; // Do basic reverse and Connect to constraints string $rev = `createNode "reverse" -n ("reverseOrtCons"+$name)` ; sets -in $setRig $rev ; connectAttr -f ($def+".aimStart") ($rev+".inputX") ; connectAttr -f ($def+".aimEnd") ($rev+".inputZ") ; connectAttr -f ($rev+".outputX") ($o1s[0]+"."+$grpStableStart+"W0") ; connectAttr -f ($def+".aimStart") ($o1s[0]+"."+$grpAimStart+"W1") ; connectAttr -f ($rev+".outputZ") ($o2s[0]+"."+$grpStableEnd+"W0") ; connectAttr -f ($def+".aimEnd") ($o2s[0]+"."+$grpAimEnd+"W1") ; // Now drive the aims with the up info... string $blend = `createNode "blendColors" -n ("blendColorsMuscleAim"+$name)` ; sets -in $setRig $blend ; connectAttr -f ($def+".upAxis") ($blend+".blender") ; connectAttr -f ($blend+".output") ($aCons1[0]+".upVector") ; connectAttr -f ($blend+".output") ($aCons1[0]+".worldUpVector") ; connectAttr -f ($blend+".output") ($aCons2[0]+".upVector") ; connectAttr -f ($blend+".output") ($aCons2[0]+".worldUpVector") ; setAttr -type "float3" ($blend+".color1") 0 0 1 ; setAttr -type "float3" ($blend+".color2") 1 0 0 ; // Now if we have a splinedeformer, make its upAxis drive spline same way. if ($spline != "") connectAttr -f ($def+".upAxis") ($spline+".upAxis") ; } //---------------------------------------------------------------------------- /* * cMBld_snap() - Main snap that uses constraints */ global proc cMBld_snap(string $master, string $slave, int $doPos, int $doRot) { // constrain string $pConsp[], $oCons[]; if ($doPos) $pCons = `pointConstraint -w 1 $master $slave` ; if ($doRot) $oCons = `orientConstraint -w 1 $master $slave` ; refresh ; // delete constraints if ($doPos) delete $pCons ; if ($doRot) delete $oCons ; } // -------------------------------------------------------------------------- /* * cMBld_setPreset() - Set a preset */ global proc cMBld_setPreset(int $mode) { /* string $objs[] = `ls -sl` ; string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSs[] = `ls -type "cMuscleStretch" $hist` ; string $mS ; */ switch ($mode) { // Jiggle Values: // case 8: // OFF floatField -e -v 0.0 ffJiggleStart ; floatField -e -v 0.0 ffJiggleMid ; floatField -e -v 0.0 ffJiggleEnd ; break ; case 0: // default floatField -e -v 0.0 ffJiggleStart ; floatField -e -v 1.0 ffJiggleMid ; floatField -e -v 0.0 ffJiggleEnd ; floatField -e -v 12.0 ffCycleStart ; floatField -e -v 12.0 ffCycleMid ; floatField -e -v 12.0 ffCycleEnd ; floatField -e -v 24.0 ffRestStart ; floatField -e -v 24.0 ffRestMid ; floatField -e -v 24.0 ffRestEnd ; floatField -e -v 0.75 ffDampSq ; floatField -e -v 0.75 ffDampSt ; break ; case 1: // Light floatField -e -v 0.0 ffJiggleStart ; floatField -e -v 0.5 ffJiggleMid ; floatField -e -v 0.0 ffJiggleEnd ; floatField -e -v 5.0 ffCycleStart ; floatField -e -v 5.0 ffCycleMid ; floatField -e -v 5.0 ffCycleEnd ; floatField -e -v 8.0 ffRestStart ; floatField -e -v 8.0 ffRestMid ; floatField -e -v 8.0 ffRestEnd ; floatField -e -v 0.8 ffDampSq ; floatField -e -v 0.8 ffDampSt ; break ; case 2: // Med floatField -e -v 0.0 ffJiggleStart ; floatField -e -v 0.65 ffJiggleMid ; floatField -e -v 0.0 ffJiggleEnd ; floatField -e -v 8.0 ffCycleStart ; floatField -e -v 8.0 ffCycleMid ; floatField -e -v 8.0 ffCycleEnd ; floatField -e -v 10.0 ffRestStart ; floatField -e -v 10.0 ffRestMid ; floatField -e -v 10.0 ffRestEnd ; floatField -e -v 0.75 ffDampSq ; floatField -e -v 0.75 ffDampSt ; break ; case 3: // Heavy floatField -e -v 0.0 ffJiggleStart ; floatField -e -v 1.0 ffJiggleMid ; floatField -e -v 0.0 ffJiggleEnd ; floatField -e -v 14.0 ffCycleStart ; floatField -e -v 14.0 ffCycleMid ; floatField -e -v 14.0 ffCycleEnd ; floatField -e -v 18.0 ffRestStart ; floatField -e -v 18.0 ffRestMid ; floatField -e -v 18.0 ffRestEnd ; floatField -e -v 0.6 ffDampSq ; floatField -e -v 0.6 ffDampSt ; break ; // Stretch Values: // case 4: // default floatField -e -v 1.0 ffSquashXStart ; floatField -e -v 2.0 ffSquashXMid ; floatField -e -v 1.0 ffSquashXEnd ; floatField -e -v 1.0 ffSquashZStart ; floatField -e -v 2.0 ffSquashZMid ; floatField -e -v 1.0 ffSquashZEnd ; floatField -e -v 1.0 ffStretchXStart ; floatField -e -v 0.5 ffStretchXMid ; floatField -e -v 1.0 ffStretchXEnd ; floatField -e -v 1.0 ffStretchZStart ; floatField -e -v 0.5 ffStretchZMid ; floatField -e -v 1.0 ffStretchZEnd ; break ; case 5: // Small floatField -e -v 1.0 ffSquashXStart ; floatField -e -v 1.2 ffSquashXMid ; floatField -e -v 1.0 ffSquashXEnd ; floatField -e -v 1.0 ffSquashZStart ; floatField -e -v 1.2 ffSquashZMid ; floatField -e -v 1.0 ffSquashZEnd ; floatField -e -v 1.0 ffStretchXStart ; floatField -e -v 0.8 ffStretchXMid ; floatField -e -v 1.0 ffStretchXEnd ; floatField -e -v 1.0 ffStretchZStart ; floatField -e -v 0.8 ffStretchZMid ; floatField -e -v 1.0 ffStretchZEnd ; break ; case 6: // Medium floatField -e -v 1.0 ffSquashXStart ; floatField -e -v 1.6 ffSquashXMid ; floatField -e -v 1.0 ffSquashXEnd ; floatField -e -v 1.0 ffSquashZStart ; floatField -e -v 1.6 ffSquashZMid ; floatField -e -v 1.0 ffSquashZEnd ; floatField -e -v 1.0 ffStretchXStart ; floatField -e -v 0.4 ffStretchXMid ; floatField -e -v 1.0 ffStretchXEnd ; floatField -e -v 1.0 ffStretchZStart ; floatField -e -v 0.4 ffStretchZMid ; floatField -e -v 1.0 ffStretchZEnd ; break ; case 7: // Large floatField -e -v 1.0 ffSquashXStart ; floatField -e -v 2.25 ffSquashXMid ; floatField -e -v 1.0 ffSquashXEnd ; floatField -e -v 1.0 ffSquashZStart ; floatField -e -v 2.25 ffSquashZMid ; floatField -e -v 1.0 ffSquashZEnd ; floatField -e -v 1.0 ffStretchXStart ; floatField -e -v 0.25 ffStretchXMid ; floatField -e -v 1.0 ffStretchXEnd ; floatField -e -v 1.0 ffStretchZStart ; floatField -e -v 0.25 ffStretchZMid ; floatField -e -v 1.0 ffStretchZEnd ; break ; } } // -------------------------------------------------------------------------- /* * cMBld_readPresetFromSel() - Sets the fields based on what is selected. * $mode: 0=stretch preset 1=jiggle preset. 2=muscleObject */ global proc cMBld_readPresetFromSel(int $mode) { string $objs[] = `ls -sl` ; if ($objs[0] == "") { return ; } // Look for cMuscleStretch data string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSs[] = `ls -type "cMuscleStretch" $hist` ; string $mS = $mSs[0] ; // Look for cMuscleSplineDeformer data $hist = `listHistory -pdo true -il 1 $objs`; string $mSPLs[] = `ls -type "cMuscleSplineDeformer" $hist` ; string $mSPL = $mSPLs[0]; // Look for cMuscleObject data string $mOs[] = `listRelatives -shapes -ni -type "cMuscleObject" $objs`; string $mO = $mOs[0] ; if ($mode == 0) // stretch { if ($mS != "") { float $sq ; $sq = `getAttr ($mS+".squashStart")` ; floatField -e -v $sq ffSquashXStart ; floatField -e -v $sq ffSquashZStart ; $sq = `getAttr ($mS+".squashMid")` ; floatField -e -v $sq ffSquashXMid ; floatField -e -v $sq ffSquashZMid ; $sq = `getAttr ($mS+".squashEnd")` ; floatField -e -v $sq ffSquashXEnd ; floatField -e -v $sq ffSquashZEnd ; $sq = `getAttr ($mS+".stretchStart")` ; floatField -e -v $sq ffStretchXStart ; floatField -e -v $sq ffStretchZStart ; $sq = `getAttr ($mS+".stretchMid")` ; floatField -e -v $sq ffStretchXMid ; floatField -e -v $sq ffStretchZMid ; $sq = `getAttr ($mS+".stretchEnd")` ; floatField -e -v $sq ffStretchXEnd ; floatField -e -v $sq ffStretchZEnd ; if (objExists($mS+".upAxis")) optionMenu -e -sl (`getAttr ($mS+".upAxis")`+1) omUpAxis; if (objExists($mS+".aimStart")) floatSliderGrp -e -v (`getAttr ($mS+".aimStart")`) fsgAimStart ; if (objExists($mS+".aimEnd")) floatSliderGrp -e -v (`getAttr ($mS+".aimEnd")`) fsgAimEnd ; string $msg = (uiRes("m_cMuscleBuilder.kLoadedStretchParametersFromMuscleStretch")); $msg = `format -stringArg $mS $msg`; print $msg; } if ($mSPL != "") { floatField -e -v (`getAttr ($mSPL+".squashXStart")`) ffSquashXStart ; floatField -e -v (`getAttr ($mSPL+".squashZStart")`) ffSquashZStart ; floatField -e -v (`getAttr ($mSPL+".squashXMid")`) ffSquashXMid ; floatField -e -v (`getAttr ($mSPL+".squashZMid")`) ffSquashZMid ; floatField -e -v (`getAttr ($mSPL+".squashXEnd")`) ffSquashXEnd ; floatField -e -v (`getAttr ($mSPL+".squashZEnd")`) ffSquashZEnd ; floatField -e -v (`getAttr ($mSPL+".stretchXStart")`) ffStretchXStart ; floatField -e -v (`getAttr ($mSPL+".stretchZStart")`) ffStretchZStart ; floatField -e -v (`getAttr ($mSPL+".stretchXMid")`) ffStretchXMid ; floatField -e -v (`getAttr ($mSPL+".stretchZMid")`) ffStretchZMid ; floatField -e -v (`getAttr ($mSPL+".stretchXEnd")`) ffStretchXEnd ; floatField -e -v (`getAttr ($mSPL+".stretchZEnd")`) ffStretchZEnd ; if (objExists($mSPL+".upAxis")) optionMenu -e -sl (`getAttr ($mSPL+".upAxis")`+1) omUpAxis; if (objExists($mSPL+".aimStart")) floatSliderGrp -e -v (`getAttr ($mSPL+".aimStart")`) fsgAimStart ; if (objExists($mSPL+".aimEnd")) floatSliderGrp -e -v (`getAttr ($mSPL+".aimEnd")`) fsgAimEnd ; string $msg = (uiRes("m_cMuscleBuilder.kLoadedStretchParametersFromMuscleSplineDeformer")); $msg = `format -stringArg $mSPL $msg`; print $msg; } } // end of if stretch set else if ($mode == 1) // jiggle { for ($mS in $mSs) { floatField -e -v (`getAttr ($mS+".jiggleStart")`) ffJiggleStart ; floatField -e -v (`getAttr ($mS+".jiggleMid")`) ffJiggleMid ; floatField -e -v (`getAttr ($mS+".jiggleEnd")`) ffJiggleEnd ; floatField -e -v (`getAttr ($mS+".cycleStart")`) ffCycleStart ; floatField -e -v (`getAttr ($mS+".cycleMid")`) ffCycleMid ; floatField -e -v (`getAttr ($mS+".cycleEnd")`) ffCycleEnd ; floatField -e -v (`getAttr ($mS+".restStart")`) ffRestStart ; floatField -e -v (`getAttr ($mS+".restMid")`) ffRestMid ; floatField -e -v (`getAttr ($mS+".restEnd")`) ffRestEnd ; floatField -e -v (`getAttr ($mS+".dampenOnSquash")`) ffDampSq ; floatField -e -v (`getAttr ($mS+".dampenOnStretch")`) ffDampSt ; string $msg = (uiRes("m_cMuscleBuilder.kLoadedJiggleParametersFromMuscleStretch")); $msg = `format -stringArg $mS $msg`; print $msg; } for ($mSPL in $mSPLs) { // Get actual movers tied to the deformer. string $ctrls[] ; $ctrls = cMS_getControlsFromSplineDef($mSPL) ; int $nCtrls = size($ctrls) ; string $spline = cMS_getSplineFromSplineDef($mSPL) ; // Set first control to Start values.... floatField -e -v (`getAttr ($ctrls[0]+".jiggle")`) ffJiggleStart ; floatField -e -v (`getAttr ($ctrls[0]+".cycle")`) ffCycleStart ; floatField -e -v (`getAttr ($ctrls[0]+".rest")`) ffRestStart ; // Set last control to End values.... floatField -e -v (`getAttr ($ctrls[$nCtrls-1]+".jiggle")`) ffJiggleEnd ; floatField -e -v (`getAttr ($ctrls[$nCtrls-1]+".cycle")`) ffCycleEnd ; floatField -e -v (`getAttr ($ctrls[$nCtrls-1]+".rest")`) ffRestEnd ; float $jiggle, $cycle, $rest ; int $midIdx = ($nCtrls-1) / 2 ; if ($nCtrls % 2 == 0) // Even # of ctrls? { // average the two most center ones then.... $jiggle = (`getAttr ($ctrls[$midIdx]+".jiggle")` + `getAttr ($ctrls[$midIdx+1]+".jiggle")` ) / 2.0 ; $cycle = (`getAttr ($ctrls[$midIdx]+".cycle")` + `getAttr ($ctrls[$midIdx+1]+".cycle")` ) / 2.0 ; $rest = (`getAttr ($ctrls[$midIdx]+".rest")` + `getAttr ($ctrls[$midIdx+1]+".rest")` ) / 2.0 ; } else // else just use the middle one { $jiggle = `getAttr ($ctrls[$midIdx]+".jiggle")` ; $cycle = `getAttr ($ctrls[$midIdx]+".cycle")` ; $rest = `getAttr ($ctrls[$midIdx]+".rest")` ; } floatField -e -v $jiggle ffJiggleMid ; floatField -e -v $cycle ffCycleMid ; floatField -e -v $rest ffRestMid ; // And set other params floatField -e -v (`getAttr ($spline+".dampenOnSquash")`) ffDampSq ; floatField -e -v (`getAttr ($spline+".dampenOnStretch")`) ffDampSt ; string $msg = (uiRes("m_cMuscleBuilder.kLoadedJiggleParametersFromMuscleSplineDeformer")); $msg = `format -stringArg $mSPL $msg`; print $msg; } // end of each mSPL } // end of if jiggle set else if ($mode == 2) // muscle object { if ($mO != "") { floatSliderGrp -e -v (`getAttr ($mO+".stickyStrength")`) fsgStr ; floatSliderGrp -e -v (`getAttr ($mO+".fat")`) fsgFat ; checkBox -e -v (`getAttr ($mO+".reverseNormals")`) cbRevNormals ; floatSliderGrp -e -v (`getAttr ($mO+".radius")`) fsgRadius ; floatSliderGrp -e -v (`getAttr ($mO+".length")`) fsgLength ; optionMenu -e -sl (`getAttr ($mO+".capsuleAxis")`+1) omCapAxis ; optionMenu -e -sl (`getAttr ($mO+".shaded")`+1) omShaded ; optionMenu -e -sl (`getAttr ($mO+".draw")`+1) omDraw ; floatSliderGrp -e -v (`getAttr ($mO+".highlight")`) fsgHighlight ; floatSliderGrp -e -v (`getAttr ($mO+".highlightShaded")`) fsgHighlightShaded ; colorSliderGrp -e -rgb (`getAttr ($mO+".wirecolorR")`) (`getAttr ($mO+".wirecolorG")`) (`getAttr ($mO+".wirecolorB")`) csgWireColor ; colorSliderGrp -e -rgb (`getAttr ($mO+".shadecolorR")`) (`getAttr ($mO+".shadecolorG")`) (`getAttr ($mO+".shadecolorB")`) csgShadeColor ; intSliderGrp -e -v (`getAttr ($mO+".nSeg")`) isgSeg ; intSliderGrp -e -v (`getAttr ($mO+".nSides")`) isgSides ; } } // end of if muscle object } // -------------------------------------------------------------------------- /* * cMBld_applyPreset() - Applies a preset. * $mode: 0=stretch preset 1=jiggle preset. 2=muscleObject */ global proc cMBld_applyPreset(int $mode, int $subItem) { string $objs[] = `ls -sl` ; if ($objs[0] == "") { return ; } // Look for cMuscleStretch data string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSs[] = `ls -type "cMuscleStretch" $hist` ; string $mS ; // Look for cMuscleSplineDeformer data $hist = `listHistory -pdo true -il 1 $objs`; string $mSPLs[] = `ls -type "cMuscleSplineDeformer" $hist` ; string $mSPL ; // Look for cMuscleObject data string $mOs[] = `listRelatives -shapes -ni -type "cMuscleObject" $objs`; string $mO ; if ($mode == 0) // stretch { for ($mS in $mSs) { float $sq ; if ($subItem == 0 || $subItem == 1 || $subItem == 4) { $sq = (`floatField -q -v ffSquashXStart` + `floatField -q -v ffSquashZStart`) / 2.0 ; setAttr ($mS+".squashStart") $sq ; } if ($subItem == 0 || $subItem == 2 || $subItem == 5) { $sq = (`floatField -q -v ffSquashXMid` + `floatField -q -v ffSquashZMid`) / 2.0 ; setAttr ($mS+".squashMid") $sq ; } if ($subItem == 0 || $subItem == 3 || $subItem == 6) { $sq = (`floatField -q -v ffSquashXEnd` + `floatField -q -v ffSquashZEnd`) / 2.0 ; setAttr ($mS+".squashEnd") $sq ; } if ($subItem == 0 || $subItem == 7 || $subItem == 10) { $sq = (`floatField -q -v ffStretchXStart` + `floatField -q -v ffStretchZStart`) / 2.0 ; setAttr ($mS+".stretchStart") $sq ; } if ($subItem == 0 || $subItem == 8 || $subItem == 11) { $sq = (`floatField -q -v ffStretchXMid` + `floatField -q -v ffStretchZMid`) / 2.0 ; setAttr ($mS+".stretchMid") $sq ; } if ($subItem == 0 || $subItem == 9 || $subItem == 12) { $sq = (`floatField -q -v ffStretchXEnd` + `floatField -q -v ffStretchZEnd`) / 2.0 ; setAttr ($mS+".stretchEnd") $sq ; } if ($subItem == 0 || $subItem == 13) { if (objExists($mS+".upAxis")) setAttr ($mS+".upAxis") (`optionMenu -q -sl omUpAxis`-1) ; } if ($subItem == 0 || $subItem == 14) { if (objExists($mS+".aimStart")) setAttr ($mS+".aimStart") `floatSliderGrp -q -v fsgAimStart` ; } if ($subItem == 0 || $subItem == 15) { if (objExists($mS+".aimEnd")) setAttr ($mS+".aimEnd") `floatSliderGrp -q -v fsgAimEnd` ; } string $msg = (uiRes("m_cMuscleBuilder.kSetStretchParametersForMuscleStretch")); $msg = `format -stringArg $mS $msg`; print $msg; } for ($mSPL in $mSPLs) { if ($subItem == 0 || $subItem == 1) setAttr ($mSPL+".squashXStart") `floatField -q -v ffSquashXStart` ; if ($subItem == 0 || $subItem == 4) setAttr ($mSPL+".squashZStart") `floatField -q -v ffSquashZStart` ; if ($subItem == 0 || $subItem == 2) setAttr ($mSPL+".squashXMid") `floatField -q -v ffSquashXMid` ; if ($subItem == 0 || $subItem == 5) setAttr ($mSPL+".squashZMid") `floatField -q -v ffSquashZMid` ; if ($subItem == 0 || $subItem == 3) setAttr ($mSPL+".squashXEnd") `floatField -q -v ffSquashXEnd` ; if ($subItem == 0 || $subItem == 6) setAttr ($mSPL+".squashZEnd") `floatField -q -v ffSquashZEnd` ; if ($subItem == 0 || $subItem == 7) setAttr ($mSPL+".stretchXStart") `floatField -q -v ffStretchXStart` ; if ($subItem == 0 || $subItem == 10) setAttr ($mSPL+".stretchZStart") `floatField -q -v ffStretchZStart` ; if ($subItem == 0 || $subItem == 8) setAttr ($mSPL+".stretchXMid") `floatField -q -v ffStretchXMid` ; if ($subItem == 0 || $subItem == 11) setAttr ($mSPL+".stretchZMid") `floatField -q -v ffStretchZMid` ; if ($subItem == 0 || $subItem == 9) setAttr ($mSPL+".stretchXEnd") `floatField -q -v ffStretchXEnd` ; if ($subItem == 0 || $subItem == 12) setAttr ($mSPL+".stretchZEnd") `floatField -q -v ffStretchZEnd` ; if ($subItem == 0 || $subItem == 13) { if (objExists($mSPL+".upAxis")) setAttr ($mSPL+".upAxis") (`optionMenu -q -sl omUpAxis`-1) ; } if ($subItem == 0 || $subItem == 14) { if (objExists($mSPL+".aimStart")) setAttr ($mSPL+".aimStart") `floatSliderGrp -q -v fsgAimStart` ; } if ($subItem == 0 || $subItem == 15) { if (objExists($mSPL+".aimEnd")) setAttr ($mSPL+".aimEnd") `floatSliderGrp -q -v fsgAimEnd` ; } string $msg = (uiRes("m_cMuscleBuilder.kSetStretchParametersForMuscleSplineDeformer")); $msg = `format -stringArg $mSPL $msg`; print $msg; } } // end of if stretch set else if ($mode == 1) // jiggle { for ($mS in $mSs) { if ($subItem == 0 || $subItem == 1) setAttr ($mS+".jiggleStart") `floatField -q -v ffJiggleStart` ; if ($subItem == 0 || $subItem == 2) setAttr ($mS+".jiggleMid") `floatField -q -v ffJiggleMid` ; if ($subItem == 0 || $subItem == 3) setAttr ($mS+".jiggleEnd") `floatField -q -v ffJiggleEnd` ; if ($subItem == 0 || $subItem == 4) setAttr ($mS+".cycleStart") `floatField -q -v ffCycleStart` ; if ($subItem == 0 || $subItem == 5) setAttr ($mS+".cycleMid") `floatField -q -v ffCycleMid` ; if ($subItem == 0 || $subItem == 6) setAttr ($mS+".cycleEnd") `floatField -q -v ffCycleEnd` ; if ($subItem == 0 || $subItem == 7) setAttr ($mS+".restStart") `floatField -q -v ffRestStart` ; if ($subItem == 0 || $subItem == 8) setAttr ($mS+".restMid") `floatField -q -v ffRestMid` ; if ($subItem == 0 || $subItem == 9) setAttr ($mS+".restEnd") `floatField -q -v ffRestEnd` ; if ($subItem == 0 || $subItem == 10) setAttr ($mS+".dampenOnSquash") `floatField -q -v ffDampSq` ; if ($subItem == 0 || $subItem == 11) setAttr ($mS+".dampenOnStretch") `floatField -q -v ffDampSt` ; string $msg = (uiRes("m_cMuscleBuilder.kSetJiggleParametersForMuscleStretch")); $msg = `format -stringArg $mS $msg`; print $msg; } for ($mSPL in $mSPLs) { // Get actual movers tied to the deformer. string $ctrls[] ; $ctrls = cMS_getControlsFromSplineDef($mSPL) ; int $nCtrls = size($ctrls) ; string $spline = cMS_getSplineFromSplineDef($mSPL) ; // Set first control to Start values.... if ($subItem == 0 || $subItem == 1) setAttr ($ctrls[0]+".jiggle") `floatField -q -v ffJiggleStart` ; if ($subItem == 0 || $subItem == 4) setAttr ($ctrls[0]+".cycle") `floatField -q -v ffCycleStart` ; if ($subItem == 0 || $subItem == 7) setAttr ($ctrls[0]+".rest") `floatField -q -v ffRestStart` ; // Set last control to End values.... if ($subItem == 0 || $subItem == 3) setAttr ($ctrls[$nCtrls-1]+".jiggle") `floatField -q -v ffJiggleEnd` ; if ($subItem == 0 || $subItem == 6) setAttr ($ctrls[$nCtrls-1]+".cycle") `floatField -q -v ffCycleEnd` ; if ($subItem == 0 || $subItem == 9) setAttr ($ctrls[$nCtrls-1]+".rest") `floatField -q -v ffRestEnd` ; // And LERP in between ones from start->mid->end as needed int $i; for ($i=1; $i < $nCtrls-1; ++$i) { float $u = (1.0 * $i) / ($nCtrls-1.0 ) ; // Where are we along u? float $jiggle, $cycle, $rest ; if ($u <= 0.5) // Blend Start and Mid { float $pct = $u / 0.5 ; $jiggle = ((1.0-$pct) * `floatField -q -v ffJiggleStart`) + (($pct) * `floatField -q -v ffJiggleMid`) ; $cycle = ((1.0-$pct) * `floatField -q -v ffCycleStart`) + (($pct) * `floatField -q -v ffCycleMid`) ; $rest = ((1.0-$pct) * `floatField -q -v ffRestStart`) + (($pct) * `floatField -q -v ffRestMid`) ; } else { float $pct = ($u-0.5) / 0.5 ; $jiggle = ((1.0-$pct) * `floatField -q -v ffJiggleMid`) + (($pct) * `floatField -q -v ffJiggleEnd`) ; $cycle = ((1.0-$pct) * `floatField -q -v ffCycleMid`) + (($pct) * `floatField -q -v ffCycleEnd`) ; $rest = ((1.0-$pct) * `floatField -q -v ffRestMid`) + (($pct) * `floatField -q -v ffRestEnd`) ; } if ($subItem == 0 || $subItem == 2) setAttr ($ctrls[$i]+".jiggle") $jiggle ; if ($subItem == 0 || $subItem == 5) setAttr ($ctrls[$i]+".cycle") $cycle ; if ($subItem == 0 || $subItem == 8) setAttr ($ctrls[$i]+".rest") $rest ; } // end of each ctrl // And set other params if ($subItem == 0 || $subItem == 10) setAttr ($spline+".dampenOnSquash") `floatField -q -v ffDampSq` ; if ($subItem == 0 || $subItem == 11) setAttr ($spline+".dampenOnStretch") `floatField -q -v ffDampSt` ; string $msg = (uiRes("m_cMuscleBuilder.kSetJiggleParametersForMuscleSplineDeformer")); $msg = `format -stringArg $mSPL $msg`; print $msg; } // end of each mSPL } // end of if jiggle set else if ($mode == 2) // muscle object { for ($mO in $mOs) { if ($subItem == 0 || $subItem == 1) setAttr ($mO+".stickyStrength") `floatSliderGrp -q -v fsgStr` ; if ($subItem == 0 || $subItem == 2) setAttr ($mO+".fat") `floatSliderGrp -q -v fsgFat` ; if ($subItem == 0 || $subItem == 3) setAttr ($mO+".reverseNormals") `checkBox -q -v cbRevNormals` ; if ($subItem == 0 || $subItem == 4) setAttr ($mO+".radius") `floatSliderGrp -q -v fsgRadius` ; if ($subItem == 0 || $subItem == 5) { if (`getAttr -se ($mO+".length")`) setAttr ($mO+".length") `floatSliderGrp -q -v fsgLength` ; } if ($subItem == 0 || $subItem == 6) setAttr ($mO+".capsuleAxis") (`optionMenu -q -sl omCapAxis`-1) ; if ($subItem == 0 || $subItem == 7) setAttr ($mO+".shaded") (`optionMenu -q -sl omShaded`-1) ; if ($subItem == 0 || $subItem == 8) setAttr ($mO+".draw") (`optionMenu -q -sl omDraw`-1) ; if ($subItem == 0 || $subItem == 9) setAttr ($mO+".highlight") `floatSliderGrp -q -v fsgHighlight` ; if ($subItem == 0 || $subItem == 11) setAttr ($mO+".highlightShaded") `floatSliderGrp -q -v fsgHighlightShaded` ; float $rgb[3] ; if ($subItem == 0 || $subItem == 10) { $rgb = `colorSliderGrp -q -rgb csgWireColor` ; setAttr -type float3 ($mO+".wirecolor") $rgb[0] $rgb[1] $rgb[2] ; } if ($subItem == 0 || $subItem == 12) { $rgb = `colorSliderGrp -q -rgb csgShadeColor` ; setAttr -type float3 ($mO+".shadecolor") $rgb[0] $rgb[1] $rgb[2] ; } if ($subItem == 0 || $subItem == 13) setAttr ($mO+".nSeg") `intSliderGrp -q -v isgSeg` ; if ($subItem == 0 || $subItem == 14) setAttr ($mO+".nSides") `intSliderGrp -q -v isgSides` ; } } // end of if muscle object } // -------------------------------------------------------------------------- /* * cMBld_realtimeUpdate() - Will instantly apply changes if cb is on */ global proc cMBld_realtimeUpdate(int $mode, int $subItem) { if (`checkBox -q -v cbRealtime`) cMBld_applyPreset($mode, $subItem) ; } // -------------------------------------------------------------------------- /* * cMBld_copyValues() - Copies values */ global proc cMBld_copyValues() { global float $gCMBld_stretchVals[] ; global float $gCMBld_splineDefVals[] ; global float $gCMBld_splineVals[] ; global float $gCMBld_splineJiggleVals[] ; // vals for splineDef Controls global float $gCMBld_splineCycleVals[] ; // vals for splineDef Controls global float $gCMBld_splineRestVals[] ; // vals for splineDef Controls global float $gCMBld_objectVals[] ; string $stretchAttrs[] = { "manualSquish", "maxStretch", "stretchStart", "stretchMid", "stretchEnd", "maxSquash", "squashStart", "squashMid", "squashEnd", "xFactor", "zFactor", "weightStart", "weightMid", "weightEnd", "resetFrame", "jiggleStart", "jiggleMid", "jiggleEnd", "cycleStart", "cycleMid", "cycleEnd", "restStart", "restMid", "restEnd", "dampenOnSquash", "dampenOnStretch", "upAxis", "aimStart", "aimEnd" } ; string $splineDefAttrs[] = { "squashXStart", "squashZStart", "squashXMid", "squashZMid", "squashXEnd", "squashZEnd", "stretchXStart", "stretchZStart", "stretchXMid", "stretchZMid", "stretchXEnd", "stretchZEnd", "upAxis", "aimStart", "aimEnd" } ; string $splineAttrs[] = { "dampenOnSquash", "dampenOnStretch", "colorR", "colorG", "colorB", "tolerance", "tangentMode", "upAxis", "draw" } ; string $objectAttrs[] = { "fat", "reverseNormals", "draw", "shaded", "highlight", "nSeg", "nSides", "radius", "length", "capsuleAxis", "wirecolorR", "wirecolorG", "wirecolorB", "shadecolorR", "shadecolorG", "shadecolorB" } ; string $objs[] = `ls -sl` ; if ($objs[0] == "") return ; // Copy cMuscleStretch data string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSs[] = `ls -type "cMuscleStretch" $hist` ; string $copyingMsg = (uiRes("m_cMuscleBuilder.kCopyingMessage")); if ($mSs[0] != "") { $msg = `format -stringArg $mSs[0] $copyingMsg`; print $msg ; int $i; for ($i=0; $i < size($stretchAttrs); ++$i) { $gCMBld_stretchVals[$i] = `getAttr ($mSs[0]+"."+$stretchAttrs[$i])`; } } // Copy cMuscleSplineDeformer data $hist = `listHistory -pdo true -il 1 $objs`; string $mSPLs[] = `ls -type "cMuscleSplineDeformer" $hist` ; if ($mSPLs[0] != "") { $msg = `format -stringArg $mSPLs[0] $copyingMsg`; print $msg ; int $i; for ($i=0; $i < size($splineDefAttrs); ++$i) { $gCMBld_splineDefVals[$i] = `getAttr ($mSPLs[0]+"."+$splineDefAttrs[$i])`; } // Get actual movers tied to the deformer. string $ctrls[] ; $ctrls = cMS_getControlsFromSplineDef($mSPLs[0]) ; int $nCtrls = size($ctrls) ; string $spline = cMS_getSplineFromSplineDef($mSPLs[0]) ; // Copy Spline Too! $msg = `format -stringArg $spline $copyingMsg`; print $msg ; for ($i=0; $i < size($splineAttrs); ++$i) { $gCMBld_splineVals[$i] = `getAttr ($spline+"."+$splineAttrs[$i])`; } // Copy Controls also clear $gCMBld_splineJiggleVals ; clear $gCMBld_splineCycleVals ; clear $gCMBld_splineRestVals ; for ($i=0; $i < $nCtrls; ++$i) { $msg = `format -stringArg $ctrls[$i] $copyingMsg`; print $msg ; $gCMBld_splineJiggleVals[$i] = `getAttr ($ctrls[$i]+".jiggle")` ; $gCMBld_splineCycleVals[$i] = `getAttr ($ctrls[$i]+".cycle")` ; $gCMBld_splineRestVals[$i] = `getAttr ($ctrls[$i]+".rest")` ; } } // Copy cMuscleObject data string $mOs[] = `listRelatives -shapes -ni -type "cMuscleObject" $objs`; if ($mOs[0] != "") { $msg = `format -stringArg $mOs[0] $copyingMsg`; print $msg ; int $i; for ($i=0; $i < size($objectAttrs); ++$i) { $gCMBld_objectVals[$i] = `getAttr ($mOs[0]+"."+$objectAttrs[$i])`; } } } // -------------------------------------------------------------------------- /* * cMBld_pasteValues() - Pastes values */ global proc cMBld_pasteValues() { global float $gCMBld_stretchVals[] ; global float $gCMBld_splineDefVals[] ; global float $gCMBld_splineVals[] ; global float $gCMBld_splineJiggleVals[] ; // vals for splineDef Controls global float $gCMBld_splineCycleVals[] ; // vals for splineDef Controls global float $gCMBld_splineRestVals[] ; // vals for splineDef Controls global float $gCMBld_objectVals[] ; string $stretchAttrs[] = { "manualSquish", "maxStretch", "stretchStart", "stretchMid", "stretchEnd", "maxSquash", "squashStart", "squashMid", "squashEnd", "xFactor", "zFactor", "weightStart", "weightMid", "weightEnd", "resetFrame", "jiggleStart", "jiggleMid", "jiggleEnd", "cycleStart", "cycleMid", "cycleEnd", "restStart", "restMid", "restEnd", "dampenOnSquash", "dampenOnStretch", "upAxis", "aimStart", "aimEnd" } ; string $splineDefAttrs[] = { "squashXStart", "squashZStart", "squashXMid", "squashZMid", "squashXEnd", "squashZEnd", "stretchXStart", "stretchZStart", "stretchXMid", "stretchZMid", "stretchXEnd", "stretchZEnd", "upAxis", "aimStart", "aimEnd" } ; string $splineAttrs[] = { "dampenOnSquash", "dampenOnStretch", "colorR", "colorG", "colorB", "tolerance", "tangentMode", "upAxis", "draw" } ; string $objectAttrs[] = { "fat", "reverseNormals", "draw", "shaded", "highlight", "nSeg", "nSides", "radius", "length", "capsuleAxis", "wirecolorR", "wirecolorG", "wirecolorB", "shadecolorR", "shadecolorG", "shadecolorB" } ; string $objs[] = `ls -sl` ; if ($objs[0] == "") return ; // Paste cMuscleStretch data string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSs[] = `ls -type "cMuscleStretch" $hist` ; string $mS ; string $pastingMsg = (uiRes("m_cMuscleBuilder.kPastingMessage")); for ($mS in $mSs) { $msg = `format -stringArg $mS $pastingMsg`; print $msg ; int $i; for ($i=0; $i < size($stretchAttrs) && $i < size($gCMBld_stretchVals); ++$i) { eval("setAttr (\""+$mS+"."+$stretchAttrs[$i]+"\") "+$gCMBld_stretchVals[$i]+" ;") ; } } // Paste cMuscleSplineDeformer data $hist = `listHistory -pdo true -il 1 $objs`; string $mSPLs[] = `ls -type "cMuscleSplineDeformer" $hist` ; string $mSPL ; for ($mSPL in $mSPLs) { $msg = `format -stringArg $mSPL $pastingMsg`; print $msg ; int $i; for ($i=0; $i < size($splineDefAttrs) && $i < size($gCMBld_splineDefVals); ++$i) { eval("setAttr (\""+$mSPL+"."+$splineDefAttrs[$i]+"\") "+$gCMBld_splineDefVals[$i]+" ;") ; } // Get actual movers tied to the deformer. string $ctrls[] ; $ctrls = cMS_getControlsFromSplineDef($mSPL) ; int $nCtrls = size($ctrls) ; string $spline = cMS_getSplineFromSplineDef($mSPL) ; // Paste spline too! $msg = `format -stringArg $spline $pastingMsg`; print $msg ; for ($i=0; $i < size($splineAttrs) && $i < size($gCMBld_splineVals); ++$i) { eval("setAttr (\""+$spline+"."+$splineAttrs[$i]+"\") "+$gCMBld_splineVals[$i]+" ;") ; } int $nCtrlsCopied = size($gCMBld_splineJiggleVals) ; for ($i=0; $i < $nCtrls; ++$i) { $msg = `format -stringArg $ctrls[$i] $pastingMsg`; print $msg ; if ($i == 0) // Paste Start/First Value { eval("setAttr (\""+$ctrls[$i]+".jiggle\") "+$gCMBld_splineJiggleVals[0]+" ;") ; eval("setAttr (\""+$ctrls[$i]+".cycle\") "+$gCMBld_splineCycleVals[0]+" ;") ; eval("setAttr (\""+$ctrls[$i]+".rest\") "+$gCMBld_splineRestVals[0]+" ;") ; } else if ($i == $nCtrls-1) // Paste End/Last Value { eval("setAttr (\""+$ctrls[$i]+".jiggle\") "+$gCMBld_splineJiggleVals[$nCtrlsCopied-1]+" ;") ; eval("setAttr (\""+$ctrls[$i]+".cycle\") "+$gCMBld_splineCycleVals[$nCtrlsCopied-1]+" ;") ; eval("setAttr (\""+$ctrls[$i]+".rest\") "+$gCMBld_splineRestVals[$nCtrlsCopied-1]+" ;") ; } else // Paste Mid Value { // For this we figure out what U value we have here... float $u = (1.0 * $i) / ($nCtrls-1.0 ) ; // Where are we along u? // Then we use that to figure the value from the copied data // since it might not even have the same # of controls as the // item we are pasting...but this way we get the proper blend // from there... float $fSpan = ($u * ($nCtrlsCopied-1.0) ) ; int $nSpan = (int)$fSpan ; float $pct = $fSpan - $nSpan ; // Keep just decimal part. if ($nSpan >= $nCtrlsCopied-1) // Don't go off the end... { $nSpan = $nCtrlsCopied-2 ; $pct = 1.0 ; } float $jiggle = ((1.0-$pct) * $gCMBld_splineJiggleVals[$nSpan]) + ($pct * $gCMBld_splineJiggleVals[$nSpan+1]) ; float $cycle = ((1.0-$pct) * $gCMBld_splineCycleVals[$nSpan]) + ($pct * $gCMBld_splineCycleVals[$nSpan+1]) ; float $rest = ((1.0-$pct) * $gCMBld_splineRestVals[$nSpan]) + ($pct * $gCMBld_splineRestVals[$nSpan+1]) ; eval("setAttr (\""+$ctrls[$i]+".jiggle\") "+$jiggle+" ;") ; eval("setAttr (\""+$ctrls[$i]+".cycle\") "+$cycle+" ;") ; eval("setAttr (\""+$ctrls[$i]+".rest\") "+$rest+" ;") ; } } // end of each ctrl } // Paste cMuscleObject data string $mOs[] = `listRelatives -shapes -ni -type "cMuscleObject" $objs`; string $mO ; for ($mO in $mOs) { $msg = `format -stringArg $mO $pastingMsg`; print $msg ; int $i; for ($i=0; $i < size($objectAttrs) && $i < size($gCMBld_objectVals); ++$i) { eval("setAttr (\""+$mO+"."+$objectAttrs[$i]+"\") "+$gCMBld_objectVals[$i]+" ;") ; } } } // -------------------------------------------------------------------------- /* * cMBld_setSplineDefLength() - Sets the current length of the spline * for the selected spline stuff as given. * $mode: 0=default 1=squash 2=stretch */ global proc cMBld_setSplineDefLength(int $mode) { string $objs[] = `ls -sl` ; if ($objs[0] == "") return ; // Paste cMuscleSplineDeformer data string $hist[] = `listHistory -pdo true -il 1 $objs`; string $mSPLs[] = `ls -type "cMuscleSplineDeformer" $hist` ; string $mSPL ; for ($mSPL in $mSPLs) { // Get the real spline driving this thing... string $spline = cMS_getSplineFromSplineDef($mSPL) ; string $msg = (uiRes("m_cMuscleBuilder.kSettingLengthDataForSpline")); $msg = `format -stringArg $spline $msg`; print $msg ; float $len = `getAttr ($spline+".outLen")` ; switch ($mode) { case 0: setAttr ($spline+".lenDefault") $len ; break ; case 1: setAttr ($spline+".lenSquash") $len ; break ; case 2: setAttr ($spline+".lenStretch") $len ; break ; } } // end of each spline def } // --------------------------------------------------------------------------