#include <maya/MPxCommand.h>
#include <maya/MArgList.h>
#include <maya/MCallbackIdArray.h>
#include <maya/MDagMessage.h>
#include <maya/MDagPath.h>
#include <maya/MDagPathArray.h>
#include <maya/MDGMessage.h>
#include <maya/MCameraSetMessage.h>
#include <maya/MFnDagNode.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MFnCameraSet.h>
#include <maya/MFnPlugin.h>
#include <maya/MGlobal.h>
#include <maya/MIntArray.h>
#include <maya/MModelMessage.h>
#include <maya/MObjectArray.h>
#include <maya/MPlug.h>
#include <maya/MSelectionList.h>
#define kCmdName "testCameraSet"
#define kEditFlag "-e"
#define kEditFlagLong "-edit"
#define kQueryFlag "-q"
#define kQueryFlagLong "-query"
#define kActiveFlag "-a"
#define kActiveFlagLong "-active"
#define kCameraFlag "-cam"
#define kCameraFlagLong "-camera"
#define kCreateFlag "-c"
#define kCreateFlagLong "-create"
#define kCreateWithCamerasFlag "-cc"
#define kCreateWithCamerasFlagLong "-createWithCameras"
#define kAppendCameraFlag "-ac"
#define kAppendCameraFlagLong "-appendCamera"
#define kAppendCameraAndSetFlag "-acs"
#define kAppendCameraAndSetFlagLong "-appendCameraAndSet"
#define kInsertCameraFlag "-ic"
#define kInsertCameraFlagLong "-insertCamera"
#define kInsertCameraAndSetFlag "-ics"
#define kInsertCameraAndSetFlagLong "-insertCameraAndSet"
#define kDeleteAllFlag "-da"
#define kDeleteAllFlagLong "-deleteAll"
#define kDeleteLayerFlag "-d"
#define kDeleteLayerFlagLong "-deleteLayer"
#define kNameFlag "-n"
#define kNameFlagLong "-name"
#define kNumLayersFlag "-nl"
#define kNumLayersFlagLong "-numLayers"
#define kOrderFlag "-o"
#define kOrderFlagLong "-order"
#define kLayerFlag "-l"
#define kLayerFlagLong "-layer"
#define kSetFlag "-s"
#define kSetFlagLong "-set"
#define kHelpFlag "-h"
#define kHelpFlagLong "-help"
#define CheckErrorContinue(stat, msg) \
if (MS::kSuccess != stat) { \
displayError(msg); \
continue; \
}
#define CheckErrorReturn(stat, msg) \
if (MS::kSuccess != stat) { \
displayError(msg); \
return; \
}
{
public:
testCameraSetCmd() {};
virtual ~testCameraSetCmd();
static void* creator();
private:
bool createUsed;
bool createWithCamerasUsed;
bool editUsed;
bool queryUsed;
bool activeUsed;
bool appendCameraUsed;
bool appendCameraAndSetUsed;
bool insertCameraUsed;
bool insertCameraAndSetUsed;
bool cameraUsed;
bool deleteAllUsed;
bool deleteLayerUsed;
bool numLayersUsed;
bool orderUsed;
bool layerUsed;
bool setUsed;
bool helpUsed;
unsigned int cameraLayer;
bool activeVal;
int orderVal;
};
void cameraLayerCB(
MObject& cameraSetNode,
unsigned int multiIndex,
bool added,
void *clientData)
{
if (added)
{
str =
MString(
"Added camera layer with index ");
str += multiIndex;
str += " to ";
str += nodeFn.name();
}
else
{
str =
MString(
"Removed camera layer with index ");
str += multiIndex;
str += " from ";
str += nodeFn.name();
}
}
void cameraChangedCB(
MObject& cameraSetNode,
unsigned int multiIndex,
MObject &oldCamera,
MObject &newCamera,
void *clientData)
{
str += multiIndex;
str += " changed from ";
str += oldCamFn.name();
str += " to ";
str += newCamFn.name();
}
testCameraSetCmd::~testCameraSetCmd()
{
createName = "";
}
void* testCameraSetCmd::creator()
{
return new testCameraSetCmd();
}
{
{
return status;
}
bool nothingSet = ( !createUsed && !appendCameraUsed && !appendCameraAndSetUsed &&
!deleteLayerUsed && !cameraUsed && !insertCameraUsed &&
!insertCameraAndSetUsed && !orderUsed && !layerUsed && !helpUsed &&
!setUsed && !numLayersUsed && !deleteAllUsed && !createWithCamerasUsed);
if (nothingSet)
{
}
if (helpUsed) {
MGlobal::displayInfo(
"\t-ac -appendCamera <cameraName>: Append a new camera layer to the cameraSet using the specified camera");
MGlobal::displayInfo(
"\t-acs -appendCameraAndSet <cameraName> <setName>: Append a new camera layer to the cameraSet using the specified camera and set");
MGlobal::displayInfo(
"\t-ic -insertCamera <layerIndex> <cameraName>: Insert a new camera layer to the cameraSet at the given layer index using the specified camera");
MGlobal::displayInfo(
"\t-ics -insertCameraAndSet <layerIndex> <cameraName> <setName>: Insert a new camera layer to the cameraSet at the given layer using the specified camera and set");
MGlobal::displayInfo(
"\t-cc -createWithCameras <cameraName> ...: Create a new cameraSet node with a set of camera layers governed by a list of cameras");
MGlobal::displayInfo(
"\t-n -name: Specifies a name for a newly created cameraSet. Only used with the -create flag");
MGlobal::displayInfo(
"\t-np -numLayers: Returns the number of layers defined in the specified cameraSet");
MGlobal::displayInfo(
"\t-o -order [<order number>]: Set the order in which a particular layer is processed");
MGlobal::displayInfo(
"\t-p -layer <layerIndex>: Specifies the layer index to be used when accessing layer information");
return status;
}
if (createUsed)
{
if (createName.length() > 0)
dirObj = dirFn.
create(createName, &status);
else
dirObj = dirFn.
create(&status);
if (!status)
{
return status;
}
else if (createWithCamerasUsed)
{
unsigned int c;
for (c = 0; c < camNameList.length(); c++)
{
getCamPath(camNameList[c], camPath);
{
return status;
}
}
if (!status)
{
return status;
}
return status;
}
return status;
}
unsigned nObjs = list.length();
if (nObjs == 0)
{
if (appendCameraUsed || appendCameraAndSetUsed || deleteLayerUsed || editUsed ||
cameraUsed || insertCameraUsed || insertCameraAndSetUsed ||
setUsed || activeUsed || numLayersUsed || deleteAllUsed) {
return status;
}
}
else
{
if (createUsed || createWithCamerasUsed)
{
return status;
}
if (appendCameraUsed)
{
if (nObjs != 1)
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
getCamPath(camName, camPath);
{
return status;
}
return status;
}
if (appendCameraAndSetUsed)
{
if (nObjs != 1)
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
getCamPath(camName, camPath);
{
return status;
}
{
return status;
}
return status;
}
if (insertCameraUsed)
{
if (nObjs != 1)
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
getCamPath(camName, camPath);
{
return status;
}
return status;
}
if (insertCameraAndSetUsed)
{
if (nObjs != 1)
{
"-insertCameraAndSet must have a single cameraSet node specified");
return status;
}
list.getDependNode(0, dirNode);
{
"-insertCameraAndSet must have a valid cameraSet node specified");
return status;
}
getCamPath(camName, camPath);
{
"-insertCameraAndSet must have a valid camera node specified");
return status;
}
{
"-insertCameraAndSet must have a valid set node specified");
return status;
}
status = dirFn.
insertLayer(cameraLayer, camPath, setObj);
return status;
}
if (deleteLayerUsed)
{
if (nObjs != 1)
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
return status;
}
if (deleteAllUsed)
{
if (nObjs != 1)
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
return status;
}
if (numLayersUsed)
{
if (queryUsed)
{
list.getDependNode(0, dirNode);
{
return status;
}
setResult((int)numLayers);
}
else
{
}
return status;
}
if (cameraUsed)
{
if ((nObjs != 1) || (!layerUsed))
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
{
return status;
}
if (editUsed)
{
getCamPath(camName, camPath);
{
return status;
}
}
else if (queryUsed)
{
{
setResult(nodeFn.name());
}
else
setResult("");
}
}
if (setUsed)
{
if ((nObjs != 1) || (!layerUsed))
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
{
return status;
}
if (editUsed)
{
if (setName != "")
{
{
return status;
}
}
}
else if (queryUsed)
{
{
setResult(nodeFn.name());
}
else
setResult("");
}
}
if (activeUsed)
{
if ((nObjs != 1) || (!layerUsed))
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
{
return status;
}
if (editUsed)
{
}
else if (queryUsed)
{
activeVal = dirFn.
isLayerActive((
unsigned int)cameraLayer, &status);
setResult(activeVal);
else
}
}
if (orderUsed)
{
if ((nObjs != 1) || (!orderUsed))
{
return status;
}
list.getDependNode(0, dirNode);
{
return status;
}
{
return status;
}
if (editUsed)
{
}
else if (queryUsed)
{
status = dirFn.
getLayerOrder((
unsigned int)cameraLayer, orderVal);
setResult(orderVal);
else
}
}
}
return status;
}
{
editUsed = (args.
flagIndex(kEditFlag, kEditFlagLong) != MArgList::kInvalidArgIndex);
queryUsed = (args.
flagIndex(kQueryFlag, kQueryFlagLong) != MArgList::kInvalidArgIndex);
helpUsed = (args.
flagIndex(kHelpFlag, kHelpFlagLong) != MArgList::kInvalidArgIndex);
numLayersUsed = (args.
flagIndex(kNumLayersFlag, kNumLayersFlagLong) != MArgList::kInvalidArgIndex);
if (helpUsed)
unsigned int maxArg = args.
length() - 1;
unsigned int createWithCamerasIndex = args.
flagIndex(kCreateWithCamerasFlag, kCreateWithCamerasFlagLong);
unsigned int createIndex = args.
flagIndex(kCreateFlag, kCreateFlagLong);
unsigned int activeIndex = args.
flagIndex(kActiveFlag, kActiveFlagLong);
unsigned int appendCameraIndex = args.
flagIndex(kAppendCameraFlag, kAppendCameraFlagLong);
unsigned int appendCameraAndSetIndex = args.
flagIndex(kAppendCameraAndSetFlag,
kAppendCameraAndSetFlagLong);
unsigned int insertCameraIndex = args.
flagIndex(kInsertCameraFlag, kInsertCameraFlagLong);
unsigned int insertCameraAndSetIndex = args.
flagIndex(kInsertCameraAndSetFlag,
kInsertCameraAndSetFlagLong);
unsigned int deleteAllIndex = args.
flagIndex(kDeleteAllFlag, kDeleteAllFlagLong);
unsigned int cameraIndex = args.
flagIndex(kCameraFlag, kCameraFlagLong);
unsigned int deleteLayerIndex = args.
flagIndex(kDeleteLayerFlag, kDeleteLayerFlagLong);
unsigned int orderIndex = args.
flagIndex(kOrderFlag, kOrderFlagLong);
unsigned int layerIndex = args.
flagIndex(kLayerFlag, kLayerFlagLong);
unsigned int setIndex = args.
flagIndex(kSetFlag, kSetFlagLong);
createWithCamerasUsed = (createWithCamerasIndex != MArgList::kInvalidArgIndex);
createUsed = (createIndex != MArgList::kInvalidArgIndex);
activeUsed = (activeIndex != MArgList::kInvalidArgIndex);
appendCameraUsed = (appendCameraIndex != MArgList::kInvalidArgIndex);
appendCameraAndSetUsed = (appendCameraAndSetIndex != MArgList::kInvalidArgIndex);
insertCameraUsed = (insertCameraIndex != MArgList::kInvalidArgIndex);
insertCameraAndSetUsed = (insertCameraAndSetIndex != MArgList::kInvalidArgIndex);
cameraUsed = (cameraIndex != MArgList::kInvalidArgIndex);
deleteAllUsed = (deleteAllIndex != MArgList::kInvalidArgIndex);
deleteLayerUsed = (deleteLayerIndex != MArgList::kInvalidArgIndex);
orderUsed = (orderIndex != MArgList::kInvalidArgIndex);
layerUsed = (layerIndex != MArgList::kInvalidArgIndex);
setUsed = (setIndex != MArgList::kInvalidArgIndex);
bool maxArgUsed = false;
if (createWithCamerasUsed)
{
for (unsigned int c = createWithCamerasIndex+1; c <= maxArg; c++)
{
{
return status;
}
camNameList.append(camName);
}
maxArgUsed = true;
}
if (createUsed)
{
if (createIndex == maxArg)
maxArgUsed = true;
}
if (activeUsed)
{
if (editUsed)
{
activeVal = args.
asBool((activeIndex+1), &status);
{
return status;
}
if ((activeIndex+1) == maxArg)
maxArgUsed = true;
}
}
if (appendCameraUsed)
{
camName = args.
asString((appendCameraIndex+1), &status);
{
return status;
}
if ((appendCameraIndex+1) == maxArg)
maxArgUsed = true;
}
if (appendCameraAndSetUsed)
{
camName = args.
asString((appendCameraAndSetIndex+1));
setName = args.
asString((appendCameraAndSetIndex+2));
if ((appendCameraAndSetIndex+2) == maxArg)
maxArgUsed = true;
}
if (insertCameraUsed)
{
cameraLayer = args.
asInt(insertCameraIndex+1, &status);
{
return status;
}
camName = args.
asString((insertCameraIndex+2), &status);
{
return status;
}
if ((insertCameraIndex+2) == maxArg)
maxArgUsed = true;
}
if (insertCameraAndSetUsed)
{
cameraLayer = args.
asInt(insertCameraAndSetIndex+1, &status);
camName = args.
asString((insertCameraAndSetIndex+2));
setName = args.
asString((insertCameraAndSetIndex+3));
if ((insertCameraAndSetIndex+3) == maxArg)
maxArgUsed = true;
}
if (cameraUsed)
{
if (editUsed)
{
if ((cameraIndex+1) == maxArg)
maxArgUsed = true;
}
}
if (deleteLayerUsed)
{
cameraLayer = args.
asInt(deleteLayerIndex+1);
if ((deleteLayerIndex+1) == maxArg)
maxArgUsed = true;
}
if (orderUsed)
{
if (editUsed)
{
orderVal = args.
asInt((orderIndex+1), &status);
{
return status;
}
if ((orderIndex+1) == maxArg)
maxArgUsed = true;
}
}
if (layerUsed)
{
cameraLayer = args.
asInt(layerIndex+1);
if ((layerIndex+1) == maxArg)
maxArgUsed = true;
}
if (setUsed)
{
if (editUsed)
{
if ((setIndex+1) == maxArg)
maxArgUsed = true;
}
}
if (maxArgUsed)
else
{
if (createUsed)
else
}
}
void testCameraSetCmd::getCamPath(
const MString &camName,
MDagPath &camPath)
{
}
{
MStatus stat = plugin.registerCommand( kCmdName, testCameraSetCmd::creator);
{
if (id != 0)
if (id != 0)
}
return stat;
}
{
return plugin.deregisterCommand( kCmdName );
}