You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Tools/maya/script/cryValidateFix.mel

149 lines
4.3 KiB
Plaintext

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
global proc int cryValidateFixCanFix(string $messageType)
{
if( strcmp($messageType, "llShouldNotInheritTrans") == 0 )
return 1;
else if( strcmp($messageType, "exportNodeNotTopLevel") == 0 )
return 0;
else if( strcmp($messageType, "InvalidUDPChars") == 0 )
return 1;
else if( strcmp($messageType, "meshWeightsNot1") == 0 )
return 1;
else if( strcmp($messageType, "groupNodeNotOnGrid") == 0 )
return 1;
return 0;
}
global proc cryValidateFix( string $messageType, string $focusNode)
{
if( `objExists $focusNode` == 0 )
{
return;
}
if( strcmp($messageType, "llShouldNotInheritTrans") == 0 )
{
cryValidateFixShouldNotInheritTransform $focusNode;
}
else if( strcmp($messageType, "exportNodeNotTopLevel") == 0 )
{
cryValidateFixExportNodeNotTopLevel $focusNode;
}
else if( strcmp($messageType, "InvalidUDPChars") == 0 )
{
cryValidateFixInvalidUDPChars $focusNode;
}
else if( strcmp($messageType, "meshWeightsNot1") == 0 )
{
cryValidateFixWeightsNotNormalised $focusNode;
}
else if( strcmp($messageType, "groupNodeNotOnGrid") == 0 )
{
cryValidateFixGroupNodeNotOnGrid $focusNode;
}
}
//////////////////////////////////////////////////////////////////////
// Fix functions
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Joint node should not inhert the trasform of it's parent. Used for locamotion locators etc.
global proc cryValidateFixShouldNotInheritTransform(string $node)
{
setAttr ($node+".inheritsTransform") 0;
}
//////////////////////////////////////////////////////////////////////
// Export node is not top level
global proc cryValidateFixExportNodeNotTopLevel(string $node)
{
string $pathTokens[];
$pathCount = `tokenize $node "|" $pathTokens`;
print("Path `"+$node+"` :: Count "+$pathCount);
if( $pathCount == 2 )
{
confirmDialog -title "Lumberyard Auto Fix" -message ("Should the node `"+$pathTokens[0]+"` be the scene root node. If so we can rename it to `SceneRoot`.") -button "OK";
// TODO: Finish this......
}
}
//////////////////////////////////////////////////////////////////////
// Invalid characters in the UDP
global proc cryValidateFixInvalidUDPChars(string $node)
{
string $udpAttributeName = "UDP";
if (`attributeExists $udpAttributeName $node`)
{
string $nodeUDP = `getAttr ($node+"."+$udpAttributeName)`;
// Remove both carriage return and linefeed
while( 1 )
{
string $newUDP = `substitute "&cr;&lf;" $nodeUDP "\n"`;
if( `strcmp $newUDP $nodeUDP` == 0 )
break;
$nodeUDP = $newUDP;
}
// Remove carriage return
while( 1 )
{
string $newUDP = `substitute "&cr;" $nodeUDP "\n"`;
if( `strcmp $newUDP $nodeUDP` == 0 )
break;
$nodeUDP = $newUDP;
}
// Remove linefeed
while( 1 )
{
string $newUDP = `substitute "&lf;" $nodeUDP "\n"`;
if( `strcmp $newUDP $nodeUDP` == 0 )
break;
$nodeUDP = $newUDP;
}
setAttr -type "string" ($node+"."+$udpAttributeName) $nodeUDP;
}
}
//////////////////////////////////////////////////////////////////////
// Vertex weights not normalised, dont add up to 1.
global proc cryValidateFixWeightsNotNormalised(string $focusNode)
{
string $currentSelection[] = `ls -sl`;
eval("select -r "+$focusNode);
eval("doNormalizeWeightsArgList 1 {\"4\"}");
select -r $currentSelection;
}
//////////////////////////////////////////////////////////////////////
// Group node is not aligned to the grid
global proc cryValidateFixGroupNodeNotOnGrid(string $node)
{
float $gridSize = 1.0;
vector $v = `xform -q -worldSpace -rotatePivot $node`;
float $xVal = floor($v.x+0.5);
float $yVal = floor($v.y+0.5);
float $zVal = floor($v.z+0.5);
xform -worldSpace -rotatePivot $xVal $yVal $zVal $node;
}