#include <maya/MFnDagNode.h>
#include <maya/MItDag.h>
#include <maya/MObject.h>
#include <maya/MDagPath.h>
#include <maya/MPxCommand.h>
#include <maya/MStatus.h>
#include <maya/MString.h>
#include <maya/MFnPlugin.h>
#include <maya/MArgList.h>
#include <maya/MFnCamera.h>
#include <maya/MPoint.h>
#include <maya/MVector.h>
#include <maya/MMatrix.h>
#include <maya/MTransformationMatrix.h>
#include <maya/MFnLight.h>
#include <maya/MColor.h>
#include <maya/MFnNurbsSurface.h>
#include <maya/MIOStream.h>
{
public:
scanDag() {};
~scanDag() override;
static void* creator();
private:
void printTransformData(
const MDagPath& dagPath,
bool quiet);
};
scanDag::~scanDag() {}
void* scanDag::creator()
{
return new scanDag;
}
{
bool quiet = false;
status = parseArgs ( args, traversalType, filter, quiet );
if (!status)
return status;
return doScan( traversalType, filter, quiet);
};
bool & quiet)
{
const MString breadthFlagLong (
"-breadthFirst");
const MString depthFlagLong (
"-depthFirst");
const MString cameraFlagLong (
"-cameras");
const MString lightFlagLong (
"-lights");
const MString nurbsSurfaceFlag (
"-n");
const MString nurbsSurfaceFlagLong (
"-nurbsSurfaces");
const MString quietFlagLong (
"-quiet");
for (
unsigned int i = 0; i < args.
length(); i++ ) {
if (!stat)
continue;
if ( arg == breadthFlag || arg == breadthFlagLong )
else if ( arg == depthFlag || arg == depthFlagLong )
else if ( arg == cameraFlag || arg == cameraFlagLong )
else if ( arg == lightFlag || arg == lightFlagLong )
else if ( arg == nurbsSurfaceFlag || arg == nurbsSurfaceFlagLong )
else if ( arg == quietFlag || arg == quietFlagLong )
quiet = true;
else {
arg += ": unknown argument";
displayError(arg);
return MS::kFailure;
}
}
return stat;
}
bool quiet)
{
MItDag dagIterator( traversalType, filter, &status);
if ( !status) {
status.
perror(
"MItDag constructor");
return status;
}
{
if (!quiet)
cout << endl << "Starting Breadth First scan of the Dag";
}
else
{
if (!quiet)
cout << endl << "Starting Depth First scan of the Dag";
}
switch (filter) {
if (!quiet)
cout << ": Filtering for Cameras\n";
break;
if (!quiet)
cout << ": Filtering for Lights\n";
break;
if (!quiet)
cout << ": Filtering for Nurbs Surfaces\n";
break;
default:
cout << endl;
}
int objectCount = 0;
for ( ; !dagIterator.isDone(); dagIterator.next() ) {
status = dagIterator.getPath(dagPath);
if ( !status ) {
status.
perror(
"MItDag::getPath");
continue;
}
if ( !status ) {
status.
perror(
"MFnDagNode constructor");
continue;
}
if (!quiet)
cout << dagNode.name() << ": " << dagNode.typeName() << endl;
if (!quiet)
objectCount += 1;
if ( !status ) {
status.
perror(
"MFnCamera constructor");
continue;
}
printTransformData(dagPath, quiet);
if (!quiet)
{
cout << " eyePoint: "
cout << " upDirection: "
cout << " viewDirection: "
cout << " aspectRatio: " << camera.aspectRatio() << endl;
cout << " horizontalFilmAperture: "
<< camera.horizontalFilmAperture() << endl;
cout << " verticalFilmAperture: "
<< camera.verticalFilmAperture() << endl;
}
if ( !status ) {
status.
perror(
"MFnLight constructor");
continue;
}
printTransformData(dagPath, quiet);
color = light.color();
if (!quiet)
{
cout << " color: ["
}
color = light.shadowColor();
if (!quiet)
{
cout << " shadowColor: ["
cout << " intensity: " << light.intensity() << endl;
}
if ( !status ) {
status.
perror(
"MFnNurbsSurface constructor");
continue;
}
printTransformData(dagPath, quiet);
if (!quiet)
{
cout << " numCVs: "
<< surface.numCVsInU()
<< " * "
<< surface.numCVsInV()
<< endl;
cout << " numKnots: "
<< surface.numKnotsInU()
<< " * "
<< surface.numKnotsInV()
<< endl;
cout << " numSpans: "
<< surface.numSpansInU()
<< " * "
<< surface.numSpansInV()
<< endl;
}
} else {
printTransformData(dagPath, quiet);
}
}
if (!quiet)
{
cout.flush();
}
setResult(objectCount);
return MS::kSuccess;
}
void scanDag::printTransformData(
const MDagPath& dagPath,
bool quiet)
{
return;
if (!status) {
status.
perror(
"MFnDagNode constructor");
return;
}
if (!quiet)
{
<< endl;
}
double threeDoubles[3];
if (!quiet)
{
cout << " rotation: ["
<< threeDoubles[0] << ", "
<< threeDoubles[1] << ", "
<< threeDoubles[2] << "]\n";
}
if (!quiet)
{
cout << " scale: ["
<< threeDoubles[0] << ", "
<< threeDoubles[1] << ", "
<< threeDoubles[2] << "]\n";
}
}
{
MFnPlugin plugin ( obj, PLUGIN_COMPANY,
"3.0",
"Any" );
status = plugin.registerCommand( "scanDag", scanDag::creator );
if ( !status )
status.
perror(
"registerCommand");
return status;
}
{
status = plugin.deregisterCommand( "scanDag" );
if ( ! status )
status.
perror(
"deregisterCommand");
return status;
}