aboutsummaryrefslogtreecommitdiff
path: root/mayaPlug/shaveExportGame.cpp
diff options
context:
space:
mode:
authorBen Marsh <[email protected]>2019-10-22 09:07:59 -0400
committerBen Marsh <[email protected]>2019-10-22 09:07:59 -0400
commitbd0027e737c6512397f841c22786274ed74b927f (patch)
treef7ffbdb8f3741bb7f24635616cc189cba5cb865c /mayaPlug/shaveExportGame.cpp
downloadarchived-shave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.tar.xz
archived-shave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.zip
Adding Shave-and-a-Haircut 9.6
Diffstat (limited to 'mayaPlug/shaveExportGame.cpp')
-rw-r--r--mayaPlug/shaveExportGame.cpp151
1 files changed, 151 insertions, 0 deletions
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 <maya/MArgDatabase.h>
+#include <maya/MArgList.h>
+#include <maya/MDagPath.h>
+#include <maya/MFnDagNode.h>
+#include <maya/MFnDependencyNode.h>
+#include <maya/MGlobal.h>
+#include <maya/MItDependencyNodes.h>
+
+#include "shaveSDKFUNCS.h"
+
+#include "shaveUtil.h"
+#include "shaveTextureStore.h"
+
+//Syntax: shaveExportGame <file> -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;
+}