// =========================================================================== // 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) { if ($forceFactorySettings || !`optionVar -exists "polyProjectCurveDirection"`) optionVar -intValue "polyProjectCurveDirection" 1; if ($forceFactorySettings || !`optionVar -exists "polyProjectCurveToEdgesOnly"`) optionVar -intValue "polyProjectCurveToEdgesOnly" 0; if ($forceFactorySettings || !`optionVar -exists "polyProjectCurveSamples"`) optionVar -intValue "polyProjectCurveSamples" 50; if ($forceFactorySettings || !`optionVar -exists "polyProjectCurveAutoSample"`) optionVar -intValue "polyProjectCurveAutoSample" true; if ($forceFactorySettings || !`optionVar -exists "polyProjectCurveTolerance"`) optionVar -fv "polyProjectCurveTolerance" 0.001; } global proc performProjectCurveOnMeshSetup (string $parent, int $forceFactorySettings) { setOptionVars($forceFactorySettings); setParent $parent; int $selection = `optionVar -q "polyProjectCurveDirection"`; if ($selection < 1 || $selection > 4) $selection = 1; radioButtonGrp -edit -select $selection polyProjectCurveDirection; int $edgesOnly = `optionVar -q "polyProjectCurveToEdgesOnly"`; checkBoxGrp -edit -value1 $edgesOnly polyProjectCurveToEdgesOnly; int $samples = `optionVar -q "polyProjectCurveSamples"`; intSliderGrp -edit -value $samples polyProjectCurveSamples; int $auto = `optionVar -q "polyProjectCurveAutoSample"`; checkBoxGrp -edit -value1 $auto polyProjectCurveAutoSample; float $tolerance = `optionVar -q "polyProjectCurveTolerance"`; floatFieldGrp -e -v1 $tolerance polyProjectCurveTolerance; } global proc performProjectCurveOnMeshCallback (string $parent, int $doIt) { setParent $parent; int $whichDir = `radioButtonGrp -q -select polyProjectCurveDirection`; optionVar -intValue "polyProjectCurveDirection" $whichDir; int $edgesOnly = `checkBoxGrp -q -value1 polyProjectCurveToEdgesOnly`; optionVar -intValue "polyProjectCurveToEdgesOnly" $edgesOnly; int $samples = `intSliderGrp -q -value polyProjectCurveSamples`; optionVar -intValue "polyProjectCurveSamples" $samples; int $auto = `checkBoxGrp -q -value1 polyProjectCurveAutoSample`; optionVar -intValue "polyProjectCurveAutoSample" $auto; float $tolerance = `floatFieldGrp -q -v1 polyProjectCurveTolerance`; optionVar -fv "polyProjectCurveTolerance" $tolerance; if ($doIt) { performProjectCurveOnMesh 0; addToRecentCommandQueue "performProjectCurveOnMesh 0" "ProjectCurveOnMesh"; } } proc projectCurveOnMeshOptions() { global int $gOptionBoxTemplateFrameSpacing; string $layout = getOptionBox(); setParent $layout; setUITemplate -pushTemplate OptionBoxTemplate; string $commandName = "performProjectCurveOnMesh"; string $callback = ($commandName + "Callback"); string $setup = ($commandName + "Setup"); // Form layout string $parent = `formLayout projectCurveOnMeshOptions`; // Settings frame string $settingsFrame = `frameLayout -label (uiRes("m_performProjectCurveOnMesh.kSettingsFrame"))`; columnLayout; radioButtonGrp -numberOfRadioButtons 4 -vertical -label (uiRes("m_performProjectCurveOnMesh.kProjectDirections")) -label1 (uiRes("m_performProjectCurveOnMesh.kProjectDirections1")) -label2 (uiRes("m_performProjectCurveOnMesh.kProjectDirections2")) -label3 (uiRes("m_performProjectCurveOnMesh.kProjectDirections3")) -label4 (uiRes("m_performProjectCurveOnMesh.kProjectDirections4")) polyProjectCurveDirection; checkBoxGrp -label (uiRes("m_performProjectCurveOnMesh.kAutoSample")) -numberOfCheckBoxes 1 polyProjectCurveAutoSample; intSliderGrp -label (uiRes("m_performProjectCurveOnMesh.kCurveSamples")) -field true -minValue 2 -maxValue 500 -fieldMaxValue 10000 polyProjectCurveSamples; checkBoxGrp -label (uiRes("m_performProjectCurveOnMesh.kEdgesOnly")) -numberOfCheckBoxes 1 polyProjectCurveToEdgesOnly; floatFieldGrp -l (uiRes("m_performProjectCurveOnMesh.kTolerance")) polyProjectCurveTolerance; setParent ..; // columnLayout setParent $parent; // frameLayout setParent ..; // formLayout // Attach frame to form layout formLayout -e -af $settingsFrame "top" $gOptionBoxTemplateFrameSpacing -af $settingsFrame "left" $gOptionBoxTemplateFrameSpacing -af $settingsFrame "right" $gOptionBoxTemplateFrameSpacing -an $settingsFrame "bottom" $parent; setUITemplate -popTemplate; string $applyBtn = getOptionBoxApplyBtn(); button -edit -label (uiRes("m_performProjectCurveOnMesh.kApplyButton")) -command ($callback + " " + $parent + " " + 1) $applyBtn; string $applyCloseBtn = getOptionBoxApplyAndCloseBtn(); button -edit -label (uiRes("m_performProjectCurveOnMesh.kApplyAndCloseButton")) $applyCloseBtn; string $saveBtn = getOptionBoxSaveBtn(); button -edit -command ($callback + " " + $parent + " " + 0 + "; hideOptionBox") $saveBtn; string $resetBtn = getOptionBoxResetBtn(); button -edit -command ($setup + " " + $parent + " " + 1) $resetBtn; setOptionBoxTitle( (uiRes("m_performProjectCurveOnMesh.kProjectCurveOnMeshOptions")) ); setOptionBoxHelpTag("ProjectCurveOnMesh"); eval (($setup + " " + $parent + " " + 0)); showOptionBox(); } proc string pieceTogetherCmd( int $doHistory, int $whichDir, int $edgesOnly, int $auto, int $samples, float $tolerance) { string $cmd = "polyProjectCurve -ch " + $doHistory; if (1 < $whichDir) { $cmd = $cmd + " -direction "; if (2 == $whichDir) $cmd += ("1 0 0"); else if (3 == $whichDir) $cmd += ("0 1 0"); else if (4 == $whichDir) $cmd += ("0 0 1"); } $cmd += (" -pointsOnEdges " + $edgesOnly); $cmd += (" -curveSamples " + $samples); $cmd += (" -automatic " + $auto); $cmd += (" -tolerance " + $tolerance); return $cmd ; } global proc doProjectCurveOnMesh(int $doHistory, int $whichDir, int $edgesOnly, int $auto, int $samples, float $tolerance) { global int $gSelectNurbsCurvesBit; global int $gSelectMeshesBit; string $curveList[] = `filterExpand -ex true -sm $gSelectNurbsCurvesBit`; string $meshList[] = `filterExpand -ex true -sm $gSelectMeshesBit`; int $curveCount = `size $curveList`; int $meshCount = `size $meshList`; if (0 < $curveCount && 0 < $meshCount) { string $cmd = pieceTogetherCmd($doHistory, $whichDir, $edgesOnly, $auto, $samples, $tolerance); $cmd = appendToCmdPlaceHoldersForSelectionItems($cmd, 2) ; string $pair[2] ; string $projectResults[] ; for( $curve in $curveList ) { $pair[0] = $curve; for( $mesh in $meshList ) { $pair[1] = $mesh; string $results[] = executeCmdOnItems($cmd, $pair); $projectResults = stringArrayCatenate($projectResults, $results); } } int $resultCount = size($projectResults) ; if( $resultCount > 0 ) { string $selectString; $selectString = "select -r "; for( $i = 0 ; $i < $resultCount ; $i++ ) { $selectString += $projectResults[$i] ; $selectString += " "; } $selectString += ";" ; eval($selectString) ; } } else { warning( (uiRes("m_performProjectCurveOnMesh.kWrongSelection")) ); } } proc string assembleCmd() { setOptionVars (false); string $cmd = "doProjectCurveOnMesh ("; int $history = `constructionHistory -q -tgl`; $cmd = $cmd + $history ; int $whichDir = `optionVar -q "polyProjectCurveDirection"`; $cmd = $cmd + ", " + $whichDir; int $edgesOnly = `optionVar -q "polyProjectCurveToEdgesOnly"`; $cmd = $cmd + ", " + $edgesOnly; int $auto = `optionVar -q "polyProjectCurveAutoSample"`; $cmd = $cmd + ", " + $auto; int $samples = `optionVar -q "polyProjectCurveSamples"`; $cmd = $cmd + ", " + $samples; float $tolerance = `optionVar -q "polyProjectCurveTolerance"`; $cmd = $cmd + ", " + $tolerance; $cmd = $cmd + ")" ; return $cmd ; } global proc string performProjectCurveOnMesh(int $operation) { string $cmd=""; switch ($operation) { case 0: $cmd = `assembleCmd`; eval($cmd); break; case 1: projectCurveOnMeshOptions(); break; case 2: $cmd="performProjectCurveOnMesh 0"; break; } return $cmd; }