diff options
Diffstat (limited to 'mayaPlug/shaveInfo.cpp')
| -rw-r--r-- | mayaPlug/shaveInfo.cpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/mayaPlug/shaveInfo.cpp b/mayaPlug/shaveInfo.cpp new file mode 100644 index 0000000..6e98b21 --- /dev/null +++ b/mayaPlug/shaveInfo.cpp @@ -0,0 +1,171 @@ +// Shave and a Haircut +// (c) 2019 Epic Games +// US Patent 6720962 + +#include <maya/MArgDatabase.h> +#include <maya/MArgList.h> +#include <maya/MGlobal.h> +#include <maya/MPxCommand.h> +#include <maya/MSelectionList.h> +#include <maya/MSyntax.h> +#include <maya/MString.h> + +#include "shaveGlobals.h" +#include "shaveHairShape.h" +#include "shaveInfo.h" +#include "shaveNode.h" +#include "shaveSDK.h" + +static const char* defaultGlobalsFlagShort = "-dg"; +static const char* defaultGlobalsFlagLong = "-defaultGlobals"; +static const char* globalsFlagShort = "-g"; +static const char* globalsFlagLong = "-globals"; +static const char* globalsVersionFlagShort = "-gv"; +static const char* globalsVersionFlagLong = "-globalsVersion"; +static const char* quietFlagShort = "-qt"; +static const char* quietFlagLong = "-quiet"; +static const char* shaveHairVersionFlagShort = "-shv"; +static const char* shaveHairVersionFlagLong = "-shaveHairVersion"; +static const char* shaveNodeVersionFlagShort = "-snv"; +static const char* shaveNodeVersionFlagLong = "-shaveNodeVersion"; +static const char* statDirFlagShort = "-sd"; +static const char* statDirFlagLong = "-statDir"; +static const char* versionFlagShort = "-v"; +static const char* versionFlagLong = "-version"; + + +const MString shaveInfo::commandName("shaveInfo"); + + +shaveInfo::shaveInfo() {} +shaveInfo::~shaveInfo() {} + + +void* shaveInfo::createCmd() +{ + return new shaveInfo(); +} + + +MSyntax shaveInfo::createSyntax() +{ + MSyntax syntax; + + syntax.enableEdit(false); + syntax.enableQuery(false); + + syntax.addFlag(defaultGlobalsFlagShort, defaultGlobalsFlagLong); + syntax.addFlag(globalsFlagShort, globalsFlagLong, MSyntax::kSelectionItem); + syntax.addFlag(globalsVersionFlagShort, globalsVersionFlagLong); + syntax.addFlag(quietFlagShort, quietFlagLong); + syntax.addFlag(shaveHairVersionFlagShort, shaveHairVersionFlagLong); + syntax.addFlag(shaveNodeVersionFlagShort, shaveNodeVersionFlagLong); + syntax.addFlag(statDirFlagShort, statDirFlagLong); + syntax.addFlag(versionFlagShort, versionFlagLong); + + return syntax; +} + + +MStatus shaveInfo::doIt(const MArgList& argList) +{ + MStatus status; + MArgDatabase args(syntax(), argList, &status); + + if (!status) return status; + + if (args.isFlagSet(globalsVersionFlagShort)) + { + setResult(shaveGlobals::kNodeVersion); + } + else if (args.isFlagSet(shaveHairVersionFlagShort)) + { + setResult(shaveHairShape::kNodeVersion); + } + else if (args.isFlagSet(shaveNodeVersionFlagShort)) + { + setResult(shaveNode::kNodeVersion); + } + else if (args.isFlagSet(versionFlagShort)) + { + setResult(SHAVEquery_version()); + } + else if (args.isFlagSet(statDirFlagShort)) + { + MString shaveStatDir; + MGlobal::executeCommand("shaveGetStatDir", shaveStatDir); + setResult(shaveStatDir); + } + else if (args.isFlagSet(globalsFlagShort)) + { + // + // Get the specified node. + // + MSelectionList selection; + + args.getFlagArgument(globalsFlagShort, 0, selection); + + MObject node(MObject::kNullObj); + + if (!selection.isEmpty()) selection.getDependNode(0, node); + + MFnDependencyNode nodeFn(node, &status); + + // + // Make sure that it's a valid shaveGlobals node. + // + if (node.isNull() + || !status + || (nodeFn.typeId() != shaveGlobals::id)) + { + status = MS::kInvalidParameter; + + if (!args.isFlagSet(quietFlagShort)) + { + MGlobal::displayError( + "The specified object is not a valid shaveGlobals node." + ); + } + } + else + { + // dump attrs + + MGlobal::displayWarning( + "Sorry, this function is not yet supported." + ); + } + } + else if (args.isFlagSet(defaultGlobalsFlagShort)) + { + MSelectionList list; + list.add(shaveGlobals::defaultNodeName); + + MObject node(MObject::kNullObj); + list.getDependNode(0, node); + + MFnDependencyNode nodeFn(node, &status); + + if (node.isNull() || !status || (nodeFn.typeId() != shaveGlobals::id)) + { + if (!args.isFlagSet(quietFlagShort)) + { + MGlobal::displayError( + "There is no default shaveGlobals node in the scene." + ); + } + + status = MS::kFailure; + } + else + { + // dump attrs + + MGlobal::displayWarning( + "Sorry, this function is not yet supported." + ); + } + } + + return status; +} |