aboutsummaryrefslogtreecommitdiff
path: root/mayaPlug/shaveProceduralsCmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mayaPlug/shaveProceduralsCmd.cpp')
-rw-r--r--mayaPlug/shaveProceduralsCmd.cpp174
1 files changed, 174 insertions, 0 deletions
diff --git a/mayaPlug/shaveProceduralsCmd.cpp b/mayaPlug/shaveProceduralsCmd.cpp
new file mode 100644
index 0000000..132f01d
--- /dev/null
+++ b/mayaPlug/shaveProceduralsCmd.cpp
@@ -0,0 +1,174 @@
+// Shave and a Haircut
+// (c) 2019 Epic Games
+// US Patent 6720962
+
+/**********************************************************************
+ *<
+ FILE: shaveProceduralsCmd.cpp
+
+ DESCRIPTION: command for registering procedurals
+
+ HISTORY: created 15-06-2011
+
+ *>
+ **********************************************************************/
+
+#include "shaveProceduralsCmd.h"
+#include <maya/MArgDatabase.h>
+#include <maya/MGlobal.h>
+
+#ifdef USE_PROCEDURALS
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
+| Command |
+/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+MString shaveProceduralsCmd::cmd = "shaveProcedurals";
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
+| Flags |
+/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+char* shaveProceduralsCmd::sf_register = "r";
+char* shaveProceduralsCmd::lf_register = "register";
+
+char* shaveProceduralsCmd::sf_unregister = "u";
+char* shaveProceduralsCmd::lf_unregister = "unregister";
+
+char* shaveProceduralsCmd::sf_total = "t";
+char* shaveProceduralsCmd::lf_total = "total";
+
+char* shaveProceduralsCmd::sf_name = "n";
+char* shaveProceduralsCmd::lf_name = "name";
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
+| Members |
+/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+MStringArray shaveProceduralsCmd::procedurals;
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
+| Methods |
+/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+MStatus shaveProceduralsCmd::doIt(const MArgList &maList)
+{
+ MStatus stat;
+
+ MArgDatabase parser(syntax(),maList,&stat);
+ if(stat != MStatus::kSuccess)
+ {
+ MGlobal::displayError("shaveProceduralsCmd: can not parse arguments.");
+ return stat;
+ }
+ if(parser.isQuery())
+ {
+ if(parser.isFlagSet(sf_total))
+ {
+ setResult((int)procedurals.length());
+ return MStatus::kSuccess;
+ }
+ else if(parser.isFlagSet(sf_name))
+ {
+ unsigned int idx;
+ stat = parser.getFlagArgument(sf_name,0,idx);
+ if(stat == MStatus::kSuccess)
+ {
+ if(idx >= procedurals.length())
+ {
+ setResult("");
+ MGlobal::displayError("shaveProceduralsCmd: index is out of range.");
+ return MStatus::kFailure;
+ }
+ setResult(procedurals[idx]);
+ return MStatus::kSuccess;
+ }
+ else
+ {
+ setResult("");
+ MGlobal::displayError("shaveProceduralsCmd: can not get name.");
+ return MStatus::kFailure;
+ }
+ }
+
+ }
+ else
+ {
+ if(parser.isFlagSet(sf_register))
+ {
+ MString name;
+ stat = parser.getFlagArgument(sf_register,0,name);
+ if(stat == MStatus::kSuccess && name != "")
+ {
+ bool duplicate = false;
+ for(unsigned int i = 0; i < procedurals.length(); i++)
+ if(name == procedurals[i])
+ {
+ duplicate = true;
+ break;
+ }
+ if(duplicate)
+ {
+ MGlobal::displayWarning(MString("shaveProceduralsCmd: ") + name + " already registered.");
+ return MStatus::kFailure;
+ }
+ procedurals.append(name);
+
+ //trigger shave shapes update there
+ MGlobal::displayInfo(MString("shaveProceduralsCmd: ") + name + " successfully registered.");
+ }
+ else
+ {
+ MGlobal::displayError("shaveProceduralsCmd: can not get name.");
+ return MStatus::kFailure;
+ }
+ }
+ if(parser.isFlagSet(sf_unregister))
+ {
+ MString name;
+ stat = parser.getFlagArgument(sf_unregister,0,name);
+ if(stat == MStatus::kSuccess && name != "")
+ {
+ int idx = -1;
+ for(unsigned int i = 0; i < procedurals.length(); i++)
+ if(name == procedurals[i])
+ {
+ idx = i;
+ break;
+ }
+ if(idx == -1)
+ {
+ MGlobal::displayWarning(MString("shaveProceduralsCmd: ") + name + " not found");
+ return MStatus::kFailure;
+ }
+ procedurals.remove(idx);
+
+ //trigger shave shapes update there
+ MGlobal::displayInfo(MString("shaveProceduralsCmd: ") + name + " successfully unregistered.");
+ }
+ else
+ {
+ MGlobal::displayError("shaveProceduralsCmd: can not get name.");
+ return MStatus::kFailure;
+ }
+ }
+
+ }
+ return MStatus::kSuccess;
+}
+
+
+MSyntax shaveProceduralsCmd::newSyntax()
+{
+ MSyntax syn;
+
+ syn.enableQuery(true);
+ syn.addFlag(sf_register, lf_register, MSyntax::kString);
+ syn.addFlag(sf_unregister, lf_unregister, MSyntax::kString);
+ syn.addFlag(sf_total, lf_total);
+ syn.addFlag(sf_name, lf_name, MSyntax::kUnsigned);
+
+ return syn;
+}
+
+#endif