// =========================================================================== // 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. // =========================================================================== // // // Creation Date: 6 March 2005 // // Procedure Name: // performPolyDuplicateEdge // // Description: // // // Input Arguments: // $option : Whether to set the options to default values. // Return Value: // command string iff $option==2 // proc setOptionVars ( int $forceFactorySettings ) { if(!`optionVar -exists polyDuplicateEdgeAsTool`) optionVar -intValue polyDuplicateEdgeAsTool 1; if ($forceFactorySettings || !`optionVar -exists polyDuplicateEdgeOffset`) optionVar -floatValue polyDuplicateEdgeOffset 0.5; if ($forceFactorySettings || !`optionVar -exists polyDuplicateEdgeVertexOffset`) optionVar -floatValue polyDuplicateEdgeVertexOffset 0.0; if ($forceFactorySettings || !`optionVar -exists polyDuplicateEdgeDeleteEdge`) optionVar -intValue polyDuplicateEdgeDeleteEdge 1; if($forceFactorySettings || !`optionVar -exists polyDuplicateEdgeAutoComplete`) optionVar -intValue polyDuplicateEdgeAutoComplete 1; if($forceFactorySettings || !`optionVar -exists polyDuplicateEdgeSplitType`) optionVar -intValue polyDuplicateEdgeSplitType 1; if($forceFactorySettings || !`optionVar -exists PolySelectEditDuplicateEdgeSmoothAngle`) optionVar -floatValue PolySelectEditDuplicateEdgeSmoothAngle 180.0; if($forceFactorySettings || !`optionVar -exists PolySelectEditDuplicateEdgeInsertWithEdgeFlow`) optionVar -intValue PolySelectEditDuplicateEdgeInsertWithEdgeFlow 0; if($forceFactorySettings || !`optionVar -exists PolySelectEditDuplicateEdgeAdjustEdgeFlow`) optionVar -floatValue PolySelectEditDuplicateEdgeAdjustEdgeFlow 1.0; } global proc updateDuplicateEdgeToolUI() { int $auto = `radioButtonGrp -query -select polyDuplicateEdgeAutoCompleteRadio`; // Radio is 1=AutoComplete, 2=No AutoComplete if($auto == 2){ $auto = 0; } checkBoxGrp -edit -enable (!$auto) polyDuplicateEdgeDeleteEdge; } proc performPolyDuplicateEdgeToolSetup() { float $fval; $fval = `optionVar -query polyDuplicateEdgeVertexOffset`; floatSliderGrp -edit -value $fval polyDuplicateEdgeVertexOffset; int $auto = `optionVar -query polyDuplicateEdgeAutoComplete`; // Radio is 1=AutoComplete, 2=No AutoComplete if($auto == 0){ $auto = 2; } radioButtonGrp -edit -select $auto polyDuplicateEdgeAutoCompleteRadio; radioButtonGrp -edit -cc "updateDuplicateEdgeToolUI" polyDuplicateEdgeAutoCompleteRadio; int $style = `optionVar -query polyDuplicateEdgeSplitType`; // Radio is 1=absolute, 2=relative if($style == 0){ $style = 2; } radioButtonGrp -edit -select $style polyDuplicateSplitTypeRadio; int $delete = `optionVar -query polyDuplicateEdgeDeleteEdge`; checkBoxGrp -edit -value1 $delete polyDuplicateEdgeDeleteEdge; $fval = `optionVar -query PolySelectEditDuplicateEdgeSmoothAngle`; floatSliderGrp -edit -value $fval polyDuplicateEdgeSmoothAngleSlider; int $insertWithEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeInsertWithEdgeFlow`; checkBoxGrp -e -value1 $insertWithEdgeFlow polyDuplicateEdgeInsertWithEdgeFlow; float $adjustEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeAdjustEdgeFlow`; floatSliderGrp -e -value $adjustEdgeFlow -enable $insertWithEdgeFlow polyDuplicateEdgeAdjustEdgeFlowSlider; updateDuplicateEdgeToolUI(); } proc performPolyDuplicateEdgeActionSetup() { float $fval; $fval = `optionVar -query polyDuplicateEdgeOffset`; floatSliderGrp -edit -value $fval polyDuplicateEdgeOffset; $fval = `optionVar -query polyDuplicateEdgeVertexOffset`; floatSliderGrp -edit -value $fval polyDuplicateEdgeVertexOffset; int $ival = `optionVar -query polyDuplicateEdgeDeleteEdge`; checkBoxGrp -edit -value1 $ival polyDuplicateEdgeDeleteEdge; $fval = `optionVar -query PolySelectEditDuplicateEdgeSmoothAngle`; floatSliderGrp -edit -value $fval polyDuplicateEdgeSmoothAngleSlider; int $style = `optionVar -query polyDuplicateEdgeSplitType`; // Radio is 1=absolute, 2=relative if($style == 0){ $style = 2; } radioButtonGrp -edit -select $style polyDuplicateSplitTypeRadioAction; int $insertWithEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeInsertWithEdgeFlow`; checkBoxGrp -e -value1 $insertWithEdgeFlow polyDuplicateEdgeInsertWithEdgeFlow; float $adjustEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeAdjustEdgeFlow`; floatSliderGrp -e -value $adjustEdgeFlow -enable $insertWithEdgeFlow polyDuplicateEdgeAdjustEdgeFlowSlider; } global proc performPolyDuplicateEdgeSetup (string $parent, int $forceFactorySettings) { setOptionVars($forceFactorySettings); setParent $parent; if (`optionVar -q polyDuplicateEdgeAsTool`) { performPolyDuplicateEdgeToolSetup(); } else { performPolyDuplicateEdgeActionSetup(); } } proc performPolyDuplicateEdgeToolCallback (string $parent, int $doIt) { setParent $parent; optionVar -floatValue polyDuplicateEdgeVertexOffset `floatSliderGrp -query -value polyDuplicateEdgeVertexOffset`; optionVar -intValue polyDuplicateEdgeDeleteEdge `checkBoxGrp -query -value1 polyDuplicateEdgeDeleteEdge`; int $ival = `radioButtonGrp -query -select polyDuplicateEdgeAutoCompleteRadio`; // Radio is 1=AutoComplete, 2=No AutoComplete if( $ival == 2 ){ $ival = 0; } optionVar -intValue polyDuplicateEdgeAutoComplete $ival; ; $ival = `radioButtonGrp -query -select polyDuplicateSplitTypeRadio`; // Radio is 1=Absolute, 2= relative if( $ival == 2 ){ $ival = 0; } optionVar -intValue polyDuplicateEdgeSplitType $ival; optionVar -floatValue PolySelectEditDuplicateEdgeSmoothAngle `floatSliderGrp -query -value polyDuplicateEdgeSmoothAngleSlider`; optionVar -intValue PolySelectEditDuplicateEdgeInsertWithEdgeFlow `checkBoxGrp -q -value1 polyDuplicateEdgeInsertWithEdgeFlow`; optionVar -floatValue PolySelectEditDuplicateEdgeAdjustEdgeFlow `floatSliderGrp -q -value polyDuplicateEdgeAdjustEdgeFlowSlider`; if ($doIt) { performPolyDuplicateEdge 0; addToRecentCommandQueue "performPolyDuplicateEdge 0" "PolyDuplicateEdge"; } } proc performPolyDuplicateEdgeActionCallback (string $parent, int $doIt) { setParent $parent; optionVar -floatValue polyDuplicateEdgeOffset `floatSliderGrp -query -value polyDuplicateEdgeOffset`; optionVar -floatValue polyDuplicateEdgeVertexOffset `floatSliderGrp -query -value polyDuplicateEdgeVertexOffset`; optionVar -intValue polyDuplicateEdgeDeleteEdge `checkBoxGrp -query -value1 polyDuplicateEdgeDeleteEdge`; optionVar -floatValue PolySelectEditDuplicateEdgeSmoothAngle `floatSliderGrp -query -value polyDuplicateEdgeSmoothAngleSlider`; int $ival = `radioButtonGrp -query -select polyDuplicateSplitTypeRadioAction`; // Radio is 1=Absolute, 2= relative if( $ival == 2 ){ $ival = 0; } optionVar -intValue polyDuplicateEdgeSplitType $ival; optionVar -intValue PolySelectEditDuplicateEdgeInsertWithEdgeFlow `checkBoxGrp -q -value1 polyDuplicateEdgeInsertWithEdgeFlow`; optionVar -floatValue PolySelectEditDuplicateEdgeAdjustEdgeFlow `floatSliderGrp -q -value polyDuplicateEdgeAdjustEdgeFlowSlider`; if ($doIt) { performPolyDuplicateEdge 0; addToRecentCommandQueue "performPolyDuplicateEdge 0" "PolyDuplicateEdge"; } } global proc performPolyDuplicateEdgeCallback (string $parent, int $doIt) { if (`optionVar -q polyDuplicateEdgeAsTool`) { performPolyDuplicateEdgeToolCallback($parent, $doIt); } else { performPolyDuplicateEdgeActionCallback($parent, $doIt); } } proc createToolOptionsUI() { // 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 = "performPolyDuplicateEdge"; string $callback = ($commandName + "Callback"); string $setup = ($commandName + "Setup"); // Form layout string $parent = `formLayout polyDuplicateEdgeToolOptions`; // Description frame string $descriptionFrame = `frameLayout -label (uiRes("m_performPolyDuplicateEdge.kToolDescriptionFrame")) -mw $gOptionBoxTemplateDescriptionMarginWidth`; text (uiRes("m_performPolyDuplicateEdge.kToolDescription")); setParent $parent; // Settings frame string $settingsFrame = `frameLayout -label (uiRes("m_performPolyDuplicateEdge.kToolSettingsFrame"))`; columnLayout; checkBoxGrp -label1 (uiRes("m_performPolyDuplicateEdge.kToolDeleteEdge")) polyDuplicateEdgeDeleteEdge; checkBoxGrp -label1 (uiRes("m_performPolyDuplicateEdge.kToolInsertWithEdgeFlow")) -changeCommand1 ("setParent " + $parent + "; floatSliderGrp -e -enable #1 polyDuplicateEdgeAdjustEdgeFlowSlider;") polyDuplicateEdgeInsertWithEdgeFlow; floatSliderGrp -field true -label (uiRes("m_performPolyDuplicateEdge.kToolAdjustEdgeFlow")) -min 0.0 -max 1.0 -fieldMinValue -1000000 -fieldMaxValue 1000000 polyDuplicateEdgeAdjustEdgeFlowSlider; floatSliderGrp -label (uiRes("m_performPolyDuplicateEdge.kToolStartEndVertexOffset")) -min -1 -max 1 -fmx 1 polyDuplicateEdgeVertexOffset; floatSliderGrp -field true -label (uiRes("m_performPolyDuplicateEdge.kToolSmoothingAngle")) -min 0.0 -max 180.0 -v 180.0 polyDuplicateEdgeSmoothAngleSlider; radioButtonGrp -numberOfRadioButtons 2 -vr -label (uiRes("m_performPolyDuplicateEdge.kToolToolCompletion")) -labelArray2 (uiRes("m_performPolyDuplicateEdge.kToolAutomatically")) (uiRes("m_performPolyDuplicateEdge.kToolPressEnter")) polyDuplicateEdgeAutoCompleteRadio; radioButtonGrp -l (uiRes("m_performPolyDuplicateEdge.kMaintainPosition")) -numberOfRadioButtons 2 -label1 (uiRes("m_performPolyDuplicateEdge.kRelDistance")) -label2 (uiRes("m_performPolyDuplicateEdge.kEqDistance")) -cc1 "polySelectEditCtx -e -splitType 1 polySelectEditContext" -cc2 "polySelectEditCtx -e -splitType 0 polySelectEditContext" -vertical polyDuplicateSplitTypeRadio; setParent ..; // columnLayout setParent $parent; // frameLayout setParent ..; // formLayout // 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_performPolyDuplicateEdge.kEnterToolAndClose")) $applyClose; string $applyBtn = getOptionBoxApplyBtn(); button -edit -label (uiRes("m_performPolyDuplicateEdge.kEnterTool")) -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_performPolyDuplicateEdge.kOffsetEdgeToolOptions")) ); setOptionBoxHelpTag("DuplicateEdges"); eval (($setup + " " + $parent + " " + 0)); } proc createActionOptionsUI() { // 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 = "performPolyDuplicateEdge"; string $callback = ($commandName + "Callback"); string $setup = ($commandName + "Setup"); // Form layout string $parent = `formLayout polyDuplicateEdgeOptions`; // Description frame string $descriptionFrame = `frameLayout -label (uiRes("m_performPolyDuplicateEdge.kActionDescriptionFrame")) -mw $gOptionBoxTemplateDescriptionMarginWidth`; text (uiRes("m_performPolyDuplicateEdge.kActionDescription")); setParent $parent; // Settings frame string $settingsFrame = `frameLayout -label (uiRes("m_performPolyDuplicateEdge.kActionSettingsFrame"))`; columnLayout; checkBoxGrp -label1 (uiRes("m_performPolyDuplicateEdge.kActionDeleteEdge")) polyDuplicateEdgeDeleteEdge; checkBoxGrp -label1 (uiRes("m_performPolyDuplicateEdge.kActionInsertWithEdgeFlow")) -changeCommand1 ("setParent " + $parent + "; floatSliderGrp -e -enable #1 polyDuplicateEdgeAdjustEdgeFlowSlider;") polyDuplicateEdgeInsertWithEdgeFlow; floatSliderGrp -field true -label (uiRes("m_performPolyDuplicateEdge.kActionAdjustEdgeFlow")) -min 0.0 -max 1.0 -fieldMinValue -1000000 -fieldMaxValue 1000000 polyDuplicateEdgeAdjustEdgeFlowSlider; floatSliderGrp -label (uiRes("m_performPolyDuplicateEdge.kActionEdgeOffset")) -min 0 -max 1 -fmx 1 polyDuplicateEdgeOffset; floatSliderGrp -label (uiRes("m_performPolyDuplicateEdge.kActionStartEndVertexOffset")) -min -1 -max 1 -fmx 1 polyDuplicateEdgeVertexOffset; floatSliderGrp -field true -label (uiRes("m_performPolyDuplicateEdge.kActionSmoothingAngle")) -min 0.0 -max 180.0 -v 180.0 polyDuplicateEdgeSmoothAngleSlider; radioButtonGrp -l (uiRes("m_performPolyDuplicateEdge.kMaintainPositionAction")) -numberOfRadioButtons 2 -label1 (uiRes("m_performPolyDuplicateEdge.kRelDistanceAction")) -label2 (uiRes("m_performPolyDuplicateEdge.kEqDistanceAction")) -cc1 "polySelectEditCtx -e -splitType 1 polySelectEditContext" -cc2 "polySelectEditCtx -e -splitType 0 polySelectEditContext" -vertical polyDuplicateSplitTypeRadioAction; 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 $applyBtn = getOptionBoxApplyBtn(); button -edit -label (uiRes("m_performPolyDuplicateEdge.kActionOffsetEdge")) -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_performPolyDuplicateEdge.kActionOffsetEdgeOptions")) ); setOptionBoxHelpTag("DuplicateEdges"); eval (($setup + " " + $parent + " " + 0)); } proc polyDuplicateEdgeOptions () { global string $gOptionBoxActionToolItem; $gOptionBoxActionToolItem = "polyDuplicateEdgeAsTool"; global string $gOptionBoxActionToolItemCB; $gOptionBoxActionToolItemCB = "performPolyDuplicateEdge 1"; if (`optionVar -q polyDuplicateEdgeAsTool`) { createToolOptionsUI(); } else { createActionOptionsUI(); } showOptionBox(); } proc string assembleToolCmd() { string $cmd = "polySelectEditCtx -e -mode 0"; float $off; $off=`optionVar -query polyDuplicateEdgeVertexOffset`; // Same value is applied to both ends. Can be customized to // control separately $cmd+=(" -startVertexOffset " + $off); $cmd+=(" -endVertexOffset " + $off); int $ival = `optionVar -query polyDuplicateEdgeDeleteEdge`; $cmd+=(" -deleteEdge " + $ival); $iVal = `optionVar -q polyDuplicateEdgeAutoComplete`; $cmd += " -autoComplete " + $iVal; $ival = `optionVar -q polyDuplicateEdgeSplitType`; $cmd += " -splitType " + $ival; float $sma; $sma = `optionVar -query PolySelectEditDuplicateEdgeSmoothAngle`; $cmd += " -smoothingAngle " + $sma; int $insertWithEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeInsertWithEdgeFlow`; $cmd += " -insertWithEdgeFlow " + $insertWithEdgeFlow; float $adjustEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeAdjustEdgeFlow`; $cmd += " -adjustEdgeFlow " + $adjustEdgeFlow; $cmd += " polySelectEditContext; setToolTo polySelectEditContext"; return $cmd; } proc string assembleActionCmd() { string $cmd; int $doHistory = `constructionHistory -q -toggle`; $cmd=("polyDuplicateEdge -ch " + $doHistory); float $off; $off=`optionVar -query polyDuplicateEdgeOffset`; $cmd+=(" -offset " + $off); $off=`optionVar -query polyDuplicateEdgeVertexOffset`; // Same value is applied to both ends. Can be customized to // control separately $cmd+=(" -startVertexOffset " + $off); $cmd+=(" -endVertexOffset " + $off); int $ival = `optionVar -query polyDuplicateEdgeDeleteEdge`; $cmd+=(" -deleteEdge " + $ival); $ival = `optionVar -q polyDuplicateEdgeSplitType`; $cmd += " -splitType " + $ival; float $fval = `optionVar -query PolySelectEditDuplicateEdgeSmoothAngle`; $cmd+=(" -smoothingAngle " + $fval); int $insertWithEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeInsertWithEdgeFlow`; $cmd += " -insertWithEdgeFlow " + $insertWithEdgeFlow; float $adjustEdgeFlow = `optionVar -q PolySelectEditDuplicateEdgeAdjustEdgeFlow`; $cmd += " -adjustEdgeFlow " + $adjustEdgeFlow; return $cmd; } proc string assembleCmd() { setOptionVars (false); string $cmd; if (`optionVar -q polyDuplicateEdgeAsTool`) { $cmd = assembleToolCmd(); } else { $cmd = assembleActionCmd(); } return $cmd; } global proc string performPolyDuplicateEdge(int $option) { setOptionVars(0); string $cmd=""; switch ($option) { case 0: $cmd = assembleCmd(); evalEcho $cmd; break; case 1: polyDuplicateEdgeOptions; break; case 2: $cmd="performPolyDuplicateEdge 0"; break; } return $cmd; }