global int $DXMLogFileId= 0;
global proc DXMLogStart( string $filename, int $append, string $runName )
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
return;
if($append)
{
$DXMLogFileId=`fopen $filename "a"`;
}
else
{
$DXMLogFileId=`fopen $filename`;
}
fprint $DXMLogFileId " 0)
{
fprint $DXMLogFileId " name=\"";
fprint $DXMLogFileId $runName;
fprint $DXMLogFileId "\"";
}
fprint $DXMLogFileId ">";
}
global proc DXMLogStop( )
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId "";
fclose $DXMLogFileId;
$DXMLogFileId= 0;
}
}
global proc DXMLogTestBegin( string $testName)
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId " 0)
{
fprint $DXMLogFileId " name=\"";
fprint $DXMLogFileId $testName;
fprint $DXMLogFileId "\"";
}
fprint $DXMLogFileId ">";
}
}
global proc DXMLogTestEnd()
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId "\t";
}
}
global proc DXMLogWarning( string $warnStr)
{
global int $DXMLogFileId;
warning $warnStr;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId "";
fprint $DXMLogFileId $warnStr;
fprint $DXMLogFileId "";
}
}
global proc DXMLogInfo( string $warnStr)
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId "";
fprint $DXMLogFileId $warnStr;
fprint $DXMLogFileId "";
}
}
global proc DXMLogResult( string $result)
{
global int $DXMLogFileId;
if($DXMLogFileId != 0)
{
fprint $DXMLogFileId "";
fprint $DXMLogFileId $result;
fprint $DXMLogFileId "";
}
}
global proc int DXMTestNodeOwnershipOfRoutes()
{
DXMLogTestBegin("DXMTestNodeOwnershipOfRoutes");
int $result= true;
int $iNode;
string $nodes[]= `ls -dagObjects`; //`DXMGraphListNodes "DXMSyncGraph"`;
for($iNode= 0; $iNode < size($nodes); $iNode++)
{
string $paths[] = `ls -long -allPaths $nodes[$iNode]`;
string $routes[] = `DXMNodeDagListRoutes "DXMSyncGraph" $nodes[$iNode]`;
string $pathsMinusRoutes[] =stringArrayRemove($routes, $paths);
int $iPath;
for($iPath= 0; $iPath < size($pathsMinusRoutes); $iPath++ )
{
DXMLogWarning("Path in maya not found on DXMNode. Node: " + $nodes[$iNode] + " Path: " + $pathsMinusRoutes[$iPath]);
$result= false;
}
string $routesMinusPaths[] =stringArrayRemove($paths, $routes);
int $iRoute;
for($iRoute= 0; $iRoute < size($routes); $iRoute++ )
{
DXMLogWarning("Route in DXMNode not found on in maya. Node: " + $nodes[$iNode] + " Route: " + $routesMinusPaths[$iRoute]);
$result= false;
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestRouteVisibility()
{
DXMLogTestBegin("DXMTestRouteVisibility");
int $result= true;
int $iNode;
string $invisibleNodes[] = `ls -dagObjects -invisible`;
for($iNode= 0; $iNode < size($invisibleNodes); $iNode++)
{
int $iPath;
string $pathList[] = `ls -long -allPaths $invisibleNodes[$iNode]`;
for($iPath= 0; $iPath < size($pathList) && $result == true; $iPath++)
{
int $routeVis= `DXMRouteIsVisible "DXMSyncGraph" $pathList[$iPath]`;
if($routeVis == true)
{
DXMLogWarning( "Failure in node's immediate path: (Node: " + $invisibleNodes[$iNode] + ") (Path: " + $pathList[$iPath] + " )" );
$result= false;
}
int $iDecendent;
string $decendentList[] = `listRelatives -fullPath -allDescendents $pathList[$iPath]`;
for($iDecendent= 0; $iDecendent < size($decendentList) && $result == true; $iDecendent++)
{
$routeVis= `DXMRouteIsVisible "DXMSyncGraph" $decendentList[$iDecendent]`;
if($routeVis == true)
{
DXMLogWarning( "Failure in node's decendents paths (Node: " + $invisibleNodes[$iNode] + ") (Path: " + $decendentList[$iDecendent] + " )" );
$result= false;
}
}
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestNodeExplicitInvisibility()
{
DXMLogTestBegin("DXMTestNodeExplicitInvisibility");
int $result= true;
int $iNode;
string $invisibleNodes[] = `ls -dagObjects -invisible`;
for($iNode= 0; $iNode < size($invisibleNodes); $iNode++)
{
if(0 == `DXMNodeDagIsExplicitlyInvisible "DXMSyncGraph" $invisibleNodes[$iNode]`)
{
DXMLogWarning( "DXMNode Visiblility does not match Maya: " + $invisibleNodes[$iNode] );
$result= false;
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestRouteParents()
{
DXMLogTestBegin("DXMTestRouteParents");
int $result= true;
string $routeList[]= `DXMGraphListRoutes "DXMSyncGraph"`;
int $iRoute;
for($iRoute= 0; $iRoute < size($routeList); $iRoute++)
{
string $mayaParent[]= `listRelatives -fullPath -parent $routeList[$iRoute]`;
string $dxmParent[]= `DXMRouteGetParent "DXMSyncGraph" $routeList[$iRoute]`;
if( size($mayaParent) != 0 && size($dxmParent) != 0 )
{
if($dxmParent[0] != $mayaParent[0])
{
DXMLogWarning( "Parenting mismatch on route: " + $routeList[$iRoute] + " DXM: " + $dxmParent[0] + " Maya: " + $mayaParent[0] );
$result= false;
}
}
else
{
if(size($mayaParent) > 0)
{
DXMLogWarning( "Parenting mismatch on route: " + $routeList[$iRoute] + " Maya: " + $mayaParent[0] + " (DXM is empty)");
$result= false;
}
if(size($dxmParent) > 0)
{
DXMLogWarning( "Parenting mismatch on route: " + $routeList[$iRoute] + " DXM: " + $dxmParent[0] + " (Maya is empty)");
$result= false;
}
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestFrameParents()
{
DXMLogTestBegin("DXMTestFrameParents");
int $result= true;
string $routeList[]= `DXMGraphListRoutes "DXMSyncGraph"`;
int $iRoute;
for($iRoute= 0; $iRoute < size($routeList); $iRoute++)
{
int $isFrameParentingEqual= `DXMRouteIsFrameParentingEqual "DXMSyncGraph" $routeList[$iRoute]`;
if($isFrameParentingEqual == false)
{
DXMLogWarning( "Route & Frame Parenting are not equal: " + $routeList[$iRoute] );
$result= false;
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestAdapterOwnership()
{
DXMLogTestBegin("DXMTestAdapterOwnershipMatch");
int $result= true;
string $nodes[]= `DXMGraphListNodes "DXMSyncGraph"`;
int $iNode;
for($iNode= 0; $iNode < size($nodes); $iNode++)
{
string $nodeAdapters[]= `DXMNodeListAdapters "DXMSyncGraph" $nodes[$iNode]`;
int $iNA;
for($iNA= 0; $iNA < size($nodeAdapters); $iNA++)
{
string $graphAdapter= `DXMNodeAdapterGetOwner "DXMSyncGraph" $nodes[$iNode] $nodeAdapters[$iNA]`;
int $isInterested= `DXMGraphAdapterIsInterested "DXMSyncGraph" $graphAdapter $nodes[$iNode]`;
if($isInterested == false)
{
DXMLogWarning( "Node: " + $nodes[$iNode] + " NodeAdapter: " + $nodeAdapters[$iNA] + " GraphAdapter: " + $graphAdapter );
$result= false;
}
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestAllNodesHaveAnAdapter()
{
DXMLogTestBegin("DXMTestAllNodesHaveAnAdapter");
int $result= true;
string $nodes[]= `DXMGraphListNodes "DXMSyncGraph"`;
int $iNode;
for($iNode= 0; $iNode < size($nodes); $iNode++)
{
string $nodeAdapters[]= `DXMNodeListAdapters "DXMSyncGraph" $nodes[$iNode]`;
if(size($nodeAdapters) == 0)
{
DXMLogWarning( "Failure at Node: " + $nodes[$iNode] );
$result= false;
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestMeshVisibility()
{
DXMLogTestBegin("DXMTestMeshVisibility");
int $result= true;
string $nodes[]= `DXMGraphListNodes "DXMSyncGraph"`;
int $iNode;
for($iNode= 0; $iNode < size($nodes); $iNode++)
{
int $hasMesh= `DXMNodeHasAdapter "DXMSyncGraph" $nodes[$iNode] "DXMNodeMeshAdapter"`;
if($hasMesh == true)
{
int $meshIsVisible= `DXMNodeMeshIsAnyRouteVisible "DXMSyncGraph" $nodes[$iNode]`;
string $routeList[]= `DXMNodeDagListRoutes "DXMSyncGraph" $nodes[$iNode]`;
for($iRoute= 0; $iRoute < size($routeList); $iRoute++)
{
int $routeIsVisible= `DXMRouteIsVisible "DXMSyncGraph" $routeList[$iRoute]`;
if($meshIsVisible == false && $routeIsVisible == true)
{
DXMLogWarning( "Mesh is not visible but Route is! Mesh: " + $nodes[$iNode] + " Route: " + $routeList[$iRoute] );
$result= false;
}
}
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestMeshMembership()
{
DXMLogTestBegin("DXMTestMeshMembership");
int $result= true;
string $nodes[]= `DXMGraphListNodes "DXMSyncGraph"`;
int $iNode;
for($iNode= 0; $iNode < size($nodes); $iNode++)
{
int $hasMesh= `DXMNodeHasAdapter "DXMSyncGraph" $nodes[$iNode] "DXMNodeMeshAdapter"`;
if($hasMesh == true)
{
string $routeList[]= `DXMNodeDagListRoutes "DXMSyncGraph" $nodes[$iNode]`;
for($iRoute= 0; $iRoute < size($routeList); $iRoute++)
{
int $routeIsVisible= `DXMRouteIsVisible "DXMSyncGraph" $routeList[$iRoute]`;
int $meshIsMemberOfRoute= `DXMNodeMeshIsMemberOfRoute "DXMSyncGraph" $nodes[$iNode] $routeList[$iRoute]`;
if($meshIsMemberOfRoute == true && $routeIsVisible == false)
{
DXMLogWarning( "Mesh is a member of an invisible route! Mesh: " + $nodes[$iNode] + " Route: " + $routeList[$iRoute] );
$result= false;
}
}
}
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestAllRoutesValid()
{
DXMLogTestBegin("DXMTestAllRoutesValid");
int $result= (false == `DXMGraphHasInvalidRoutes "DXMSyncGraph"`);
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
global proc int DXMTestAllNodesValid()
{
DXMLogTestBegin("DXMTestAllNodesValid");
int $result= (false == `DXMGraphHasInvalidNodes "DXMSyncGraph"`);
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
/*EXAMPLE USAGE
proc string polyCubeReturnRoot()
{
string $result[]= `polyCube`;
return $result[0];
}
DXMTestStressCreateDelete("polyCubeReturnRoot()", "delete", 10);
*/
global proc int DXMTestStressCreateDelete(string $createScripty, string $deleteScripty, int $count)
{
DXMLogTestBegin("DXMTestStressCreateDelete");
int $result= true;
string $nodes[];
$nodes= `DXMGraphListNodes "DXMSyncGraph"`;
int $oldNodeCount= size($nodes);
int $index= 0;
for($index= 0; $index < $count; $index++)
{
string $deleteName= `eval $createScripty`;
eval $deleteScripty $deleteName;
}
DXCCRebuildDirty;
$nodes= `DXMGraphListNodes "DXMSyncGraph"`;
int $newNodeCount= size($nodes);
int $leakCount= $oldNodeCount - $newNodeCount;
if($leakCount != 0)
{
DXMLogWarning( "Leaked nodes: " + $leakCount );
$result= false;
}
DXMLogResult($result);
DXMLogTestEnd();
return $result;
}
/*EXAMPLE USAGE
proc string polyCube2()
{
string $result[]= `polyCube`;
return $result[0];
}
DXMTestStressCreateDelete("polyCube2()", "delete", 10);
*/