46 #include "arraybuffer.h"
53 OSVERSIONINFO winVersion(
void)
56 ZeroMemory(&osvi,
sizeof(OSVERSIONINFO));
57 osvi.dwOSVersionInfoSize =
sizeof(OSVERSIONINFO);
76 G.world = PyList_New(0);
77 G.cameras = PyList_New(0);
83 G.clearColor[0] = 0.0;
84 G.clearColor[1] = 0.0;
85 G.clearColor[2] = 0.0;
86 G.clearColor[3] = 0.0;
93 G.resizeCallback = NULL;
94 G.mouseDownCallback = NULL;
95 G.mouseUpCallback = NULL;
96 G.mouseMovedCallback = NULL;
97 G.keyDownCallback = NULL;
98 G.keyUpCallback = NULL;
104 return Py_BuildValue(
"");
114 return Py_BuildValue(
"[i,i,i]", G.color_picked[0], G.color_picked[1], G.color_picked[2]);
124 SDL_GetMouseState(&x, &y);
125 return Py_BuildValue(
"[i,i]", x, y);
135 return Py_BuildValue(
"i", SDL_GetModState());
144 return Py_BuildValue(
"i,i", G.windowWidth, G.windowHeight);
156 if (!PyArg_ParseTuple(args,
"i", &useTimer))
162 return Py_BuildValue(
"");
176 return Py_BuildValue(
"");
189 return Py_BuildValue(
"");
199 static PyObject*
mh_redraw(PyObject *
self, PyObject *args)
202 if (!PyArg_ParseTuple(args,
"i", &async))
208 return Py_BuildValue(
"");
220 if (!PyArg_ParseTuple(args,
"i", &fullscreen))
223 return Py_BuildValue(
"");
229 if (!PyArg_ParseTuple(args,
"ffff", &r, &g, &b, &a))
232 return Py_BuildValue(
"");
246 if (!PyArg_ParseTuple(args,
"si", &filename, &texture))
248 else if (!(texture =
mhLoadTexture(filename, texture, NULL, NULL)))
251 return Py_BuildValue(
"i", texture);
257 char *vertexShaderSource;
258 if (!PyArg_ParseTuple(args,
"s", &vertexShaderSource))
263 return Py_BuildValue(
"i", shader);
270 if (!PyArg_ParseTuple(args,
"s", &source))
275 return Py_BuildValue(
"i", shader);
281 int vertexShader, fragmentShader;
282 if (!PyArg_ParseTuple(args,
"ii", &vertexShader, &fragmentShader))
284 else if (!(shader =
mhCreateShader(vertexShader, fragmentShader)))
287 return Py_BuildValue(
"i", shader);
292 int x, y, width, height;
295 if (!PyArg_ParseTuple(args,
"iiiiO", &x, &y, &width, &height, &path))
298 if (PyString_Check(path))
300 if (!
mhGrabScreen(x, y, width, height, PyString_AsString(path)))
303 else if (PyUnicode_Check(path))
305 path = PyUnicode_AsUTF8String(path);
306 if (!
mhGrabScreen(x, y, width, height, PyString_AsString(path)))
315 PyErr_SetString(PyExc_TypeError,
"String or Unicode object expected");
319 return Py_BuildValue(
"");
334 if (!PyArg_ParseTuple(args,
"iO", &milliseconds, &callback))
337 if (!PyCallable_Check(callback))
339 PyErr_SetString(PyExc_TypeError,
"Callable expected");
345 id = SDL_AddTimer(milliseconds,
mhTimerFunc, callback);
347 return Py_BuildValue(
"i",
id);
354 if (!PyArg_ParseTuple(args,
"i", &
id))
360 return Py_BuildValue(
"");
365 if (!PyCallable_Check(callback))
367 PyErr_SetString(PyExc_TypeError,
"Callable expected");
376 event.type = SDL_USEREVENT;
378 event.user.data1 = callback;
379 event.user.data2 = NULL;
381 SDL_PushEvent(&event);
384 return Py_BuildValue(
"");
389 if (!PyCallable_Check(callback))
391 PyErr_SetString(PyExc_TypeError,
"Callable expected");
397 if (G.resizeCallback)
398 Py_DECREF(G.resizeCallback);
400 G.resizeCallback = callback;
402 return Py_BuildValue(
"");
407 if (!PyCallable_Check(callback))
409 PyErr_SetString(PyExc_TypeError,
"Callable expected");
415 if (G.mouseDownCallback)
416 Py_DECREF(G.mouseDownCallback);
418 G.mouseDownCallback = callback;
420 return Py_BuildValue(
"");
425 if (!PyCallable_Check(callback))
427 PyErr_SetString(PyExc_TypeError,
"Callable expected");
433 if (G.mouseUpCallback)
434 Py_DECREF(G.mouseUpCallback);
436 G.mouseUpCallback = callback;
438 return Py_BuildValue(
"");
443 if (!PyCallable_Check(callback))
445 PyErr_SetString(PyExc_TypeError,
"Callable expected");
451 if (G.mouseMovedCallback)
452 Py_DECREF(G.mouseMovedCallback);
454 G.mouseMovedCallback = callback;
456 return Py_BuildValue(
"");
461 if (!PyCallable_Check(callback))
463 PyErr_SetString(PyExc_TypeError,
"Callable expected");
469 if (G.keyDownCallback)
470 Py_DECREF(G.keyDownCallback);
472 G.keyDownCallback = callback;
474 return Py_BuildValue(
"");
479 if (!PyCallable_Check(callback))
481 PyErr_SetString(PyExc_TypeError,
"Callable expected");
488 Py_DECREF(G.keyUpCallback);
490 G.keyUpCallback = callback;
492 return Py_BuildValue(
"");
543 const char *path = NULL;
546 #define MAX_PATH 1024
556 if (PyString_Check(type))
557 typeStr = PyString_AsString(type);
558 else if (PyObject_Not(type))
562 PyErr_SetString(PyExc_TypeError,
"String expected");
566 typeStr = PyString_AsString(type);
569 if (0 == strcmp(typeStr,
"exports"))
571 path = osx_getExportPath();
573 else if (0 == strcmp(typeStr,
"models"))
575 path = osx_getModelPath();
577 else if (0 == strcmp(typeStr,
"grab"))
579 path = osx_getGrabPath();
581 else if (0 == strcmp(typeStr,
"render"))
583 path = osx_getRenderPath();
585 else if (0 == strcmp(typeStr,
""))
587 path = osx_getDocumentsPath();
591 PyErr_Format(PyExc_ValueError,
"Unknown value %s for getPath()!", typeStr);
598 #ifdef CSIDL_MYDOCUMENTS
599 hr = SHGetFolderPathW(NULL, CSIDL_MYDOCUMENTS, NULL, 0, path);
601 hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, 0, path);
606 PyErr_SetFromWindowsErr(0);
610 if (0 == strcmp(typeStr,
"exports"))
612 wcscat(path, L
"\\makehuman\\exports\\");
614 else if (0 == strcmp(typeStr,
"models"))
616 wcscat(path, L
"\\makehuman\\models\\");
618 else if (0 == strcmp(typeStr,
"grab"))
620 wcscat(path, L
"\\makehuman\\grab\\");
622 else if (0 == strcmp(typeStr,
"render"))
624 wcscat(path, L
"\\makehuman\\render\\");
626 else if (0 == strcmp(typeStr,
""))
628 wcscat(path, L
"\\makehuman\\");
632 PyErr_Format(PyExc_ValueError,
"Unknown value %s for getPath()!", typeStr);
638 char *home = getenv(
"HOME");
644 if (0 == strcmp(typeStr,
"exports"))
646 strcat(path,
"/makehuman/exports/");
648 else if (0 == strcmp(typeStr,
"models"))
650 strcat(path,
"/makehuman/models/");
652 else if (0 == strcmp(typeStr,
"grab"))
654 strcat(path,
"/makehuman/grab/");
656 else if (0 == strcmp(typeStr,
"render"))
658 strcat(path,
"/makehuman/render/");
660 else if (0 == strcmp(typeStr,
""))
662 strcat(path,
"/makehuman/");
666 PyErr_Format(PyExc_ValueError,
"Unknown property %s for getPath()!", typeStr);
673 PyErr_Format(PyExc_ValueError,
"Unknown value %s for getPath()!", typeStr);
677 return Py_BuildValue(
"u", path);
679 return Py_BuildValue(
"s", path);
717 {NULL, NULL, 0, NULL}
735 #ifdef MAKEHUMAN_AS_MODULE
736 PyMODINIT_FUNC initmh()
742 module = Py_InitModule3(
"mh", EmbMethods,
"makehuman as a module.");
747 RegisterArrayBuffer(module);
748 RegisterTypedArrayViews(module);
749 PyModule_AddObject(module,
"world", G.world);
750 PyModule_AddObject(module,
"cameras", G.cameras);
753 int main(
int argc,
char *argv[])
762 snprintf(str,
sizeof(str),
"execfile(\"%s\")", argv[1]);
766 strcpy(str,
"execfile(\"main.py\")");
769 int rc = osx_adjustWorkingDir(argv[0]);
773 rc = osx_adjustRenderEnvironment();
777 Py_SetProgramName(argv[0]);
780 if (!Py_IsInitialized())
782 printf(
"Could not initialize Python\n");
786 PyEval_InitThreads();
788 PySys_SetArgv(argc, argv);
791 module = Py_InitModule(
"mh", EmbMethods);
795 RegisterArrayBuffer(module);
796 RegisterTypedArrayViews(module);
797 PyModule_AddObject(module,
"world", G.world);
798 PyModule_AddObject(module,
"cameras", G.cameras);
800 #if defined(__GNUC__) && defined(__WIN32__)
801 PyRun_SimpleString(
"import sys\nfo = open(\"python_out.txt\", \"w\")\nsys.stdout = fo");
802 PyRun_SimpleString(
"import sys\nfe = open(\"python_err.txt\", \"w\")\nsys.stderr = fe");
803 err = PyRun_SimpleString(str);
804 PyRun_SimpleString(
"fo.close()");
805 PyRun_SimpleString(
"fe.close()");
807 err = PyRun_SimpleString(str);
812 printf(
"Could not run main Python script\n");