[Maya] Create UVPin with MEL
It seems the command UVPin relies on optionVar rather than standard command parameters, so I had to dig through the built in python code that defines the UVPin command: here is how to call it without changing the preset parameters of the "UV Pin Options" window:


/*
Equivalent to: UV Pin Options window found in
Rigging -> Constraints -> UV Pin
Here we preset parameters to create locators as UV pins
*/
{
/*
(Python code it was extracted from)
Default parameters for UVPin command:
//C:\Program Files\Autodesk\Maya2024\Python\Lib\site-packages\maya\internal\nodes\uvpin\cmd_create.py
'normalAxis': pin_ifc.eAxisType.kXAxis,
'tangentAxis': pin_ifc.eAxisType.kYAxis,
'outputConnect': pin_ifc.eXformIO.kCurrent,
'setupMode' : ePinUVSetupMode.kTransforms,
'uvSetName' : '',
'relativeSpaceMode' : pin_ifc.eSpaceMode.kWorld,
'normalizedIsoParms': True
class ePinUVSetupMode(object):
kComponents = 0
kTransforms = 1
// Python\Lib\site-packages\maya\internal\nodes\common\pin\node_interface.py
class eAxisType(object):
kXAxis = 0
kYAxis = 1
kZAxis = 2
kNXAxis = 3
kNYAxis = 4
kNZAxis = 5
kNoneAxis = 6
class eXformIO(object):
kCurrent = 0
kMatrix = 1
kNull = 2 # i.e just a transform.
kLocator = 3
class eSpaceMode(object):
kWorld = 0
kLocal = 1
kCustom = 2
*/
// Select mesh first
string $selections[] = `ls -selection`;
if( size($selections) < 0 ){
warning("Select a mesh then joints or controllers");
return;
}
// check first element is a mesh:
string $mesh = get_shape($selections[0]);
if( nodeType($mesh) != "mesh" ){
warning("Select a mesh *first* then joints or controllers");
return;
}
// *then* select joints
// skip the check
// setup default values
int $normalAxisValue = 0;
int $tangentAxisValue = 1;
int $outputConnectValue = 0;
int $setupModeValue = 1;
string $uvSetNameValue = "";
int $relativeSpaceModeValue = 0;
int $normalizedIsoParmsValue = 1;
// Get the values if it exists:
if (`optionVar -exists UVPinnormalAxis`)
$normalAxisValue = `optionVar -q UVPinnormalAxis`;
if (`optionVar -exists UVPintangentAxis`)
$tangentAxisValue = `optionVar -q UVPintangentAxis`;
if (`optionVar -exists UVPinoutputConnect`)
$outputConnectValue = `optionVar -q UVPinoutputConnect`;
if (`optionVar -exists UVPinsetupMode`)
$setupModeValue = `optionVar -q UVPinsetupMode`;
if (`optionVar -exists UVPinuvSetName`)
$uvSetNameValue = `optionVar -q UVPinuvSetName`;
if (`optionVar -exists UVPinrelativeSpaceMode`)
$relativeSpaceModeValue = `optionVar -q UVPinrelativeSpaceMode`;
if (`optionVar -exists UVPinnormalizedIsoParms`)
$normalizedIsoParmsValue = `optionVar -q UVPinnormalizedIsoParms`;
// Set the values of option variables for UVPin
optionVar -intValue UVPinnormalAxis 0; // X
optionVar -intValue UVPintangentAxis 1; // Y
optionVar -intValue UVPinoutputConnect 3; // Locator
optionVar -intValue UVPinsetupMode 1; // Transforms
optionVar -stringValue UVPinuvSetName ""; // Default UV set
optionVar -intValue UVPinrelativeSpaceMode 0; // World
optionVar -intValue UVPinnormalizedIsoParms 1; // True
// Launch the UVPin command
UVPin;
// restore option variables
optionVar -intValue UVPinnormalAxis $normalAxisValue;
optionVar -intValue UVPintangentAxis $tangentAxisValue;
optionVar -intValue UVPinoutputConnect $outputConnectValue;
optionVar -intValue UVPinsetupMode $setupModeValue;
optionVar -stringValue UVPinuvSetName $uvSetNameValue;
optionVar -intValue UVPinrelativeSpaceMode $relativeSpaceModeValue;
optionVar -intValue UVPinnormalizedIsoParms $normalizedIsoParmsValue;
}
No comments