Simon Eves wrote:
I am trying to write a Python module to embed the functionality of
Maya (the 3D modelling and animation application from Autodesk,
formerly Alias) for doing scripted scene manipulation and rendering
processes in Python.
Here are both versions of the code, in case what I wrote didn't make sense.
Simon
#include "Python.h"
#include "maya/MStatus.h"
#include "maya/MLibrary.h"
#include "maya/MGlobal.h"
// global init
static bool _mayaInitialized = false;
static PyObject* maya_initialize(PyObject* self, PyObject* args)
{
if (!_mayaInitialized)
{
// initialize Maya
// script output to stdout
// view-only license
MStatus status = MLibrary::initialize(true, "mayamodule", true);
if (status != MS::kSuccess)
{
printf("// Error: Failed to initialize Maya,
exiting...\n");
exit(1);
}
// remember
_mayaInitialized = true;
}
else
printf("// Warning: Maya already initialized\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* maya_mel(PyObject* self, PyObject* args)
{
const char* command;
if (PyArg_ParseTuple(args, "s", &command))
{
printf("Executing '%s'...\n", command);
MStringArray results;
MStatus status = MGlobal::executeCommand(MString(command),
results);
if (status != MS::kSuccess)
printf("// Error: %s\n", status.errorString().asChar());
else
for (unsigned int i = 0; i < results.length(); i++)
printf("// %s\n", results[i].asChar());
}
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* maya_cleanup(PyObject* self, PyObject* args)
{
// shut down Maya
if (_mayaInitialized)
{
printf("// Shutting down Maya");
MLibrary::cleanup();
}
// this will never be reached since MLibrary::cleanup() does an exit()
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef maya_methods[] =
{
{"initialize", maya_initialize,METH_NOARGS,"Initialize
Maya library"},
{"mel", maya_mel, METH_VARARGS,
"Execute arbitrary MEL command"},
{"cleanup", maya_cleanup, METH_NOARGS,"Shut
down Maya library and exit"},
{NULL, NULL}
};
PyMODINIT_FUNC
initmaya()
{
printf("// mayamodule v1.0\n");
Py_InitModule("maya", maya_methods);
}
#include
#include
#include
#include
#include
#include
#include
PyObject*
mel(PyObject* self, PyObject* args)
{
const char* command;
if (PyArg_ParseTuple(args, "s", &command))
{
printf("Executing '%s'...\n", command);
MStringArray results;
MStatus status = MGlobal::executeCommand(MString(command),
results);
if (status != MS::kSuccess)
printf("// Error: %s\n", status.errorString().asChar());
else
for (unsigned int i = 0; i < results.length(); i++)
printf("// %s\n", results[i].asChar());
}
Py_INCREF(Py_None);
return Py_None;
}
PyMethodDef mayaMethodTable[] =
{
{"mel", mel, METH_VARARGS, "Run MEL Command"},
{NULL, NULL}
};
int main(int argc, char** argv)
{
printf("// pymaya v1.0\n");
// get filename
if (argc > 2)
{
fprintf(stderr, "Usage: pymaya []\n");
exit(1);
}
// initialize Maya
if (MLibrary::initialize(true, argv[0], true) != MS::kSuccess)
exit(1);
// initialize Python
Py_Initialize();
// add and initialize the module
PyImport_AddModule("maya");
Py_InitModule("maya", mayaMethodTable);
// import it so that the scene file doesn't have to
PyRun_SimpleString("from maya import mel\n");
if (argc == 2)
{
MString command = MString("execfile('") + MString(argv[1]) +
MString("')");
PyRun_SimpleString(command.asChar());
}
else
PyRun_InteractiveLoop(stdin, "stdin");
// shut down Python
Py_Finalize();
// shut down Maya (and exit)
MLibrary::cleanup(0);
}
--
http://mail.python.org/mailman/listinfo/python-list