// =========================================================================== // 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. // =========================================================================== // // // // // // Description: // // // Procedure Name: // performPolySmooth // // Description: // perform a smooth of the selected polygon objects // // Input Arguments: // $option : Whether to set the options to default values. // Return Value: // command string iff $option==2 // proc setOptionVars (int $forceFactorySettings) { // -mth/method option if ($forceFactorySettings || !`optionVar -exists polySmoothMethod`) optionVar -intValue polySmoothMethod 1; // -df/divisions option if ($forceFactorySettings || !`optionVar -exists polySubdivisionType`) optionVar -intValue polySubdivisionType 2; if ($forceFactorySettings || !`optionVar -exists polySmoothOsdVertBoundary`) optionVar -intValue polySmoothOsdVertBoundary 1; // Smooth: Sharp Edges and Corners if ($forceFactorySettings || !`optionVar -exists polySmoothOsdFvarBoundary`) optionVar -intValue polySmoothOsdFvarBoundary 3; // Smooth: All Sharp if ($forceFactorySettings || !`optionVar -exists polySmoothOsdFvarPropagateCorners`) optionVar -intValue polySmoothOsdFvarPropagateCorners 0; if ($forceFactorySettings || !`optionVar -exists polySmoothOsdSmoothTrianglesDeprecated`) optionVar -intValue polySmoothOsdSmoothTrianglesDeprecated 0; if ($forceFactorySettings || !`optionVar -exists polySmoothOsdCreaseMethod`) optionVar -intValue polySmoothOsdCreaseMethod 0; // Normal if ($forceFactorySettings || !`optionVar -exists polyDivisions`) optionVar -intValue polyDivisions 1; // -bnr/boundaryRule option if ($forceFactorySettings || !`optionVar -exists polySmoothBoundaryRule`) { string $boundaryLegacyRules = `getenv "MAYA_SET_BOUNDARY_DEFAULT_TO_LEGACY"`; if ($boundaryLegacyRules == "1") { optionVar -intValue polySmoothBoundaryRule 0; } else { optionVar -intValue polySmoothBoundaryRule 1; } } // -c/continuity option if ($forceFactorySettings || !`optionVar -exists polyContinuity`) optionVar -intValue polyContinuity 1; // -kb/-keepBorder option: Keep edges on geometry border if ($forceFactorySettings || !`optionVar -exists polySmoothKeepBorder`) optionVar -intValue polySmoothKeepBorder 1; // -ksb/-keepSelectionBorder option: Keep edges on selection border if ($forceFactorySettings || !`optionVar -exists polySmoothKeepSelectionBorder`) optionVar -intValue polySmoothKeepSelectionBorder 1; // -khe/-keepHardEdge option: Keep hard edges if ($forceFactorySettings || !`optionVar -exists polySmoothKeepHardEdge`) optionVar -intValue polySmoothKeepHardEdge 0; // -peh/-propagateEdgeHardness option: Pass on the edge hardness values to the // smoothed mesh if ($forceFactorySettings || !`optionVar -exists polySmoothPropEHardness`) optionVar -intValue polySmoothPropEHardness 0; // -kt/-keepTesselation option: Reuse initial subdivisions on animated objects if ($forceFactorySettings || !`optionVar -exists polySmoothKeepTesselation`) optionVar -intValue polySmoothKeepTesselation 1; // -suv/-smoothUVs option: Smooth UV values if ($forceFactorySettings || !`optionVar -exists polySmoothSmoothUVs`) optionVar -intValue polySmoothSmoothUVs 1; // -kmb/-keepMapBorders option: Perserve the UV Map Border (Smooth UVs on only) if ($forceFactorySettings || !`optionVar -exists polySmoothKeepMapBorders`) optionVar -intValue polySmoothKeepMapBorders 2; // linear smooth options if ($forceFactorySettings || !`optionVar -exists polySmoothNumIter`) optionVar -intValue polySmoothNumIter 1; if ($forceFactorySettings || !`optionVar -exists polySmoothEdivisions`) optionVar -intValue polySmoothEdivisions 1; if ($forceFactorySettings || !`optionVar -exists polySmoothVolume`) optionVar -floatValue polySmoothVolume 0.1; if ($forceFactorySettings || !`optionVar -exists polySmoothRoundness`) optionVar -floatValue polySmoothRoundness 1.0; } proc int polySubdivisionTypeFromMenu (string $parent) { setParent $parent; // Convert from 1-based menu index to subdiv type enum int $termItem = `radioButtonGrp -q -sl polySubdivisionType`; if ($termItem == 2) { return 2; // kOpenSubdivCatmullClarkUniform } else { return 0; // kCatmullClark (default) } } proc int polySubdivisionTypeToMenu () { int $subd = `optionVar -q polySubdivisionType`; if ($subd > 1) { $subd -= 1; } // enum value of 1 is unused return $subd + 1; // Menus are 1-based } global proc polySmoothVisibility() // Description: // Dim/show exponential/linear frames according to method // { int $showLinear = `radioButtonGrp -query -select polySmoothMethod` - 1; // radioButtonGrp is 1 based frameLayout -edit -enable (1 - $showLinear) polySmoothExponentialFrame; frameLayout -edit -enable $showLinear polySmoothLinearFrame; } global proc performPolySmoothSetup (string $parent, int $forceFactorySettings) { setOptionVars($forceFactorySettings); setParent $parent; // -mth/method option int $ival = `optionVar -query polySmoothMethod`; radioButtonGrp -edit -select $ival polySmoothMethod; // smooth options $ival = `polySubdivisionTypeToMenu`; radioButtonGrp -e -sl $ival polySubdivisionType; $ival = `optionVar -query polySmoothOsdVertBoundary`; // 1-2 radioButtonGrp -edit -select $ival polySmoothOsdVertBoundary; // 1-2 $ival = `optionVar -query polySmoothOsdFvarBoundary`; // 0-3 radioButtonGrp -edit -select ($ival+1) polySmoothOsdFvarBoundary; // 1-4 $ival = `optionVar -query polySmoothOsdFvarPropagateCorners`; checkBoxGrp -edit -value1 $ival polySmoothOsdFvarPropagateCorners; $ival = `optionVar -query polySmoothOsdSmoothTrianglesDeprecated`; checkBoxGrp -edit -value1 $ival polySmoothOsdSmoothTriangles; $ival = `optionVar -query polySmoothOsdCreaseMethod`; // 0-1 radioButtonGrp -edit -select ($ival+1) polySmoothOsdCreaseMethod; // 1-2 $ival = `optionVar -query polyDivisions`; intSliderGrp -edit -value $ival polyDivisions; $ival = `optionVar -query polySmoothBoundaryRule`; if ($ival < 0 || $ival > 2) $ival = 1; string $boundaryLegacyRules = `getenv "MAYA_SET_BOUNDARY_DEFAULT_TO_LEGACY"`; if ($boundaryLegacyRules == "1") { optionVar -iv polySmoothBoundaryRule 0; $ival = 0; } radioButtonGrp -edit -select ($ival + 1) polySmoothBoundaryRule; float $fval = `optionVar -query polyContinuity`; floatSliderGrp -edit -value $fval polyContinuity; $ival = `optionVar -query polySmoothKeepBorder`; checkBoxGrp -edit -value1 $ival polySmoothKeepBorder; $ival = `optionVar -query polySmoothKeepSelectionBorder`; checkBoxGrp -edit -value1 $ival polySmoothKeepSelectionBorder; $ival = `optionVar -query polySmoothKeepHardEdge`; checkBoxGrp -edit -value1 $ival polySmoothKeepHardEdge; $ival = `optionVar -query polySmoothPropEHardness`; checkBoxGrp -edit -value1 $ival polySmoothPropEHardness; $ival = `optionVar -query polySmoothKeepTesselation`; checkBoxGrp -edit -value1 $ival polySmoothKeepTesselation; $ival = `optionVar -query polySmoothSmoothUVs`; checkBoxGrp -edit -value1 $ival polySmoothSmoothUVs; $ival = `optionVar -query polySmoothKeepMapBorders`; radioButtonGrp -edit -select $ival polySmoothKeepMapBorders; // linear options $ival = `optionVar -query polySmoothNumIter`; intSliderGrp -edit -value $ival polySmoothNumIter; $ival = `optionVar -query polySmoothEdivisions`; intSliderGrp -edit -value $ival polySmoothEdivisions; $fval = `optionVar -query polySmoothVolume`; floatSliderGrp -edit -value $fval polySmoothVolume; $fval = `optionVar -query polySmoothRoundness`; floatSliderGrp -edit -value $fval polySmoothRoundness; polySmoothVisibility(); polySmoothSubdivisionTypeChanged(); } global proc performPolySmoothCallback (string $parent, int $doIt) { setParent $parent; optionVar -intValue polySmoothMethod `radioButtonGrp -q -select polySmoothMethod`; // Exponential Options optionVar -intValue polySubdivisionType `polySubdivisionTypeFromMenu $parent`; optionVar -intValue polySmoothOsdVertBoundary `radioButtonGrp -query -select polySmoothOsdVertBoundary`; // 1-2 --> 1-2 optionVar -intValue polySmoothOsdFvarBoundary (`radioButtonGrp -query -select polySmoothOsdFvarBoundary` - 1); // 1-4 --> 0-3 optionVar -intValue polySmoothOsdFvarPropagateCorners `checkBoxGrp -query -value1 polySmoothOsdFvarPropagateCorners`; optionVar -intValue polySmoothOsdSmoothTrianglesDeprecated `checkBoxGrp -query -value1 polySmoothOsdSmoothTriangles`; optionVar -intValue polySmoothOsdCreaseMethod (`radioButtonGrp -query -select polySmoothOsdCreaseMethod` - 1); // 1-2 --> 0-1 optionVar -intValue polyDivisions `intSliderGrp -query -value polyDivisions`; optionVar -floatValue polySmoothBoundaryRule (`radioButtonGrp -query -select polySmoothBoundaryRule` - 1); optionVar -floatValue polyContinuity `floatSliderGrp -query -value polyContinuity`; optionVar -intValue polySmoothKeepBorder `checkBoxGrp -query -value1 polySmoothKeepBorder`; optionVar -intValue polySmoothKeepSelectionBorder `checkBoxGrp -query -value1 polySmoothKeepSelectionBorder`; optionVar -intValue polySmoothKeepHardEdge `checkBoxGrp -query -value1 polySmoothKeepHardEdge`; optionVar -intValue polySmoothPropEHardness `checkBoxGrp -query -value1 polySmoothPropEHardness`; optionVar -intValue polySmoothKeepTesselation `checkBoxGrp -query -value1 polySmoothKeepTesselation`; optionVar -intValue polySmoothSmoothUVs `checkBoxGrp -query -value1 polySmoothSmoothUVs`; optionVar -intValue polySmoothKeepMapBorders `radioButtonGrp -query -select polySmoothKeepMapBorders`; // linear options optionVar -intValue polySmoothNumIter `intSliderGrp -query -value polySmoothNumIter`; optionVar -intValue polySmoothEdivisions `intSliderGrp -query -value polySmoothEdivisions`; optionVar -floatValue polySmoothVolume `floatSliderGrp -query -value polySmoothVolume`; optionVar -floatValue polySmoothRoundness `floatSliderGrp -query -value polySmoothRoundness`; if ($doIt) { performPolySmooth 0; addToRecentCommandQueue "performPolySmooth 0" "PolySmooth"; } } global proc polySmoothSubdivisionTypeChanged() { int $isOpenSubdiv = (`radioButtonGrp -q -sl polySubdivisionType` == 2); int $isMayaCC = ! $isOpenSubdiv; frameLayout -edit -enable $isOpenSubdiv polySmoothOpenSubdivFrame; frameLayout -edit -enable $isMayaCC polySmoothMayaCCFrame; } proc polySmoothOptions () { // Global template variables for form spacing global int $gOptionBoxTemplateFrameSpacing; string $commandName = "performPolySmooth"; string $callback = ($commandName + "Callback"); string $setup = ($commandName + "Setup"); string $layout = getOptionBox(); setParent $layout; setUITemplate -pushTemplate OptionBoxTemplate; scrollLayout; // Form layout string $parent = `formLayout polySmoothOptions`; string $divisionLevels = (uiRes("m_performPolySmooth.kDivisionLevels")); // Settings frame string $settingsFrame = `frameLayout -label (uiRes("m_performPolySmooth.kSettingsFrame"))`; columnLayout; radioButtonGrp -numberOfRadioButtons 2 -vertical -label (uiRes("m_performPolySmooth.kAddDivisions")) -label1 (uiRes("m_performPolySmooth.kExponentially")) -label2 (uiRes("m_performPolySmooth.kLinearly")) -changeCommand "polySmoothVisibility" polySmoothMethod; setParent $parent; // frameLayout // Exponential controls frame string $exponentialFrame = `frameLayout -label (uiRes("m_performPolySmooth.kExponentialFrame")) polySmoothExponentialFrame`; columnLayout; intSliderGrp -label $divisionLevels -minValue 1 -maxValue 4 -fieldMinValue 1 -fieldMaxValue 15 -step 1 polyDivisions; radioButtonGrp -numberOfRadioButtons 2 -vertical -label (uiRes("m_performPolySmooth.kSubdivisionType")) -label1 (uiRes("m_performPolySmooth.kCatmullClark")) -label2 (uiRes("m_performPolySmooth.kOpenSubdivUniform")) -changeCommand "polySmoothSubdivisionTypeChanged" polySubdivisionType; frameLayout -label (uiRes("m_performPolySmooth.kOpenSubdivFrame")) polySmoothOpenSubdivFrame; columnLayout; radioButtonGrp -numberOfRadioButtons 2 -vertical -label (uiRes("m_performPolySmooth.kLabel_osdVertBoundary")) -label1 (uiRes("m_performPolySmooth.kLabel_osdVertBoundary_EdgeAndCorner")) -label2 (uiRes("m_performPolySmooth.kLabel_osdVertBoundary_EdgeOnly")) polySmoothOsdVertBoundary; radioButtonGrp -numberOfRadioButtons 4 -vertical -label (uiRes("m_performPolySmooth.kLabel_osdFvarBoundary")) -label1 (uiRes("m_performPolySmooth.kLabel_osdFvarBoundary_None")) -label2 (uiRes("m_performPolySmooth.kLabel_osdFvarBoundary_EdgeAndCorner")) -label3 (uiRes("m_performPolySmooth.kLabel_osdFvarBoundary_EdgeOnly")) -label4 (uiRes("m_performPolySmooth.kLabel_osdFvarBoundary_AllSharp")) polySmoothOsdFvarBoundary; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kLabel_osdFvarPropagateCorners")) polySmoothOsdFvarPropagateCorners; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kLabel_osdSmoothTriangles")) polySmoothOsdSmoothTriangles; radioButtonGrp -numberOfRadioButtons 2 -vertical -label (uiRes("m_performPolySmooth.kLabel_osdCreaseMethod")) -label1 (uiRes("m_performPolySmooth.kLabel_osdCreaseMethod_Normal")) -label2 (uiRes("m_performPolySmooth.kLabel_osdCreaseMethod_Chaikin")) polySmoothOsdCreaseMethod; setParent ..; // column setParent ..; // OpenSubdiv Frame frameLayout -label (uiRes("m_performPolySmooth.kMayaCCFrame")) polySmoothMayaCCFrame; columnLayout; radioButtonGrp -numberOfRadioButtons 3 -vertical -label (uiRes("m_performPolySmooth.kBoundaryRule")) -label1 (uiRes("m_performPolySmooth.kLegacy")) -label2 (uiRes("m_performPolySmooth.kCreaseAll")) -label3 (uiRes("m_performPolySmooth.kCreaseEdges")) polySmoothBoundaryRule; floatSliderGrp -label (uiRes("m_performPolySmooth.kContinuity")) -minValue 0 -maxValue 1 -step 1 polyContinuity; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kSmoothUVs")) -onCommand1 ("disable -v false polySmoothKeepMapBorders;") -offCommand1 ("disable -v true polySmoothKeepMapBorders;") polySmoothSmoothUVs; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kPropagateEdgeHardness")) polySmoothPropEHardness; radioButtonGrp -numberOfRadioButtons 3 -vertical -label (uiRes("m_performPolySmooth.kMapBorders")) -label1 (uiRes("m_performPolySmooth.kSmoothAll")) -label2 (uiRes("m_performPolySmooth.kSmoothInternal")) -label3 (uiRes("m_performPolySmooth.kDoNotSmooth")) polySmoothKeepMapBorders; checkBoxGrp -label (uiRes("m_performPolySmooth.kPreserve")) -label1 (uiRes("m_performPolySmooth.kGeometryBorders")) polySmoothKeepBorder; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kSelectionBorders")) polySmoothKeepSelectionBorder; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kHardEdges")) polySmoothKeepHardEdge; checkBoxGrp -label1 (uiRes("m_performPolySmooth.kTessellation")) polySmoothKeepTesselation; setParent ..; // column setParent ..; // MayaCC Frame setParent $parent; // frameLayout // Linear controls frame string $linearFrame = `frameLayout -label (uiRes("m_performPolySmooth.kLinearFrame")) polySmoothLinearFrame`; columnLayout; intSliderGrp -label $divisionLevels -minValue 1 -maxValue 4 -step 1 polySmoothNumIter; intSliderGrp -label (uiRes("m_performPolySmooth.kDivisionsPerFace")) -minValue 1 -maxValue 10 -step 1 polySmoothEdivisions; floatSliderGrp -label (uiRes("m_performPolySmooth.kPushStrength")) -minValue -1 -maxValue 1 -step 0.1 polySmoothVolume; floatSliderGrp -label (uiRes("m_performPolySmooth.kRoundness")) -minValue -10 -maxValue 10 -step 1 polySmoothRoundness; setParent $parent; // frameLayout setParent ..; // formLayout // Attach frame to form layout formLayout -edit -attachForm $settingsFrame "top" $gOptionBoxTemplateFrameSpacing -attachForm $settingsFrame "left" $gOptionBoxTemplateFrameSpacing -attachForm $settingsFrame "right" $gOptionBoxTemplateFrameSpacing -attachNone $settingsFrame "bottom" -attachControl $exponentialFrame "top" $gOptionBoxTemplateFrameSpacing $settingsFrame -attachForm $exponentialFrame "left" $gOptionBoxTemplateFrameSpacing -attachForm $exponentialFrame "right" $gOptionBoxTemplateFrameSpacing -attachNone $exponentialFrame "bottom" -attachControl $linearFrame "top" $gOptionBoxTemplateFrameSpacing $exponentialFrame -attachForm $linearFrame "left" $gOptionBoxTemplateFrameSpacing -attachForm $linearFrame "right" $gOptionBoxTemplateFrameSpacing -attachNone $linearFrame "bottom" $parent; string $applyBtn = getOptionBoxApplyBtn(); button -edit -label (uiRes("m_performPolySmooth.kSmoothButton")) -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_performPolySmooth.kSmoothOptions")) ); // Customize the 'Help' menu item text. // setOptionBoxHelpTag( "PolygonsSmooth" ); eval (($setup + " " + $parent + " " + 0)); showOptionBox(); } global proc string performPolySmooth (int $option) { string $cmd=""; switch ($option) { case 0: setOptionVars(false); int $sdt = `optionVar -query polySubdivisionType`; int $ovb = `optionVar -query polySmoothOsdVertBoundary`; int $ofb = `optionVar -query polySmoothOsdFvarBoundary`; int $ofc = `optionVar -query polySmoothOsdFvarPropagateCorners`; int $ost = `optionVar -query polySmoothOsdSmoothTrianglesDeprecated`; int $ocr = `optionVar -query polySmoothOsdCreaseMethod`; int $mth = `optionVar -query polySmoothMethod` - 1; int $dv = `optionVar -query polyDivisions`; int $bndry = `optionVar -query polySmoothBoundaryRule`; float $cont = `optionVar -query polyContinuity`; int $kb = `optionVar -query polySmoothKeepBorder`; int $ksb = `optionVar -query polySmoothKeepSelectionBorder`; int $khe = `optionVar -query polySmoothKeepHardEdge`; int $peh = `optionVar -query polySmoothPropEHardness`; int $kt = `optionVar -query polySmoothKeepTesselation`; int $kmb = `optionVar -query polySmoothKeepMapBorders` -1; int $suvs = `optionVar -query polySmoothSmoothUVs`; // linear options int $niter = `optionVar -query polySmoothNumIter`; int $ediv = `optionVar -query polySmoothEdivisions`; float $volume = `optionVar -query polySmoothVolume`; float $roundness = `optionVar -query polySmoothRoundness`; $cmd = "polySmooth " + " -mth " + $mth // + " -sd " + $sd + " -tr " + $tr + " -sdt " + $sdt + " -ovb " + $ovb + " -ofb " + $ofb + " -ofc " + $ofc + " -ost " + $ost + " -ocr " + $ocr + " -dv " + $dv + " -bnr " + $bndry + " -c " + $cont + " -kb " + $kb + " -ksb " + $ksb + " -khe " + $khe + " -kt " + $kt + " -kmb " + $kmb + " -suv " + $suvs + " -peh " + $peh + " -sl " + $niter + " -dpe " + $ediv + " -ps " + $volume + " -ro " + $roundness; // Get the current value of the "Convert Selection" option var. Then // set the value of the optionVar to do the selection conversion // and finally set it back to the original value, after the operation // has been performed. This is so that the operation succeeds even when // the object (not faces) is selected and "Convert Selection" is not // toggled on. // int $origConvertSelVarValue = `optionVar -query polyAutoConvertAction`; optionVar -intValue polyAutoConvertAction 1; // standard polySmooth polyPerformAction $cmd f 0; // Set the "Convert Selection" option var back to original state. // optionVar -intValue polyAutoConvertAction $origConvertSelVarValue; // make sure node is selected when there is history if ( 0 != size(`ls -sl`) || (0 != size(`ls -hl`)) ) { string $tmp[] = `listHistory`; string $totalSel[]; for ($opNode in $tmp) { if (`nodeType $opNode` == "polySmoothFace") { $totalSel[size($totalSel)] = $opNode; } } if (size($totalSel) > 0) select -add $totalSel[0]; } setToolTo ShowManips; break; case 1: polySmoothOptions; break; default: setOptionVars(false); $mth = `optionVar -query polySmoothMethod` - 1; $sdt = `optionVar -query polySubdivisionType`; $ovb = `optionVar -query polySmoothOsdVertBoundary`; $ofb = `optionVar -query polySmoothOsdFvarBoundary`; $ofc = `optionVar -query polySmoothOsdFvarPropagateCorners`; $ost = `optionVar -query polySmoothOsdSmoothTrianglesDeprecated`; $ocr = `optionVar -query polySmoothOsdCreaseMethod`; $dv = `optionVar -query polyDivisions`; $bndry = `optionVar -query polySmoothBoundaryRule`; $cont = `optionVar -query polyContinuity`; $kb = `optionVar -query polySmoothKeepBorder`; $ksb = `optionVar -query polySmoothKeepSelectionBorder`; $khe = `optionVar -query polySmoothKeepHardEdge`; $peh = `optionVar -query polySmoothPropEHardness`; $kt = `optionVar -query polySmoothKeepTesselation`; $kmb = `optionVar -query polySmoothKeepMapBorders` - 1; $suvs = `optionVar -query polySmoothSmoothUVs`; // linear options $niter = `optionVar -query polySmoothNumIter`; $ediv = `optionVar -query polySmoothEdivisions`; $volume = `optionVar -query polySmoothVolume`; $roundness = `optionVar -query polySmoothRoundness`; // Get the current value of the "Convert Selection" option var. Then // set the value of the optionVar to do the selection conversion // and finally set it back to2 the original value, after the operation // has been performed. This is so that the operation succeeds even when // the object (not faces) is selected and "Convert Selection" is not // toggled on. // $origConvertSelVarValue = `optionVar -query polyAutoConvertAction`; optionVar -intValue polyAutoConvertAction 1; // standard polySmooth $cmd = "polySmooth " + " -mth " + $mth + " -sdt " + $sdt + " -ovb " + $ovb + " -ofb " + $ofb + " -ofc " + $ofc + " -ost " + $ost + " -ocr " + $ocr + " -dv " + $dv + " -peh " + $peh + " -bnr " + $bndry + " -c " + $cont + " -kb " + $kb + " -ksb " + $ksb + " -khe " + $khe + " -kt " + $kt + " -kmb " + $kmb + " -suv " + $suvs + " -sl " + $niter + " -dpe " + $ediv + " -ps " + $volume + " -ro " + $roundness; $cmd = ("polyPerformAction \"" + $cmd + "\" f 0"); // Set the "Convert Selection" option var back to original state. // optionVar -intValue polyAutoConvertAction $origConvertSelVarValue; } return $cmd; }