// 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 #include #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