From bd0027e737c6512397f841c22786274ed74b927f Mon Sep 17 00:00:00 2001 From: Ben Marsh Date: Tue, 22 Oct 2019 09:07:59 -0400 Subject: Adding Shave-and-a-Haircut 9.6 --- mayaPlug/shaveExportGame.cpp | 151 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 mayaPlug/shaveExportGame.cpp (limited to 'mayaPlug/shaveExportGame.cpp') diff --git a/mayaPlug/shaveExportGame.cpp b/mayaPlug/shaveExportGame.cpp new file mode 100644 index 0000000..349362a --- /dev/null +++ b/mayaPlug/shaveExportGame.cpp @@ -0,0 +1,151 @@ +// Shave and a Haircut +// (c) 2019 Epic Games +// US Patent 6720962 + +#include "shaveExportGame.h" +#include "shaveHairShape.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "shaveSDKFUNCS.h" + +#include "shaveUtil.h" +#include "shaveTextureStore.h" + +//Syntax: shaveExportGame -node <...> + +const MString shaveExportGame::cmd("shaveGameExport"); + +//const char* shaveExportGame::filename_long("file"); +//const char* shaveExportGame::filename_short("f"); +const char* shaveExportGame::nodename_long("node"); +const char* shaveExportGame::nodename_short("n"); + +//void SHAVEwrite_nodeDISK(char *filename); + +MStatus shaveExportGame::doIt(const MArgList &args) +{ + MStatus stat = MStatus::kSuccess; + + MArgDatabase parser(syntax(),args,&stat); + if(stat != MS::kSuccess) + { + MGlobal::displayError("shaveGameExport: can not parse arguments."); + return stat; + } + + MString filename; + //stat = parser.getFlagArgument( filename_short, 0, filename ); + stat = parser.getCommandArgument(0,filename); + if(stat != MStatus::kSuccess) + { + MGlobal::displayError("shaveGameExport: can not parse the 'file' flag."); + return stat; + } + shaveHairShape* sn = NULL; + if(parser.isFlagSet(nodename_short)) + { + MString nodename; + stat = parser.getFlagArgument( nodename_short, 0, nodename ); + if(stat != MStatus::kSuccess) + { + MGlobal::displayError("shaveGameExport: can not parse the 'node' flag."); + return stat; + } + MObject node; + if(!findNodeByName(nodename,node)) + { + MGlobal::displayError(MString("shaveGameExport: can not find ") + nodename + " node"); + return MStatus::kFailure; + } + MFnDependencyNode dFn(node); + if(dFn.typeId() != shaveHairShape::id) + { + MGlobal::displayError(MString("shaveGameExport: the node ") + nodename + " is not a shaveHairShape"); + return MStatus::kFailure; + } + sn = (shaveHairShape*)dFn.userNode(); + } + else //pull shavenode from selection + { + MDagPath node = shaveUtil::getCurrentHairShape(); + if(!node.isValid()) + { + MGlobal::displayError("shaveGameExport: can't find current shaveHairShape"); + return MStatus::kFailure; + } + MFnDagNode dFn(node); + if(dFn.typeId() != shaveHairShape::id) + { + MGlobal::displayError(MString("shaveGameExport: the node ") +dFn.name() + " is not a shaveHairShape"); + return MStatus::kFailure; + } + //MGlobal::displayInfo(MString("Exporting for node ")+dFn.name()); + sn = (shaveHairShape*)dFn.userNode(); + } + if(!sn) + { + MGlobal::displayError("shaveGameExport: can not find shaveHairShape - select or spesify node name"); + return MStatus::kFailure; + } + ///// do whatever you want /////// + //MGlobal::displayInfo(MString("game export file ")+filename + " node " + (unsigned int)&sn->hairnode); + + //// update texture cache ///// + MObjectArray shaveHairShapes; + shaveUtil::getShaveNodes(shaveHairShapes); + + if(shaveHairShapes.length() > 0) + { +#ifdef PER_NODE_TEXLOOKUP + initTexInfoLookup2(shaveHairShapes, "", false/*mFrameGlobals.verbose*/); +#else + initTexInfoLookup(shaveHairShapes, "", false/*mFrameGlobals.verbose*/); +#endif + } + + //use &sn->hairnode to pass shavenode to your params + sn->makeCurrent(); + SHAVEwrite_nodeDISK((char*)filename.asChar()); + ////////////////////////////////// + return MStatus::kSuccess; + + + +} + +MSyntax shaveExportGame::newSyntax() +{ + MSyntax syn; + + //syn.addFlag(filename_short, filename_long, MSyntax::kString); + syn.addArg(MSyntax::kString); + syn.addFlag(nodename_short, nodename_long, MSyntax::kString); + + return syn; +} + +bool shaveExportGame::findNodeByName(const MString& name, MObject& thenode) const +{ + if(name == "") + return false; + + MItDependencyNodes iter; + for (; !iter.isDone(); iter.next()) + { + MObject node = iter.item(); + MFnDependencyNode dFn(node); + if(dFn.name() == name) + { + thenode = node; + return true; + } + } + return false; +} -- cgit v1.2.3