// =========================================================================== // 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 setOptionVars ( int $forceFactorySettings ) { // Divisions if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeDivisionsOption`) optionVar -intValue PolyBridgeEdgeDivisionsOption 0; // Twist if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeTwistOption`) optionVar -floatValue PolyBridgeEdgeTwistOption 0.0; // Taper if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeTaperOption`) optionVar -floatValue PolyBridgeEdgeTaperOption 1.0; // Divisions if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeCurveTypeOption`) optionVar -intValue PolyBridgeEdgeCurveTypeOption 0; // Smoothing Angle if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeSmoothAngleOption`) optionVar -floatValue PolyBridgeEdgeSmoothAngleOption 30.0; // Direction options if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeDirectionOption`) optionVar -intValue PolyBridgeEdgeDirectionOption 0; if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeSourceDirOption`) optionVar -intValue PolyBridgeEdgeSourceDirOption 0; if ($forceFactorySettings || !`optionVar -exists PolyBridgeEdgeTargetDirOption`) optionVar -intValue PolyBridgeEdgeTargetDirOption 0; } proc string assembleBridgeEdgeCmd ( ) { setOptionVars (false); int $doHistory = `constructionHistory -q -toggle`; string $cmd = ("polyBridgeEdge -ch " + $doHistory); int $divisions; $divisions = `optionVar -query PolyBridgeEdgeDivisionsOption`; int $direction; $direction = `optionVar -query PolyBridgeEdgeDirectionOption`; int $sourceDir; $sourceDir = `optionVar -query PolyBridgeEdgeSourceDirOption`; int $targetDir; $targetDir = `optionVar -query PolyBridgeEdgeTargetDirOption`; float $twist; $twist = `optionVar -query PolyBridgeEdgeTwistOption`; float $taper; $taper = `optionVar -query PolyBridgeEdgeTaperOption`; int $curveType; $curveType = `optionVar -query PolyBridgeEdgeCurveTypeOption`; float $smoothingAngle; $smoothingAngle = `optionVar -query PolyBridgeEdgeSmoothAngleOption`; $cmd += " -divisions " + $divisions; $cmd += " -twist " + $twist; $cmd += " -taper " + $taper; $cmd += " -curveType " + $curveType; $cmd += " -smoothingAngle " + $smoothingAngle; $cmd += " -direction " + $direction; $cmd += " -sourceDirection " + $sourceDir; $cmd += " -targetDirection " + $targetDir; return $cmd; } global proc updateDirections() { int $ival = (`radioButtonGrp -query -select PolyBridgeEdgeDirectionOptionRadio` - 1); radioButtonGrp -edit -enable ($ival == 1) PolyBridgeEdgeSourceDirOptionRadio; radioButtonGrp -edit -enable ($ival == 1) PolyBridgeEdgeTargetDirOptionRadio; } global proc updatePolyBridgeEdgeUI() { int $cType = `radioButtonGrp -query -select PolyBridgeEdgeCurveTypeRadioGrp`; int $enableTwistTaper = ($cType != 1); floatSliderGrp -edit -enable $enableTwistTaper PolyBridgeEdgeTwistOptionSlider; floatSliderGrp -edit -enable $enableTwistTaper PolyBridgeEdgeTaperOptionSlider; } global proc performPolyBridgeEdgeSetup (string $parent, int $forceFactorySettings) { setOptionVars($forceFactorySettings); setParent $parent; int $ival; float $fval; $ival = `optionVar -query PolyBridgeEdgeDivisionsOption`; intSliderGrp -edit -value $ival PolyBridgeEdgeDivisionsOptionSlider; $ival = `optionVar -query PolyBridgeEdgeDirectionOption` + 1; radioButtonGrp -edit -select $ival PolyBridgeEdgeDirectionOptionRadio; $ival = `optionVar -query PolyBridgeEdgeSourceDirOption` + 1; radioButtonGrp -edit -select $ival PolyBridgeEdgeSourceDirOptionRadio; $ival = `optionVar -query PolyBridgeEdgeTargetDirOption` + 1; radioButtonGrp -edit -select $ival PolyBridgeEdgeTargetDirOptionRadio; $fval = `optionVar -query PolyBridgeEdgeTwistOption`; floatSliderGrp -edit -value $fval PolyBridgeEdgeTwistOptionSlider; $fval = `optionVar -query PolyBridgeEdgeTaperOption`; floatSliderGrp -edit -value $fval PolyBridgeEdgeTaperOptionSlider; $ival = `optionVar -query PolyBridgeEdgeCurveTypeOption`; // Bridge flag is 0-based...optionMenuGrp select flag is 1-based. $ival++; radioButtonGrp -edit -select $ival -changeCommand "updatePolyBridgeEdgeUI" PolyBridgeEdgeCurveTypeRadioGrp; $fval = `optionVar -query PolyBridgeEdgeSmoothAngleOption`; floatSliderGrp -edit -value $fval PolyBridgeEdgeSmoothAngleSlider; updateDirections; } global proc performPolyBridgeEdgeCallback (string $parent, int $doIt) { setParent $parent; optionVar -intValue PolyBridgeEdgeDivisionsOption `intSliderGrp -query -value PolyBridgeEdgeDivisionsOptionSlider`; optionVar -intValue PolyBridgeEdgeDirectionOption (`radioButtonGrp -query -select PolyBridgeEdgeDirectionOptionRadio` - 1); optionVar -intValue PolyBridgeEdgeSourceDirOption (`radioButtonGrp -query -select PolyBridgeEdgeSourceDirOptionRadio` - 1); optionVar -intValue PolyBridgeEdgeTargetDirOption (`radioButtonGrp -query -select PolyBridgeEdgeTargetDirOptionRadio` - 1); optionVar -floatValue PolyBridgeEdgeTwistOption `floatSliderGrp -query -value PolyBridgeEdgeTwistOptionSlider`; optionVar -floatValue PolyBridgeEdgeTaperOption `floatSliderGrp -query -value PolyBridgeEdgeTaperOptionSlider`; optionVar -floatValue PolyBridgeEdgeSmoothAngleOption `floatSliderGrp -query -value PolyBridgeEdgeSmoothAngleSlider`; int $cType = `radioButtonGrp -query -select PolyBridgeEdgeCurveTypeRadioGrp`; $cType--; optionVar -intValue PolyBridgeEdgeCurveTypeOption $cType; if ($doIt) { performPolyBridgeEdge 0; addToRecentCommandQueue "performPolyBridgeEdge 0" "PolyBridgeEdge"; } } proc createCmdOptionsUI() { // Global template variables for form spacing global int $gOptionBoxTemplateDescriptionMarginWidth; global int $gOptionBoxTemplateFrameSpacing; string $layout = getOptionBox(); setParent $layout; setUITemplate -pushTemplate OptionBoxTemplate; waitCursor -state 1; string $commandName = "performPolyBridgeEdge"; string $callback = ($commandName + "Callback"); string $setup = ($commandName + "Setup"); // Form layout string $parent = `formLayout polyBridgeEdgeOptions`; // Description frame string $descriptionFrame = `frameLayout -label (uiRes("m_performPolyBridgeEdge.kDescriptionFrame")) -mw $gOptionBoxTemplateDescriptionMarginWidth`; text (uiRes("m_performPolyBridgeEdge.kDescription")); setParent $parent; // Settings frame string $settingsFrame = `frameLayout -label (uiRes("m_performPolyBridgeEdge.kSettingsFrame"))`; columnLayout; string $linearLabel = (uiRes("m_performPolyBridgeEdge.kLinearPathType")); string $smoothLabel = (uiRes("m_performPolyBridgeEdge.kSmoothPathType")); string $curveLabel = (uiRes("m_performPolyBridgeEdge.kSmoothPathPlusCurveType")); radioButtonGrp -label (uiRes("m_performPolyBridgeEdge.kBridgeType")) -numberOfRadioButtons 3 -vertical -labelArray3 $linearLabel $smoothLabel $curveLabel PolyBridgeEdgeCurveTypeRadioGrp; string $autoLabel = (uiRes("m_performPolyBridgeEdge.kBridgeDirectionAutomatic")); string $customLabel = (uiRes("m_performPolyBridgeEdge.kBridgeDirectionCustom")); radioButtonGrp -label (uiRes("m_performPolyBridgeEdge.kBridgeDirectionType")) -numberOfRadioButtons 2 -vertical -labelArray2 $autoLabel $customLabel -cc ("updateDirections") PolyBridgeEdgeDirectionOptionRadio; rowColumnLayout -nc 2 -cw 1 70; text " "; radioButtonGrp -label (uiRes("m_performPolyBridgeEdge.kBridgeSourceDirection")) -numberOfRadioButtons 2 -vertical -labelArray2 "+" "-" PolyBridgeEdgeSourceDirOptionRadio; text " "; radioButtonGrp -label (uiRes("m_performPolyBridgeEdge.kBridgeTargetDirection")) -numberOfRadioButtons 2 -vertical -labelArray2 "+" "-" PolyBridgeEdgeTargetDirOptionRadio; setParent ..; floatSliderGrp -label (uiRes("m_performPolyBridgeEdge.kTwist")) -minValue -180.0 -maxValue 180.0 PolyBridgeEdgeTwistOptionSlider; floatSliderGrp -label (uiRes("m_performPolyBridgeEdge.kTaper")) -minValue 0.0 -maxValue 15.0 PolyBridgeEdgeTaperOptionSlider; intSliderGrp -label (uiRes("m_performPolyBridgeEdge.kDivisions")) -minValue 0 -maxValue 25 PolyBridgeEdgeDivisionsOptionSlider; floatSliderGrp -field true -label (uiRes("m_performPolyBridgeEdge.kSmoothingAngle")) -min 0.0 -max 180.0 -value 30.0 PolyBridgeEdgeSmoothAngleSlider; setParent $parent; setParent ..; // Attach Description/Settings frames to form layout formLayout -e -af $descriptionFrame "top" $gOptionBoxTemplateFrameSpacing -af $descriptionFrame "left" $gOptionBoxTemplateFrameSpacing -af $descriptionFrame "right" $gOptionBoxTemplateFrameSpacing -an $descriptionFrame "bottom" -ac $settingsFrame "top" $gOptionBoxTemplateFrameSpacing $descriptionFrame -af $settingsFrame "left" $gOptionBoxTemplateFrameSpacing -af $settingsFrame "right" $gOptionBoxTemplateFrameSpacing -an $settingsFrame "bottom" $parent; waitCursor -state 0; setUITemplate -popTemplate; string $applyClose = getOptionBoxApplyAndCloseBtn(); button -edit -label (uiRes("m_performPolyBridgeEdge.kBridgeBtn")) $applyClose; string $applyBtn = getOptionBoxApplyBtn(); button -edit -command ($callback + " " + $parent + " " + 1) $applyBtn; string $saveBtn = getOptionBoxSaveBtn(); button -edit -command ($callback + " " + $parent + " " + 0 + "; hideOptionBox") $saveBtn; string $resetBtn = getOptionBoxResetBtn(); button -edit -command ($setup + " " + $parent + " " + 1) $resetBtn; setOptionBoxTitle( (uiRes("m_performPolyBridgeEdge.kBridgeOptions"))); setOptionBoxHelpTag("PolyBridge"); eval (($setup + " " + $parent + " " + 0)); updatePolyBridgeEdgeUI(); } proc polyBridgeEdgeOptions ( ) { createCmdOptionsUI(); showOptionBox(); global string $gOptionBox; window -e -widthHeight 546 410 $gOptionBox; } global proc string performPolyBridgeEdge ( int $option ) { string $cmd=""; switch ($option) { case 0: string $edges[] = `filterExpand -sm 32 -ex 1`; string $faces[] = `filterExpand -sm 34 -ex 1`; string $res[]; if (size($edges) != 0 || size($faces) == 0){ //check for edges first string $cmd=`assembleBridgeEdgeCmd `; string $negEdges[]; string $origEdges[] = $edges; int $symEnabled = `symmetricModelling -q -symmetry`; if ($symEnabled && size($edges) == 0) { // Convert object selection to border edges for symmetry ConvertSelectionToEdges; polySelectConstraint -propagate 3; // border $edges = `filterExpand -sm 32 -ex 1`; } if ($symEnabled) { $negEdges = `filterExpand -ex 1 -sm 32 -symNegative`; string $testCmd = ("polyCanBridgeEdge " + stringArrayToString($negEdges, " ")); if (!`eval $testCmd`) { // Cannot bridge symmetrically so try a regular bridge (MAYA-71787) clear($negEdges); $edges = $origEdges; $symEnabled = false; } } if (size($negEdges) == 0) { // No symmetry $res = `evalEcho $cmd`; if (size($res) > 0) { select -add $res; setToolTo ShowManips; } } else { // Symmetry string $res1[], $res2[]; string $posEdges[] = `filterExpand -ex 1 -sm 32 -symPositive -symSeam`; // Bridge negative edges string $negCmd = ($cmd + " -reverse true " + stringArrayToString($negEdges, " ")); $res1 =`evalEcho $negCmd`; if (size($res1) > 0) select -cl; // Bridge positive edges if (size($posEdges) != 0) { string $posCmd = ($cmd + " " + stringArrayToString($posEdges, " ")); $res2 =`evalEcho $posCmd`; } if (size($res1) > 0 || size($res2) > 0) { select -cl; if (size($res1) > 0) select -add $res1; if (size($res2) > 0) select -add $res2; // Select original edges //select -add $edgeList; setToolTo ShowManips; } } } else { string $cmd = "polyBridgeFaces;"; $res = `evalEcho $cmd`; } break; case 1: polyBridgeEdgeOptions(); break; case 2: $cmd = "performPolyBridgeEdge 0"; break; } return $cmd; }