// =========================================================================== // 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: // This script provides an option box dialog for the texture deformer command. // // source deformerOptionsTemplate.mel; // // Procedure Name: // textureDeformerSetOptionVars // // Description: // Initialize the texture deformer's specific option values. // // Input Arguments: // forceFactorySettings - Whether to set the options to default values. // // Return Value: // None. // global proc textureDeformerSetOptionVars(int $forceFactorySettings) { if ($forceFactorySettings || !`optionVar -exists textureDeformerDirection`) { optionVar -intValue textureDeformerDirection 2; } if ($forceFactorySettings || !`optionVar -exists textureDeformerPointSpace`) { optionVar -intValue textureDeformerPointSpace 3; } if ($forceFactorySettings || !`optionVar -exists textureDeformerVectorSpace`) { optionVar -intValue textureDeformerVectorSpace 1; } if ($forceFactorySettings || !`optionVar -exists textureDeformerStrength`) { optionVar -floatValue textureDeformerStrength 1.0; } if ($forceFactorySettings || !`optionVar -exists textureDeformerOffset`) { optionVar -floatValue textureDeformerOffset 0.0; } if ($forceFactorySettings || !`optionVar -exists textureDeformerVectorStrength`) { optionVar -clearArray textureDeformerVectorStrength; optionVar -floatValueAppend textureDeformerVectorStrength 1.0; optionVar -floatValueAppend textureDeformerVectorStrength 1.0; optionVar -floatValueAppend textureDeformerVectorStrength 1.0; } if ($forceFactorySettings || !`optionVar -exists textureDeformerVectorOffset`) { optionVar -clearArray textureDeformerVectorOffset; optionVar -floatValueAppend textureDeformerVectorOffset 0.0; optionVar -floatValueAppend textureDeformerVectorOffset 0.0; optionVar -floatValueAppend textureDeformerVectorOffset 0.0; } if ($forceFactorySettings || !`optionVar -exists textureDeformerEnvelope`) { optionVar -floatValue textureDeformerEnvelope 1.0; } } // // Procedure Name: // textureDeformerSetup // // Description: // Update the texture deformer tab in the option box UI to reflect the option values. // // Input Arguments: // parent - Top level parent layout of the option box UI. // Required so that UI object names can be // successfully resolved. // // forceFactorySettings - Whether the option values should be set to // default values. // tabIndex - 0 = both tabs, 1 = basic, 2 = advanced // // Return Value: // None. // global proc textureDeformerSetup(string $parent, int $forceFactorySettings, int $tabIndex) { // set parent of UI setParent $parent; // Query the optionVar's and set the values into the controls if ($tabIndex != 2) { // set envelope control float $envelope = `optionVar -query textureDeformerEnvelope`; floatSliderGrp -edit -value $envelope textureDeformerEnvelopeWidget; // set deformer direction UI int $direction = `optionVar -query textureDeformerDirection`; if (`optionMenuGrp -exists textureDeformerDirectionWidget`) { optionMenuGrp -edit -select $direction textureDeformerDirectionWidget; switchDirection(); } // set strength UI float $strength = `optionVar -query textureDeformerStrength`; floatSliderGrp -edit -value $strength textureDeformerStrengthWidget; // set offset UI float $offset = `optionVar -query textureDeformerOffset`; floatSliderGrp -edit -value $offset textureDeformerOffsetWidget; // set vectorStrength UI float $vectorStrength[] = `optionVar -query textureDeformerVectorStrength`; floatFieldGrp -edit -value1 $vectorStrength[0] -value2 $vectorStrength[1] -value3 $vectorStrength[2] textureDeformerVectorStrengthWidget; // set vectorOffset UI float $vectorOffset[] = `optionVar -query textureDeformerVectorOffset`; floatFieldGrp -edit -value1 $vectorOffset[0] -value2 $vectorOffset[1] -value3 $vectorOffset[2] textureDeformerVectorOffsetWidget; // set deformer vector space UI int $vectorSpace = `optionVar -query textureDeformerVectorSpace`; if (`optionMenuGrp -exists textureDeformerVectorSpaceWidget`) { optionMenuGrp -edit -select $vectorSpace textureDeformerVectorSpaceWidget; } // set deformer point space UI int $pointSpace = `optionVar -query textureDeformerPointSpace`; if (`optionMenuGrp -exists textureDeformerPointSpaceWidget`) { optionMenuGrp -edit -select $pointSpace textureDeformerPointSpaceWidget; } } } // // Description: // Update the texture deformer option values with the // current state of the option box UI. // // // Input Arguments: // parent - Top level parent layout of the option box UI. Required so // that UI object names can be successfully resolved. // // doIt - Whether the command "textureDeformer" should execute. // // Return Value: // None. // global proc textureDeformerCallback(string $parent, int $doIt) { setParent $parent; // Overall envelope control optionVar -floatValue textureDeformerEnvelope `floatSliderGrp -query -value textureDeformerEnvelopeWidget`; // pointSpace of the texture deformer in the DG int $pointSpaceOption = 1; if (`optionMenuGrp -exists textureDeformerPointSpaceWidget`) { $pointSpaceOption = `optionMenuGrp -query -select textureDeformerPointSpaceWidget`; } optionVar -intValue textureDeformerPointSpace $pointSpaceOption; // direction of the texture deformer in the DG int $directionOption = 1; if (`optionMenuGrp -exists textureDeformerDirectionWidget`) { $directionOption = `optionMenuGrp -query -select textureDeformerDirectionWidget`; } optionVar -intValue textureDeformerDirection $directionOption; // vector space of the texture deformer in the DG int $vectorSpaceOption = 1; if (`optionMenuGrp -exists textureDeformerVectorSpaceWidget`) { $vectorSpaceOption = `optionMenuGrp -query -select textureDeformerVectorSpaceWidget`; } optionVar -intValue textureDeformerVectorSpace $vectorSpaceOption; // strength optionVar -floatValue textureDeformerStrength `floatSliderGrp -query -value textureDeformerStrengthWidget`; // offset optionVar -floatValue textureDeformerOffset `floatSliderGrp -query -value textureDeformerOffsetWidget`; // vector strength optionVar -clearArray textureDeformerVectorStrength; optionVar -floatValueAppend textureDeformerVectorStrength `floatFieldGrp -query -value1 textureDeformerVectorStrengthWidget`; optionVar -floatValueAppend textureDeformerVectorStrength `floatFieldGrp -query -value2 textureDeformerVectorStrengthWidget`; optionVar -floatValueAppend textureDeformerVectorStrength `floatFieldGrp -query -value3 textureDeformerVectorStrengthWidget`; // vector offset optionVar -clearArray textureDeformerVectorOffset; optionVar -floatValueAppend textureDeformerVectorOffset `floatFieldGrp -query -value1 textureDeformerVectorOffsetWidget`; optionVar -floatValueAppend textureDeformerVectorOffset `floatFieldGrp -query -value2 textureDeformerVectorOffsetWidget`; optionVar -floatValueAppend textureDeformerVectorOffset `floatFieldGrp -query -value3 textureDeformerVectorOffsetWidget`; if ($doIt) { performTextureDeformer 0; addToRecentCommandQueue "performTextureDeformer 0" "TextureDeformer"; } } // // Procedure Name: // textureDeformerSetup // // Description: // disable/enable UI item if user switch direction mode // global proc switchDirection() { int $direction = `optionMenuGrp -query -select textureDeformerDirectionWidget`; if($direction == 3) { floatSliderGrp -edit -enable false textureDeformerStrengthWidget; floatSliderGrp -edit -enable false textureDeformerOffsetWidget; floatFieldGrp -edit -enable true textureDeformerVectorStrengthWidget; floatFieldGrp -edit -enable true textureDeformerVectorOffsetWidget; optionMenuGrp -edit -enable true textureDeformerVectorSpaceWidget; } else { floatSliderGrp -edit -enable true textureDeformerStrengthWidget; floatSliderGrp -edit -enable true textureDeformerOffsetWidget; floatFieldGrp -edit -enable false textureDeformerVectorStrengthWidget; floatFieldGrp -edit -enable false textureDeformerVectorOffsetWidget; optionMenuGrp -edit -enable false textureDeformerVectorSpaceWidget; } } // // Procedure Name: // textureDeformerTabUI // // Description: // create menu option tab for texture Deformer // // Input Arguments: // parent - Top level parent layout of the option box UI. Required so // that UI object names can be successfully resolved. // tabIndex - 0 = both tabs, 1 = basic, 2 = advanced // // Return Value: // None. // global proc textureDeformerTabUI(string $parent, int $tabIndex) { // set parent of UI setParent $parent; if (1 == $tabIndex) { // Create UI for the first tab. // // pointSpace of texture deformer optionMenuGrp -label (uiRes("m_performTextureDeformer.kPointSpace")) textureDeformerPointSpaceWidget ; menuItem -label (uiRes("m_performTextureDeformer.kWorld")) pointSpaceItem1; menuItem -label (uiRes("m_performTextureDeformer.kLocal")) pointSpaceItem2; menuItem -label (uiRes("m_performTextureDeformer.kUV")) pointSpaceItem3; optionMenuGrp -e -select 3 textureDeformerPointSpaceWidget; // direction of texture deformer optionMenuGrp -label (uiRes("m_performTextureDeformer.kDirection")) textureDeformerDirectionWidget ; menuItem -label (uiRes("m_performTextureDeformer.kNormal")) directionItem1; menuItem -label (uiRes("m_performTextureDeformer.kHandle")) directionItem2; menuItem -label (uiRes("m_performTextureDeformer.kVector")) directionItem3; optionMenuGrp -e -changeCommand "switchDirection" textureDeformerDirectionWidget; optionMenuGrp -e -select 2 textureDeformerDirectionWidget; // vector space of texture deformer optionMenuGrp -label (uiRes("m_performTextureDeformer.kVectorSpace")) textureDeformerVectorSpaceWidget ; menuItem -label (uiRes("m_performTextureDeformer.kVectorObject")) vectorSpaceItem1; menuItem -label (uiRes("m_performTextureDeformer.kVectorWorld")) vectorSpaceItem2; menuItem -label (uiRes("m_performTextureDeformer.kVectorTangent")) vectorSpaceItem3; optionMenuGrp -e -select 1 textureDeformerVectorSpaceWidget; // strength control floatSliderGrp -label (uiRes("m_performTextureDeformer.kStrength")) -field true -value 1.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -min 0.0 -max 2.0 -pre 3 textureDeformerStrengthWidget; // offset control floatSliderGrp -label (uiRes("m_performTextureDeformer.kOffset")) -field true -value 0.0 -fieldMinValue -100.0 -fieldMaxValue 100.0 -min -1.0 -max 1.0 -pre 3 textureDeformerOffsetWidget; // vector strength control // floatFieldGrp -numberOfFields 3 -label (uiRes("m_performTextureDeformer.kVectorStrength")) -value1 1.0 -value2 1.0 -value3 1.0 textureDeformerVectorStrengthWidget; // vector offset control floatFieldGrp -numberOfFields 3 -label (uiRes("m_performTextureDeformer.kVectorOffset")) -value1 0.0 -value2 0.0 -value3 0.0 textureDeformerVectorOffsetWidget; // Overall envelope control floatSliderGrp -label (uiRes("m_performTextureDeformer.kEnvelope")) -field true -min 0.0 -max 1.0 -fieldMinValue -10.0 -fieldMaxValue 10.0 -pre 3 textureDeformerEnvelopeWidget; // init UI // diable/enable vector mode widget according to direction mode option switchDirection(); } } // // Procedure Name: // textureDeformerOptionBoxTitle // // Description: // set the title of option box // // Input Arguments: // None // // Return Value: // None. // global proc textureDeformerOptionBoxTitle() { setOptionBoxTitle (uiRes("m_performTextureDeformer.kTextureDeformerOptions")); } // // Procedure Name: // textureDeformerHelp // // Description: // Return a short description about this command. // // Input Arguments: // None. // // Return Value: // string. // proc string textureDeformerHelp() { return " Command: textureDeformer"; } // // Procedure Name: // textureDeformerOptionBoxHelpTag // // Description: // Set the tag of the help entry // // Input Arguments: // None. // // Return Value: // None. // global proc textureDeformerOptionBoxHelpTag() { setOptionBoxHelpTag( "CreateTextureDeformer" ); } // // Procedure Name: // assembleCmd // // Description: // Construct the command that will apply the option box values // and create the texture deformer on the selected objects. // // Input Arguments: // None. // // Return Value: // String. // proc string assembleCmd() { // Retrieve the option settings // deformerSetOptionVars("textureDeformer", false); // assemble command string $cmd; // command name $cmd += "textureDeformer"; // set envelope value float $envelope = `optionVar -query textureDeformerEnvelope`; $cmd += " -envelope " + $envelope; // set strength value float $strength = `optionVar -query textureDeformerStrength`; $cmd += " -strength " + $strength; // set offset value float $offset = `optionVar -query textureDeformerOffset`; $cmd += " -offset " + $offset; // set vectorStrength value float $vectorStrength[] = `optionVar -query textureDeformerVectorStrength`; $cmd += " -vectorStrength " + $vectorStrength[0] + " " + $vectorStrength[1] + " " + $vectorStrength[2]; // set vectorOffset value float $vectorOffset[] = `optionVar -query textureDeformerVectorOffset`; $cmd += " -vectorOffset " + $vectorOffset[0] + " " + $vectorOffset[1] + " " + $vectorOffset[2]; // set vectorSpace mode string $vectorSpaceModes[] = {"Object", "World", "Tangent"}; int $vectorSpaceIndex = `optionVar -query textureDeformerVectorSpace` - 1; string $vectorSpaceMode = $vectorSpaceModes[$vectorSpaceIndex]; $cmd += " -vectorSpace \"" + $vectorSpaceMode + "\""; // set direction type string $directionTypes[] = {"Normal", "Handle", "Vector"}; int $directionIndex = `optionVar -query textureDeformerDirection` - 1; string $directionType = $directionTypes[$directionIndex]; $cmd += " -direction \"" + $directionType + "\""; // set point space mode string $pointSpaceModes[] = {"World", "Local", "UV"}; int $pointSpaceIndex = `optionVar -query textureDeformerPointSpace` - 1; string $pointSpaceMode = $pointSpaceModes[$pointSpaceIndex]; $cmd += " -pointSpace \"" + $pointSpaceMode + "\""; // set partition name int $exclusive=`optionVar -query deformerExclusive`; string $exclusiveName; if ($exclusive) { $exclusiveName=`optionVar -query deformerExclName`; // append version number $exclusiveName += "#"; } $cmd += " -exclusive \"" + $exclusiveName + "\""; // command end $cmd += ";"; return $cmd; } // // Procedure Name: // performTextureDeformer // // Description: // Perform the texture deformer command using the corresponding // option values. This procedure will also show the option box // window if necessary as well as construct the command string // that will invoke the texture deformer command with the current // option box values. // // Input Arguments: // 0 - Execute the command. // 1 - Show the option box dialog. // 2 - Return the command. // // Return Value: // String. // global proc string performTextureDeformer(int $action) { string $cmd = ""; switch ($action) { // Execute the command. // case 0: // Get the command. // $cmd = `assembleCmd`; // Execute the command with the option settings. // evalEcho($cmd); break; // Show the option box. // case 1: deformerOptions("textureDeformer"); break; // Return the command string. // case 2: // Get the command. // $cmd = `assembleCmd`; break; } return $cmd; }