| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * $Id$ | 
					
						
							|  |  |  |  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  |  * of the License, or (at your option) any later version. The Blender | 
					
						
							|  |  |  |  * Foundation also sells licenses for use in proprietary software under | 
					
						
							|  |  |  |  * the Blender License.  See http://www.blender.org/BL/ for information
 | 
					
						
							|  |  |  |  * about this. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  |  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. | 
					
						
							|  |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is: all of this file. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Contributor(s): none yet. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ***** END GPL/BL DUAL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CVS */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* $Author$ */ | 
					
						
							|  |  |  | /* $Date$ */ | 
					
						
							|  |  |  | /* $RCSfile$ */ | 
					
						
							|  |  |  | /* $Revision$ */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-25 09:53:07 +00:00
										 |  |  | #ifdef HAVE_CONFIG_H
 | 
					
						
							|  |  |  | #include <config.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | /*  Jan Walter's stuff */ | 
					
						
							|  |  |  | #include "Python.h"
 | 
					
						
							|  |  |  | #include "blender.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* ErrorObject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint* mcol_to_vcol(Mesh *me); | 
					
						
							|  |  |  | void mcol_to_rgb(uint col, float *r, float *g, float *b); | 
					
						
							|  |  |  | void initBlender(); | 
					
						
							|  |  |  | static PyObject* blend_connect(PyObject* self, PyObject* args); | 
					
						
							|  |  |  | static PyObject* blend_getObject(PyObject* self, PyObject* args); | 
					
						
							|  |  |  | /*  Jan Walter's stuff */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*  Daniel Dunbar's stuff */ | 
					
						
							|  |  |  | void start_python (void); | 
					
						
							|  |  |  | void end_python(void); | 
					
						
							|  |  |  | void txt_do_python (Text* text); | 
					
						
							|  |  |  | void do_all_scripts(short event); | 
					
						
							|  |  |  | void do_all_scriptlist(ListBase* list, short event); | 
					
						
							|  |  |  | void do_pyscript(ID *id, short event); | 
					
						
							|  |  |  | void clear_bad_scriptlink(ID* id, Text* byebye); | 
					
						
							|  |  |  | void clear_bad_scriptlinks(Text *byebye); | 
					
						
							|  |  |  | void free_scriptlink(ScriptLink *slink); | 
					
						
							|  |  |  | void copy_scriptlink(ScriptLink *scriptlink); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void start_python (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Py_SetProgramName("blender"); | 
					
						
							|  |  |  |   Py_Initialize(); | 
					
						
							|  |  |  |   initBlender(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void end_python(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Py_Finalize(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void txt_do_python (Text* text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char filename[] = "test.py"; | 
					
						
							|  |  |  |   FILE* fp = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (text->name) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       fp = fopen(text->name, "r"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       fp = fopen(filename, "r"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (fp) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (text->name) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  PyRun_AnyFile(fp, text->name); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  PyRun_AnyFile(fp, filename); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (text->name) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  printf("Couldn't run %s ...\n", text->name); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  printf("Couldn't run test.py ...\n"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void do_all_scripts(short event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void do_all_scriptlist(ListBase* list, short event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void do_pyscript(ID *id, short event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void clear_bad_scriptlink(ID* id, Text* byebye) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void clear_bad_scriptlinks(Text *byebye) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void free_scriptlink(ScriptLink *slink) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void copy_scriptlink(ScriptLink *scriptlink) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /*  Daniel Dunbar's stuff */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ID* find_name_in_list(ID* list, const char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   while (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (STREQ(name, list->name+2)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  list = list->next; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return list; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*  Jan Walter's stuff */ | 
					
						
							|  |  |  | /**************/ | 
					
						
							|  |  |  | /* structures */ | 
					
						
							|  |  |  | /**************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* Lens; | 
					
						
							|  |  |  |   PyObject* ClSta; | 
					
						
							|  |  |  |   PyObject* ClEnd; | 
					
						
							|  |  |  | } camobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Camtype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   PyObject* startFrame; | 
					
						
							|  |  |  |   PyObject* endFrame; | 
					
						
							|  |  |  |   PyObject* currentFrame; | 
					
						
							|  |  |  |   PyObject* xResolution; | 
					
						
							|  |  |  |   PyObject* yResolution; | 
					
						
							|  |  |  |   PyObject* pixelAspectRatio; | 
					
						
							|  |  |  | } dspobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Dsptype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* R; | 
					
						
							|  |  |  |   PyObject* G; | 
					
						
							|  |  |  |   PyObject* B; | 
					
						
							|  |  |  | } lmpobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Lmptype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* R; | 
					
						
							|  |  |  |   PyObject* G; | 
					
						
							|  |  |  |   PyObject* B; | 
					
						
							|  |  |  | } matobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Mattype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* vertices; | 
					
						
							|  |  |  |   PyObject* normals; | 
					
						
							|  |  |  |   PyObject* colors; | 
					
						
							|  |  |  |   PyObject* faces; | 
					
						
							|  |  |  |   PyObject* texture; | 
					
						
							|  |  |  |   PyObject* texcoords; | 
					
						
							|  |  |  | } mshobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Mshtype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* matrix; | 
					
						
							|  |  |  |   PyObject* inverseMatrix; | 
					
						
							|  |  |  |   PyObject* materials; | 
					
						
							|  |  |  |   PyObject* data; | 
					
						
							|  |  |  |   PyObject* type; | 
					
						
							|  |  |  | } objobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Objtype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject_HEAD | 
					
						
							|  |  |  |   char name[24]; | 
					
						
							|  |  |  |   PyObject* objects; | 
					
						
							|  |  |  | } sceobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | staticforward PyTypeObject Scetype; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**********/ | 
					
						
							|  |  |  | /* camera */ | 
					
						
							|  |  |  | /**********/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef cam_methods[] = { | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static camobject* | 
					
						
							|  |  |  | newcamobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   camobject* self; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(camobject, &Camtype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->Lens  = PyFloat_FromDouble(35.0); | 
					
						
							|  |  |  |   self->ClSta = PyFloat_FromDouble(0.1); | 
					
						
							|  |  |  |   self->ClEnd = PyFloat_FromDouble(100.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | cam_dealloc(camobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   camobject* cam = (camobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(cam->Lens); | 
					
						
							|  |  |  |   Py_DECREF(cam->ClSta); | 
					
						
							|  |  |  |   Py_DECREF(cam->ClEnd); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | cam_print(camobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Camera(name = \"%s\")\n", self->name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | cam_repr(camobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Camera()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | cam_str(camobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Camera()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist cam_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"Lens",  T_OBJECT, offsetof(camobject, Lens),  RO}, | 
					
						
							|  |  |  |   {"ClSta", T_OBJECT, offsetof(camobject, ClSta), RO}, | 
					
						
							|  |  |  |   {"ClEnd", T_OBJECT, offsetof(camobject, ClEnd), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | cam_getattr(camobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, cam_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(cam_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | cam_setattr(camobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, cam_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Camtype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Camtype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Camera",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(camobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) cam_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) cam_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) cam_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) cam_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) cam_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) cam_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Camtype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************/ | 
					
						
							|  |  |  | /* display settings */ | 
					
						
							|  |  |  | /********************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef dsp_methods[] = { | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static dspobject* | 
					
						
							|  |  |  | newdspobject(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   dspobject* self; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(dspobject, &Dsptype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   self->startFrame       = PyInt_FromLong(1); | 
					
						
							|  |  |  |   self->endFrame         = PyInt_FromLong(250); | 
					
						
							|  |  |  |   self->currentFrame     = PyInt_FromLong(1); | 
					
						
							|  |  |  |   self->xResolution      = PyInt_FromLong(320); | 
					
						
							|  |  |  |   self->yResolution      = PyInt_FromLong(256); | 
					
						
							|  |  |  |   self->pixelAspectRatio = PyFloat_FromDouble(1.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | dsp_dealloc(dspobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   dspobject* dsp = (dspobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(dsp->startFrame); | 
					
						
							|  |  |  |   Py_DECREF(dsp->endFrame); | 
					
						
							|  |  |  |   Py_DECREF(dsp->currentFrame); | 
					
						
							|  |  |  |   Py_DECREF(dsp->xResolution); | 
					
						
							|  |  |  |   Py_DECREF(dsp->yResolution); | 
					
						
							|  |  |  |   Py_DECREF(dsp->pixelAspectRatio); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | dsp_print(dspobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "DisplaySettings()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | dsp_repr(dspobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("DisplaySettings()()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | dsp_str(dspobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("DisplaySettings()()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist dsp_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"startFrame",       T_OBJECT, offsetof(dspobject, startFrame),       RO}, | 
					
						
							|  |  |  |   {"endFrame",         T_OBJECT, offsetof(dspobject, endFrame),         RO}, | 
					
						
							|  |  |  |   {"currentFrame",     T_OBJECT, offsetof(dspobject, currentFrame),     RO}, | 
					
						
							|  |  |  |   {"xResolution",      T_OBJECT, offsetof(dspobject, xResolution),      RO}, | 
					
						
							|  |  |  |   {"yResolution",      T_OBJECT, offsetof(dspobject, yResolution),      RO}, | 
					
						
							|  |  |  |   {"pixelAspectRatio", T_OBJECT, offsetof(dspobject, pixelAspectRatio), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | dsp_getattr(dspobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, dsp_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(dsp_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | dsp_setattr(dspobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, dsp_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Dsptype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Dsptype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "DisplaySettings",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(dspobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) dsp_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) dsp_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) dsp_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) dsp_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) dsp_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) dsp_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Dsptype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********/ | 
					
						
							|  |  |  | /* Lamp */ | 
					
						
							|  |  |  | /********/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef lmp_methods[] = { | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static lmpobject* | 
					
						
							|  |  |  | newlmpobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   lmpobject* self; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(lmpobject, &Lmptype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->R = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  |   self->G = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  |   self->B = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | lmp_dealloc(lmpobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   lmpobject* lmp = (lmpobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(lmp->R); | 
					
						
							|  |  |  |   Py_DECREF(lmp->G); | 
					
						
							|  |  |  |   Py_DECREF(lmp->B); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | lmp_print(lmpobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Lamp(name = \"%s\")\n", self->name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | lmp_repr(lmpobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Lamp()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | lmp_str(lmpobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Lamp()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist lmp_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"R", T_OBJECT, offsetof(lmpobject, R), RO}, | 
					
						
							|  |  |  |   {"G", T_OBJECT, offsetof(lmpobject, G), RO}, | 
					
						
							|  |  |  |   {"B", T_OBJECT, offsetof(lmpobject, B), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | lmp_getattr(lmpobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, lmp_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(lmp_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | lmp_setattr(lmpobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, lmp_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Lmptype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Lmptype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Lamp",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(lmpobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) lmp_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) lmp_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) lmp_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) lmp_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) lmp_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) lmp_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Lmptype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /************/ | 
					
						
							|  |  |  | /* material */ | 
					
						
							|  |  |  | /************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef mat_methods[] = { | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static matobject* | 
					
						
							|  |  |  | newmatobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   matobject* self; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(matobject, &Mattype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->R = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  |   self->G = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  |   self->B = PyFloat_FromDouble(0.8); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | mat_dealloc(matobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   matobject* mat = (matobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(mat->R); | 
					
						
							|  |  |  |   Py_DECREF(mat->G); | 
					
						
							|  |  |  |   Py_DECREF(mat->B); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | mat_print(matobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Material(name = \"%s\")\n", self->name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | mat_repr(matobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Material()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | mat_str(matobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Material()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist mat_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"R", T_OBJECT, offsetof(matobject, R), RO}, | 
					
						
							|  |  |  |   {"G", T_OBJECT, offsetof(matobject, G), RO}, | 
					
						
							|  |  |  |   {"B", T_OBJECT, offsetof(matobject, B), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | mat_getattr(matobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, mat_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(mat_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | mat_setattr(matobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, mat_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Mattype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Mattype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Material",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(matobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) mat_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) mat_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) mat_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) mat_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) mat_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) mat_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Mattype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********/ | 
					
						
							|  |  |  | /* mesh */ | 
					
						
							|  |  |  | /********/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char msh_addFace__doc__[] = | 
					
						
							|  |  |  | "addFace(self, i1, i2, i3, i4, isSmooth, matIndex)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_addFace(mshobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int       index; | 
					
						
							|  |  |  |   int       i1, i2, i3, i4; | 
					
						
							|  |  |  |   int       isSmooth, matIndex; | 
					
						
							|  |  |  |   PyObject* item = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "iiiiii", &i1, &i2, &i3, &i4, | 
					
						
							|  |  |  | 			&isSmooth, &matIndex)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   item = PyList_New(6); | 
					
						
							|  |  |  |   PyList_SetItem(item, 0, PyInt_FromLong(i1)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 1, PyInt_FromLong(i2)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 2, PyInt_FromLong(i3)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 3, PyInt_FromLong(i4)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 4, PyInt_FromLong(isSmooth)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 5, PyInt_FromLong(matIndex)); | 
					
						
							|  |  |  |   PyList_Append(self->faces, item); | 
					
						
							|  |  |  |   index = PyList_Size(self->faces) - 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyInt_FromLong(index); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char msh_addTexCoords__doc__[] = | 
					
						
							|  |  |  | "addTexCoords(self, coords)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_addTexCoords(mshobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   float     u, v; | 
					
						
							|  |  |  |   PyObject* item = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "ff", | 
					
						
							|  |  |  | 			&u, &v)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (u < 0.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       u = 0.0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (u > 1.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       u = 1.0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (v < 0.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       v = 0.0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (v > 1.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       v = 1.0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   item = PyList_New(2); | 
					
						
							|  |  |  |   PyList_SetItem(item, 0, PyFloat_FromDouble(u)); | 
					
						
							|  |  |  |   PyList_SetItem(item, 1, PyFloat_FromDouble(v)); | 
					
						
							|  |  |  |   PyList_Append(self->texcoords, item); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char msh_addTexture__doc__[] = | 
					
						
							|  |  |  | "addTexture(self, filename)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_addTexture(mshobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char* filename = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &filename)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   self->texture = PyString_FromString(filename); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char msh_addVertex__doc__[] = | 
					
						
							|  |  |  | "addVertex(self, x, y, z, nx, ny, nz, r = -1.0, g = 0.0, b = 0.0)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_addVertex(mshobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int       index; | 
					
						
							|  |  |  |   float     x, y, z, nx, ny, nz; | 
					
						
							|  |  |  |   float     r = -1.0, g = 0.0, b = 0.0; | 
					
						
							|  |  |  |   PyObject* item1 = NULL; | 
					
						
							|  |  |  |   PyObject* item2 = NULL; | 
					
						
							|  |  |  |   PyObject* item3 = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "ffffff|fff", &x, &y, &z, &nx, &ny, &nz, | 
					
						
							|  |  |  | 			&r, &g, &b)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   item1 = PyList_New(3); | 
					
						
							|  |  |  |   item2 = PyList_New(3); | 
					
						
							|  |  |  |   if (r != -1.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       item3 = PyList_New(3); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyList_SetItem(item1, 0, PyFloat_FromDouble(x)); | 
					
						
							|  |  |  |   PyList_SetItem(item1, 1, PyFloat_FromDouble(y)); | 
					
						
							|  |  |  |   PyList_SetItem(item1, 2, PyFloat_FromDouble(z)); | 
					
						
							|  |  |  |   PyList_SetItem(item2, 0, PyFloat_FromDouble(nx)); | 
					
						
							|  |  |  |   PyList_SetItem(item2, 1, PyFloat_FromDouble(ny)); | 
					
						
							|  |  |  |   PyList_SetItem(item2, 2, PyFloat_FromDouble(nz)); | 
					
						
							|  |  |  |   if (r != -1.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyList_SetItem(item3, 0, PyFloat_FromDouble(r)); | 
					
						
							|  |  |  |       PyList_SetItem(item3, 1, PyFloat_FromDouble(g)); | 
					
						
							|  |  |  |       PyList_SetItem(item3, 2, PyFloat_FromDouble(b)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyList_Append(self->vertices, item1); | 
					
						
							|  |  |  |   PyList_Append(self->normals, item2); | 
					
						
							|  |  |  |   if (r != -1.0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyList_Append(self->colors, item3); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   index = PyList_Size(self->vertices) - 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyInt_FromLong(index); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef msh_methods[] = { | 
					
						
							|  |  |  |   {"addFace",   (PyCFunction)msh_addFace, | 
					
						
							|  |  |  |    METH_VARARGS, msh_addFace__doc__}, | 
					
						
							|  |  |  |   {"addTexCoords", (PyCFunction)msh_addTexCoords, | 
					
						
							|  |  |  |    METH_VARARGS, msh_addTexCoords__doc__}, | 
					
						
							|  |  |  |   {"addTexture", (PyCFunction)msh_addTexture, | 
					
						
							|  |  |  |    METH_VARARGS, msh_addTexture__doc__}, | 
					
						
							|  |  |  |   {"addVertex", (PyCFunction)msh_addVertex, | 
					
						
							|  |  |  |    METH_VARARGS, msh_addVertex__doc__}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static mshobject* | 
					
						
							|  |  |  | newmshobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   mshobject* self; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(mshobject, &Mshtype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->vertices  = PyList_New(0); | 
					
						
							|  |  |  |   self->normals   = PyList_New(0); | 
					
						
							|  |  |  |   self->colors    = PyList_New(0); | 
					
						
							|  |  |  |   self->faces     = PyList_New(0); | 
					
						
							|  |  |  |   self->texcoords = PyList_New(0); | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   self->texture = Py_None; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | msh_dealloc(mshobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   mshobject* msh = (mshobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(msh->vertices); | 
					
						
							|  |  |  |   Py_DECREF(msh->normals); | 
					
						
							|  |  |  |   Py_DECREF(msh->colors); | 
					
						
							|  |  |  |   Py_DECREF(msh->faces); | 
					
						
							|  |  |  |   Py_DECREF(msh->texture); | 
					
						
							|  |  |  |   Py_DECREF(msh->texcoords); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | msh_print(mshobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Mesh(name = \"%s\",\n", self->name); | 
					
						
							|  |  |  |   fprintf(fp, "     vertices = %d,\n", PyList_Size(self->vertices)); | 
					
						
							|  |  |  |   fprintf(fp, "     faces = %d)\n", PyList_Size(self->faces)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_repr(mshobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Mesh()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_str(mshobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Mesh()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist msh_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"vertices",  T_OBJECT, offsetof(mshobject, vertices),  RO}, | 
					
						
							|  |  |  |   {"normals",   T_OBJECT, offsetof(mshobject, normals),   RO}, | 
					
						
							|  |  |  |   {"colors",    T_OBJECT, offsetof(mshobject, colors),    RO}, | 
					
						
							|  |  |  |   {"faces",     T_OBJECT, offsetof(mshobject, faces),     RO}, | 
					
						
							|  |  |  |   {"texture",   T_OBJECT, offsetof(mshobject, texture),   RO}, | 
					
						
							|  |  |  |   {"texcoords", T_OBJECT, offsetof(mshobject, texcoords), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | msh_getattr(mshobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, msh_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(msh_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | msh_setattr(mshobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, msh_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Mshtype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Mshtype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Mesh",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(mshobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) msh_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) msh_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) msh_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) msh_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) msh_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) msh_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Mshtype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**********/ | 
					
						
							|  |  |  | /* object */ | 
					
						
							|  |  |  | /**********/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef obj_methods[] = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static objobject* | 
					
						
							|  |  |  | newobjobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   objobject* self = NULL; | 
					
						
							|  |  |  |   PyObject*  row1 = NULL; | 
					
						
							|  |  |  |   PyObject*  row2 = NULL; | 
					
						
							|  |  |  |   PyObject*  row3 = NULL; | 
					
						
							|  |  |  |   PyObject*  row4 = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(objobject, &Objtype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->matrix = PyList_New(4); | 
					
						
							|  |  |  |   row1 = PyList_New(4); | 
					
						
							|  |  |  |   row2 = PyList_New(4); | 
					
						
							|  |  |  |   row3 = PyList_New(4); | 
					
						
							|  |  |  |   row4 = PyList_New(4); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 0, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 1, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 2, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 3, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(self->matrix, 0, row1); | 
					
						
							|  |  |  |   PyList_SetItem(self->matrix, 1, row2); | 
					
						
							|  |  |  |   PyList_SetItem(self->matrix, 2, row3); | 
					
						
							|  |  |  |   PyList_SetItem(self->matrix, 3, row4); | 
					
						
							|  |  |  |   self->inverseMatrix = PyList_New(4); | 
					
						
							|  |  |  |   row1 = PyList_New(4); | 
					
						
							|  |  |  |   row2 = PyList_New(4); | 
					
						
							|  |  |  |   row3 = PyList_New(4); | 
					
						
							|  |  |  |   row4 = PyList_New(4); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 0, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row1, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 1, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row2, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 2, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(row3, 3, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 0, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 1, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 2, PyInt_FromLong(0)); | 
					
						
							|  |  |  |   PyList_SetItem(row4, 3, PyInt_FromLong(1)); | 
					
						
							|  |  |  |   PyList_SetItem(self->inverseMatrix, 0, row1); | 
					
						
							|  |  |  |   PyList_SetItem(self->inverseMatrix, 1, row2); | 
					
						
							|  |  |  |   PyList_SetItem(self->inverseMatrix, 2, row3); | 
					
						
							|  |  |  |   PyList_SetItem(self->inverseMatrix, 3, row4); | 
					
						
							|  |  |  |   self->materials = PyList_New(0); | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   self->data = Py_None; | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   self->type = Py_None; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | obj_dealloc(objobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   objobject* obj = (objobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(obj->matrix); | 
					
						
							|  |  |  |   Py_DECREF(obj->inverseMatrix); | 
					
						
							|  |  |  |   Py_DECREF(obj->materials); | 
					
						
							|  |  |  |   Py_DECREF(obj->data); | 
					
						
							|  |  |  |   Py_DECREF(obj->type); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | obj_print(objobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Object(name = \"%s\",\n", self->name); | 
					
						
							|  |  |  | /*    fprintf(fp, "       matrix = %s,\n", */ | 
					
						
							|  |  |  | /*  	  PyString_AsString(mtx_repr((mtxobject*) self->matrix))); */ | 
					
						
							|  |  |  |   if (self->type == Py_None) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       fprintf(fp, "       data = None)\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       fprintf(fp, "       data = %s(\"%s\"))\n", | 
					
						
							|  |  |  | 	      PyString_AsString(self->type), | 
					
						
							|  |  |  | 	      PyString_AsString(self->data)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | obj_repr(objobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Object()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | obj_str(objobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Object()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist obj_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"data",          T_OBJECT, offsetof(objobject, data),          RO}, | 
					
						
							|  |  |  |   {"matrix",        T_OBJECT, offsetof(objobject, matrix),        RO}, | 
					
						
							|  |  |  |   {"inverseMatrix", T_OBJECT, offsetof(objobject, inverseMatrix), RO}, | 
					
						
							|  |  |  |   {"materials",     T_OBJECT, offsetof(objobject, materials),     RO}, | 
					
						
							|  |  |  |   {"type",          T_OBJECT, offsetof(objobject, type),          RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | obj_getattr(objobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, obj_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(obj_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | obj_setattr(objobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, obj_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Objtype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Objtype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Object",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(objobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) obj_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) obj_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) obj_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) obj_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) obj_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) obj_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Objtype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********/ | 
					
						
							|  |  |  | /* scene */ | 
					
						
							|  |  |  | /*********/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char sce_addObject__doc__[] = | 
					
						
							|  |  |  | "addObject(self, object)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | sce_addObject(sceobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int       index; | 
					
						
							|  |  |  |   PyObject* object = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "O", &object)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyList_Append(self->objects, object); | 
					
						
							|  |  |  |   index = PyList_Size(self->objects) - 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyInt_FromLong(index); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char sce_getCurrentCamera__doc__[] = | 
					
						
							|  |  |  | "getCurrentCamera(self)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | sce_getCurrentCamera(sceobject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*     name   = NULL; | 
					
						
							|  |  |  |   PyObject* camera = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "")) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (G.scene->camera) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       name = G.scene->camera->id.name+2; | 
					
						
							|  |  |  |       camera = blend_getObject(NULL,  | 
					
						
							|  |  |  | 			       Py_BuildValue("(O)",  | 
					
						
							|  |  |  | 					     PyString_FromString(name))); | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       return camera; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef sce_methods[] = { | 
					
						
							|  |  |  |   {"addObject",   (PyCFunction)sce_addObject, | 
					
						
							|  |  |  |    METH_VARARGS, sce_addObject__doc__}, | 
					
						
							|  |  |  |   {"getCurrentCamera",   (PyCFunction)sce_getCurrentCamera, | 
					
						
							|  |  |  |    METH_VARARGS, sce_getCurrentCamera__doc__}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   { NULL, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static sceobject* | 
					
						
							|  |  |  | newsceobject(char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   sceobject* self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   self = PyObject_NEW(sceobject, &Scetype); | 
					
						
							|  |  |  |   if (self == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   strcpy(self->name, name); | 
					
						
							|  |  |  |   self->objects = PyList_New(0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | sce_dealloc(sceobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   sceobject* sce = (sceobject*) self; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_DECREF(sce->objects); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PyMem_DEL(self); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | sce_print(sceobject* self, FILE* fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   fprintf(fp, "Scene(name = \"%s\",\n", self->name); | 
					
						
							|  |  |  |   fprintf(fp, "      objects = %d)\n", PyList_Size(self->objects)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | sce_repr(sceobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Scene()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | sce_str(sceobject* self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   s = PyString_FromString("Scene()\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "structmember.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct memberlist sce_memberlist[] = { | 
					
						
							|  |  |  |   /* XXXX Add lines like { "foo", T_INT, OFF(foo), RO }  */ | 
					
						
							|  |  |  |   {"objects", T_OBJECT, offsetof(sceobject, objects), RO}, | 
					
						
							|  |  |  |   {NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | sce_getattr(sceobject* self, char* name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* rv; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add your own getattr code here */ | 
					
						
							|  |  |  |   rv = PyMember_Get((char*) self, sce_memberlist, name); | 
					
						
							|  |  |  |   if (rv) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return rv; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   PyErr_Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Py_FindMethod(sce_methods, (PyObject*)self, name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | sce_setattr(sceobject* self, char* name, PyObject* v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   /* XXXX Add your own setattr code here */ | 
					
						
							|  |  |  |   if ( v == NULL ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PyMember_Set((char*)/*XXXX*/0, sce_memberlist, name, v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Scetype__doc__[] = | 
					
						
							|  |  |  | "" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject Scetype = { | 
					
						
							|  |  |  |   PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							|  |  |  |   0,				/*ob_size*/ | 
					
						
							|  |  |  |   "Scene",			/*tp_name*/ | 
					
						
							|  |  |  |   sizeof(sceobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  |   0,				/*tp_itemsize*/ | 
					
						
							|  |  |  |   /* methods */ | 
					
						
							|  |  |  |   (destructor) sce_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  |   (printfunc) sce_print,	/*tp_print*/ | 
					
						
							|  |  |  |   (getattrfunc) sce_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  |   (setattrfunc) sce_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  |   (cmpfunc) 0,	/*tp_compare*/ | 
					
						
							|  |  |  |   (reprfunc) sce_repr,		/*tp_repr*/ | 
					
						
							|  |  |  |   0,		/*tp_as_number*/ | 
					
						
							|  |  |  |   0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  |   0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  |   (hashfunc) 0,		/*tp_hash*/ | 
					
						
							|  |  |  |   (ternaryfunc) 0,	/*tp_call*/ | 
					
						
							|  |  |  |   (reprfunc) sce_str,		/*tp_str*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Space for future expansion */ | 
					
						
							|  |  |  |   0L,0L,0L,0L, | 
					
						
							|  |  |  |   Scetype__doc__ /* Documentation string */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_Mesh__doc__[] = | 
					
						
							|  |  |  | "Creates an (empty) instance of a Blender mesh.\n\
 | 
					
						
							|  |  |  |     E.g.: \"m = Blender.Mesh('Plane')\"\n\
 | 
					
						
							|  |  |  |     To create faces first add vertices with \n\ | 
					
						
							|  |  |  |     \"i1 = m.addVertex(x, y, z, nx, ny, nz, r = -1.0, r = 0.0, b = 0.0)\"\n\
 | 
					
						
							|  |  |  |     then create faces with \n\ | 
					
						
							|  |  |  |     \"index = m.addFace(i1, i2, i3, i4, isSmooth, matIndex)\".\
 | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_Mesh(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "")) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_Object__doc__[] = | 
					
						
							|  |  |  | "Creates an instance of a Blender object" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_Object(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char* name = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ((PyObject*) newobjobject(name)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_Scene__doc__[] = | 
					
						
							|  |  |  | "Creates an instance of a Blender scene" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_Scene(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char* name = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ((PyObject*) newsceobject(name)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_addMesh__doc__[] = | 
					
						
							|  |  |  | "Blender.addMesh(type, sceneName)\n\
 | 
					
						
							|  |  |  |     where type is one of [\"Plane\"]" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_addMesh(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      type      = NULL; | 
					
						
							|  |  |  |   char*      sceneName = NULL; | 
					
						
							|  |  |  |   PyObject*  tuple     = NULL; | 
					
						
							|  |  |  |   PyObject*  object    = NULL; | 
					
						
							|  |  |  |   PyObject*  mesh      = NULL; | 
					
						
							|  |  |  |   PyObject*  index     = NULL; | 
					
						
							|  |  |  |   PyObject*  indices   = NULL; | 
					
						
							|  |  |  |   objobject* obj       = NULL; | 
					
						
							|  |  |  |   mshobject* msh       = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "ss", &type, &sceneName)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (strcmp(type, "Plane") == 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = newobjobject(type); | 
					
						
							|  |  |  |       msh = newmshobject(type); | 
					
						
							|  |  |  |       object = (PyObject*) obj; | 
					
						
							|  |  |  |       mesh   = (PyObject*) msh; | 
					
						
							|  |  |  |       indices = PyList_New(6); | 
					
						
							|  |  |  |       /* vertices */ | 
					
						
							|  |  |  |       index = msh_addVertex((mshobject*) mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("ffffff", | 
					
						
							|  |  |  | 					  1.0, 1.0, 0.0, 0.0, 0.0, 1.0)); | 
					
						
							|  |  |  |       PyList_SetItem(indices, 0, index); | 
					
						
							|  |  |  |       index = msh_addVertex((mshobject*) mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("ffffff", | 
					
						
							|  |  |  | 					  1.0, -1.0, 0.0, 0.0, 0.0, 1.0)); | 
					
						
							|  |  |  |       PyList_SetItem(indices, 1, index); | 
					
						
							|  |  |  |       index = msh_addVertex((mshobject*) mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("ffffff", | 
					
						
							|  |  |  | 					  -1.0, -1.0, 0.0, 0.0, 0.0, 1.0)); | 
					
						
							|  |  |  |       PyList_SetItem(indices, 2, index); | 
					
						
							|  |  |  |       index = msh_addVertex((mshobject*) mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("ffffff", | 
					
						
							|  |  |  | 					  -1.0, 1.0, 0.0, 0.0, 0.0, 1.0)); | 
					
						
							|  |  |  |       PyList_SetItem(indices, 3, index); | 
					
						
							|  |  |  |       PyList_SetItem(indices, 4, PyInt_FromLong(0)); /* smooth flag */ | 
					
						
							|  |  |  |       PyList_SetItem(indices, 5, PyInt_FromLong(0)); /* material index */ | 
					
						
							|  |  |  |       /* faces */ | 
					
						
							|  |  |  |       msh_addFace((mshobject*) mesh, | 
					
						
							|  |  |  | 		  Py_BuildValue("OOOOOO", | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 0), | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 3), | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 2), | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 1), | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 4), | 
					
						
							|  |  |  | 				PyList_GetItem(indices, 5))); | 
					
						
							|  |  |  |       /* connection */ | 
					
						
							|  |  |  |       blend_connect(self, Py_BuildValue("OO", | 
					
						
							|  |  |  | 					PyString_FromString(obj->name), | 
					
						
							|  |  |  | 					PyString_FromString(msh->name))); | 
					
						
							|  |  |  |       blend_connect(self, Py_BuildValue("OO", | 
					
						
							|  |  |  | 					PyString_FromString(sceneName), | 
					
						
							|  |  |  | 					PyString_FromString(obj->name))); | 
					
						
							|  |  |  |       /* return value */ | 
					
						
							|  |  |  |       tuple = PyTuple_New(2); | 
					
						
							|  |  |  |       PyTuple_SetItem(tuple, 0, object); | 
					
						
							|  |  |  |       PyTuple_SetItem(tuple, 1, mesh); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return tuple; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_connect__doc__[] = | 
					
						
							|  |  |  | "connect(obj1, obj2)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_connect(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* obj1 = NULL; | 
					
						
							|  |  |  |   PyObject* obj2 = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "OO", &obj1, &obj2)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   if (obj1->ob_type == &Objtype) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (obj2->ob_type == &Mshtype) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  Py_INCREF(obj2); | 
					
						
							|  |  |  | 	  ((objobject*) obj1)->data = obj2; | 
					
						
							|  |  |  | 	  ((objobject*) obj1)->type = PyString_FromString("Mesh"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else if (obj1->ob_type == &Scetype) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (obj2->ob_type == &Objtype) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  sce_addObject((sceobject*) obj1, Py_BuildValue("(O)", obj2)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getCamera__doc__[] = | 
					
						
							|  |  |  | "getCamera()" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getCamera(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name     = NULL; | 
					
						
							|  |  |  |   ID*        list     = NULL; | 
					
						
							|  |  |  |   Camera*    cam      = NULL; | 
					
						
							|  |  |  |   camobject* camera   = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->camera.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       cam = (Camera*) list; | 
					
						
							|  |  |  |       camera = newcamobject(cam->id.name+2); | 
					
						
							|  |  |  |       camera->Lens  = PyFloat_FromDouble(cam->lens); | 
					
						
							|  |  |  |       camera->ClSta = PyFloat_FromDouble(cam->clipsta); | 
					
						
							|  |  |  |       camera->ClEnd = PyFloat_FromDouble(cam->clipend); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return (PyObject*) camera; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getCurrentScene__doc__[] = | 
					
						
							|  |  |  | "getCurrentScene()" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getCurrentScene(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name   = NULL; | 
					
						
							|  |  |  |   sceobject* scene  = NULL; | 
					
						
							|  |  |  |   Base*      base   = NULL; | 
					
						
							|  |  |  |   Object*    obj    = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "")) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* create scene in Python */ | 
					
						
							|  |  |  |   name = G.scene->id.name+2; | 
					
						
							|  |  |  |   scene = newsceobject(name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* add existing objects */ | 
					
						
							|  |  |  |   base = G.scene->base.first; | 
					
						
							|  |  |  |   while (base) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = base->object; | 
					
						
							|  |  |  |       PyList_Append(scene->objects, PyString_FromString(obj->id.name+2)); | 
					
						
							|  |  |  |       base = base->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return (PyObject*) scene; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getDisplaySettings__doc__[] = | 
					
						
							|  |  |  | "getDisplaySettings()" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getDisplaySettings(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   RenderData* rd            = NULL; | 
					
						
							|  |  |  |   dspobject*  displayObject = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "")) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   rd = &(G.scene->r); | 
					
						
							|  |  |  |   displayObject = newdspobject(); | 
					
						
							|  |  |  |   displayObject->startFrame       = PyInt_FromLong(rd->sfra); | 
					
						
							|  |  |  |   displayObject->endFrame         = PyInt_FromLong(rd->efra); | 
					
						
							|  |  |  |   displayObject->currentFrame     = PyInt_FromLong(rd->cfra); | 
					
						
							|  |  |  |   displayObject->xResolution      = PyInt_FromLong(rd->xsch); | 
					
						
							|  |  |  |   displayObject->yResolution      = PyInt_FromLong(rd->ysch); | 
					
						
							|  |  |  |   displayObject->pixelAspectRatio = PyInt_FromLong(rd->yasp /  | 
					
						
							|  |  |  | 						   (1.0 * rd->xasp)); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   return (PyObject*) displayObject; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getLamp__doc__[] = | 
					
						
							|  |  |  | "getLamp(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getLamp(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name = NULL; | 
					
						
							|  |  |  |   ID*        list = NULL; | 
					
						
							|  |  |  |   Lamp*      lmp  = NULL; | 
					
						
							|  |  |  |   lmpobject* lamp = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->lamp.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       lmp = (Lamp*) list; | 
					
						
							|  |  |  |       lamp = newlmpobject(lmp->id.name+2); | 
					
						
							|  |  |  |       lamp->R      = PyFloat_FromDouble(lmp->r); | 
					
						
							|  |  |  |       lamp->G      = PyFloat_FromDouble(lmp->g); | 
					
						
							|  |  |  |       lamp->B      = PyFloat_FromDouble(lmp->b); | 
					
						
							|  |  |  | /*        lamp->Dist   = PyFloat_FromDouble(lmp->dist); */ | 
					
						
							|  |  |  | /*        lamp->SpoSi  = PyFloat_FromDouble(lmp->spotsize); */ | 
					
						
							|  |  |  | /*        lamp->SpoBl  = PyFloat_FromDouble(lmp->spotblend); */ | 
					
						
							|  |  |  | /*        lamp->Quad1  = PyFloat_FromDouble(lmp->att1); */ | 
					
						
							|  |  |  | /*        lamp->Quad2  = PyFloat_FromDouble(lmp->att2); */ | 
					
						
							|  |  |  | /*        lamp->HaInt  = PyFloat_FromDouble(lmp->haint); */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*        lamp->OfsX   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->OfsY   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->OfsZ   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->SizeX  = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->SizeY  = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->SizeZ  = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->texR   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->texG   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->texB   = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->DefVar = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->Col    = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->Nor    = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | /*        lamp->Var    = PyFloat_FromDouble(lmp->); */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return (PyObject*) lamp; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getMaterial__doc__[] = | 
					
						
							|  |  |  | "getMaterial(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getMaterial(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name     = NULL; | 
					
						
							|  |  |  |   ID*        list     = NULL; | 
					
						
							|  |  |  |   Material*  mat      = NULL; | 
					
						
							|  |  |  |   matobject* material = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->mat.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       mat = (Material*) list; | 
					
						
							|  |  |  |       material = newmatobject(mat->id.name+2); | 
					
						
							|  |  |  |       material->R = PyFloat_FromDouble(mat->r); | 
					
						
							|  |  |  |       material->G = PyFloat_FromDouble(mat->g); | 
					
						
							|  |  |  |       material->B = PyFloat_FromDouble(mat->b); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return (PyObject*) material; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getMesh__doc__[] = | 
					
						
							|  |  |  | "getMesh(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getMesh(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int        i; | 
					
						
							|  |  |  |   float      r, g, b; | 
					
						
							|  |  |  |   char       dummy[]  = ""; | 
					
						
							|  |  |  |   char*      name     = NULL; | 
					
						
							|  |  |  |   char*      filename = NULL; | 
					
						
							|  |  |  |   uint*      mcol     = NULL; | 
					
						
							|  |  |  |   ID*        list     = NULL; | 
					
						
							|  |  |  |   Mesh*      msh      = NULL; | 
					
						
							|  |  |  |   mshobject* mesh     = NULL; | 
					
						
							|  |  |  |   MFace*     mface    = NULL; | 
					
						
							|  |  |  |   TFace*     tface    = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->mesh.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       msh = (Mesh*) list; | 
					
						
							|  |  |  |       mesh = newmshobject(msh->id.name+2); | 
					
						
							|  |  |  |       /* is there color information? */ | 
					
						
							|  |  |  |       if (msh->mcol) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  mcol = mcol_to_vcol(msh); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       /* add vertices */ | 
					
						
							|  |  |  |       for (i = 0; i < msh->totvert; i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  if (msh->mcol && mcol) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      mcol_to_rgb(*mcol, &r, &g, &b); | 
					
						
							|  |  |  | 	      msh_addVertex(mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("fffffffff", | 
					
						
							|  |  |  | 					  msh->mvert[i].co[0], | 
					
						
							|  |  |  | 					  msh->mvert[i].co[1], | 
					
						
							|  |  |  | 					  msh->mvert[i].co[2], | 
					
						
							|  |  |  | 					  msh->mvert[i].no[0] / 32767.0, | 
					
						
							|  |  |  | 					  msh->mvert[i].no[1] / 32767.0, | 
					
						
							|  |  |  | 					  msh->mvert[i].no[2] / 32767.0, | 
					
						
							|  |  |  | 					  r, g, b)); | 
					
						
							|  |  |  | 	      mcol++; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	  else | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      msh_addVertex(mesh, | 
					
						
							|  |  |  | 			    Py_BuildValue("ffffff", | 
					
						
							|  |  |  | 					  msh->mvert[i].co[0], | 
					
						
							|  |  |  | 					  msh->mvert[i].co[1], | 
					
						
							|  |  |  | 					  msh->mvert[i].co[2], | 
					
						
							|  |  |  | 					  msh->mvert[i].no[0] / 32767.0, | 
					
						
							|  |  |  | 					  msh->mvert[i].no[1] / 32767.0, | 
					
						
							|  |  |  | 					  msh->mvert[i].no[2] / 32767.0)); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       /* add faces */ | 
					
						
							|  |  |  |       for (i = 0; i < msh->totface; i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  mface = ((MFace*) msh->mface)+i; | 
					
						
							|  |  |  | 	  msh_addFace(mesh, | 
					
						
							|  |  |  | 		      Py_BuildValue("iiiiii", | 
					
						
							|  |  |  | 				    mface->v1, mface->v2, | 
					
						
							|  |  |  | 				    mface->v3, mface->v4, | 
					
						
							|  |  |  | 				    mface->flag, mface->mat_nr)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       /* add texture coordinates */ | 
					
						
							|  |  |  |       if (msh->tface) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  tface = (TFace*) msh->tface; | 
					
						
							|  |  |  | 	  if (tface->tpage) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      filename = ((Image*) tface->tpage)->name; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	  else | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      filename = dummy; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	  msh_addTexture(mesh, | 
					
						
							|  |  |  | 			 Py_BuildValue("(O)", PyString_FromString(filename))); | 
					
						
							|  |  |  | 	  for (i = 0; i < msh->totface; i++) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      tface = (TFace*) msh->tface+i; | 
					
						
							|  |  |  | 	      msh_addTexCoords(mesh, | 
					
						
							|  |  |  | 			       Py_BuildValue("ff", | 
					
						
							|  |  |  | 					     tface->uv[0][0],  | 
					
						
							|  |  |  | 					     tface->uv[0][1])); | 
					
						
							|  |  |  | 	      msh_addTexCoords(mesh, | 
					
						
							|  |  |  | 			       Py_BuildValue("ff", | 
					
						
							|  |  |  | 					     tface->uv[1][0],  | 
					
						
							|  |  |  | 					     tface->uv[1][1])); | 
					
						
							|  |  |  | 	      msh_addTexCoords(mesh, | 
					
						
							|  |  |  | 			       Py_BuildValue("ff", | 
					
						
							|  |  |  | 					     tface->uv[2][0],  | 
					
						
							|  |  |  | 					     tface->uv[2][1])); | 
					
						
							|  |  |  | 	      msh_addTexCoords(mesh, | 
					
						
							|  |  |  | 			       Py_BuildValue("ff", | 
					
						
							|  |  |  | 					     tface->uv[3][0],  | 
					
						
							|  |  |  | 					     tface->uv[3][1])); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return (PyObject*) mesh; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_getObject__doc__[] = | 
					
						
							|  |  |  | "getObject(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_getObject(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int        i; | 
					
						
							|  |  |  |   float      inverse[4][4]; | 
					
						
							|  |  |  |   char*      name   = NULL; | 
					
						
							|  |  |  |   ID*        list   = NULL; | 
					
						
							|  |  |  |   Object*    obj    = NULL; | 
					
						
							|  |  |  |   Mesh*      msh    = NULL; | 
					
						
							|  |  |  |   objobject* object = NULL; | 
					
						
							|  |  |  |   PyObject*  row1   = NULL; | 
					
						
							|  |  |  |   PyObject*  row2   = NULL; | 
					
						
							|  |  |  |   PyObject*  row3   = NULL; | 
					
						
							|  |  |  |   PyObject*  row4   = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->object.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = (Object*) list; | 
					
						
							|  |  |  |       object = newobjobject(obj->id.name+2); | 
					
						
							|  |  |  |       Py_DECREF(object->matrix); | 
					
						
							|  |  |  |       object->matrix = PyList_New(4); | 
					
						
							|  |  |  |       row1 = PyList_New(4); | 
					
						
							|  |  |  |       row2 = PyList_New(4); | 
					
						
							|  |  |  |       row3 = PyList_New(4); | 
					
						
							|  |  |  |       row4 = PyList_New(4); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 0, PyFloat_FromDouble(obj->obmat[0][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 1, PyFloat_FromDouble(obj->obmat[0][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 2, PyFloat_FromDouble(obj->obmat[0][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 3, PyFloat_FromDouble(obj->obmat[0][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 0, PyFloat_FromDouble(obj->obmat[1][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 1, PyFloat_FromDouble(obj->obmat[1][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 2, PyFloat_FromDouble(obj->obmat[1][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 3, PyFloat_FromDouble(obj->obmat[1][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 0, PyFloat_FromDouble(obj->obmat[2][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 1, PyFloat_FromDouble(obj->obmat[2][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 2, PyFloat_FromDouble(obj->obmat[2][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 3, PyFloat_FromDouble(obj->obmat[2][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 0, PyFloat_FromDouble(obj->obmat[3][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 1, PyFloat_FromDouble(obj->obmat[3][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 2, PyFloat_FromDouble(obj->obmat[3][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 3, PyFloat_FromDouble(obj->obmat[3][3])); | 
					
						
							|  |  |  |       PyList_SetItem(object->matrix, 0, row1); | 
					
						
							|  |  |  |       PyList_SetItem(object->matrix, 1, row2); | 
					
						
							|  |  |  |       PyList_SetItem(object->matrix, 2, row3); | 
					
						
							|  |  |  |       PyList_SetItem(object->matrix, 3, row4); | 
					
						
							|  |  |  |       /* inverse matrix */ | 
					
						
							|  |  |  |       Mat4Invert(inverse, obj->obmat); | 
					
						
							|  |  |  |       Py_DECREF(object->inverseMatrix); | 
					
						
							|  |  |  |       object->inverseMatrix = PyList_New(4); | 
					
						
							|  |  |  |       row1 = PyList_New(4); | 
					
						
							|  |  |  |       row2 = PyList_New(4); | 
					
						
							|  |  |  |       row3 = PyList_New(4); | 
					
						
							|  |  |  |       row4 = PyList_New(4); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 0, PyFloat_FromDouble(inverse[0][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 1, PyFloat_FromDouble(inverse[0][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 2, PyFloat_FromDouble(inverse[0][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row1, 3, PyFloat_FromDouble(inverse[0][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 0, PyFloat_FromDouble(inverse[1][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 1, PyFloat_FromDouble(inverse[1][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 2, PyFloat_FromDouble(inverse[1][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row2, 3, PyFloat_FromDouble(inverse[1][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 0, PyFloat_FromDouble(inverse[2][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 1, PyFloat_FromDouble(inverse[2][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 2, PyFloat_FromDouble(inverse[2][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row3, 3, PyFloat_FromDouble(inverse[2][3])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 0, PyFloat_FromDouble(inverse[3][0])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 1, PyFloat_FromDouble(inverse[3][1])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 2, PyFloat_FromDouble(inverse[3][2])); | 
					
						
							|  |  |  |       PyList_SetItem(row4, 3, PyFloat_FromDouble(inverse[3][3])); | 
					
						
							|  |  |  |       PyList_SetItem(object->inverseMatrix, 0, row1); | 
					
						
							|  |  |  |       PyList_SetItem(object->inverseMatrix, 1, row2); | 
					
						
							|  |  |  |       PyList_SetItem(object->inverseMatrix, 2, row3); | 
					
						
							|  |  |  |       PyList_SetItem(object->inverseMatrix, 3, row4); | 
					
						
							|  |  |  |       Py_DECREF(object->materials); | 
					
						
							|  |  |  |       object->materials = PyList_New(obj->totcol); | 
					
						
							|  |  |  |       for (i = 0; i < obj->totcol; i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  if (obj->mat[i]) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      PyList_SetItem(object->materials, i, | 
					
						
							|  |  |  | 			     PyString_FromString(obj->mat[i]->id.name+2)); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	  else | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	      PyList_SetItem(object->materials, i, Py_None); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	}      /* check type */ | 
					
						
							|  |  |  |       switch (obj->type) | 
					
						
							|  |  |  |   	{ | 
					
						
							|  |  |  |   	case OB_EMPTY: | 
					
						
							|  |  |  |   	  printf("Empty\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_MESH: | 
					
						
							|  |  |  | 	  object->data = PyString_FromString(((Mesh*) obj->data)->id.name+2); | 
					
						
							|  |  |  | 	  object->type = PyString_FromString("Mesh"); | 
					
						
							|  |  |  | 	  msh = (Mesh*) obj->data; | 
					
						
							|  |  |  | 	  for (i = 0; i < msh->totcol; i++) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      if (msh->mat[i]) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		  PyList_SetItem(object->materials, i, | 
					
						
							|  |  |  | 				 PyString_FromString(msh->mat[i]->id.name+2)); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_CURVE: | 
					
						
							|  |  |  |   	  printf("Curve\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_SURF: | 
					
						
							|  |  |  |   	  printf("Surface\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_FONT: | 
					
						
							|  |  |  |   	  printf("Font\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_MBALL: | 
					
						
							|  |  |  |   	  printf("Metaball\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_LAMP: | 
					
						
							|  |  |  | 	  object->data = PyString_FromString(((Lamp*) obj->data)->id.name+2); | 
					
						
							|  |  |  | 	  object->type = PyString_FromString("Lamp"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_CAMERA: | 
					
						
							|  |  |  | 	  object->data = PyString_FromString(((Camera*) obj->data)->id.name+2); | 
					
						
							|  |  |  | 	  object->type = PyString_FromString("Camera"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_IKA: | 
					
						
							|  |  |  |   	  printf("Ika\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_WAVE: | 
					
						
							|  |  |  |   	  printf("Wave\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	case OB_LATTICE: | 
					
						
							|  |  |  |   	  printf("Lattice\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	default: | 
					
						
							|  |  |  |   	  printf("ERROR: py_main.c:blend_getObject(...)\n"); | 
					
						
							|  |  |  |   	  printf("       unknown type ...\n"); | 
					
						
							|  |  |  |   	  break; | 
					
						
							|  |  |  |   	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return (PyObject*) object; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_INCREF(Py_None); | 
					
						
							|  |  |  |       return Py_None; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_isCamera__doc__[] = | 
					
						
							|  |  |  | "isCamera(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_isCamera(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name   = NULL; | 
					
						
							|  |  |  |   ID*        list   = NULL; | 
					
						
							|  |  |  |   Object*    obj    = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->object.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = (Object*) list; | 
					
						
							|  |  |  |       if (obj->type == OB_CAMERA) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_isLamp__doc__[] = | 
					
						
							|  |  |  | "isLamp(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_isLamp(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name   = NULL; | 
					
						
							|  |  |  |   ID*        list   = NULL; | 
					
						
							|  |  |  |   Object*    obj    = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->object.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = (Object*) list; | 
					
						
							|  |  |  |       if (obj->type == OB_LAMP) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_isMesh__doc__[] = | 
					
						
							|  |  |  | "isMesh(name)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_isMesh(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char*      name   = NULL; | 
					
						
							|  |  |  |   ID*        list   = NULL; | 
					
						
							|  |  |  |   Object*    obj    = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "s", &name)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   list = find_name_in_list((ID*) G.main->object.first, name); | 
					
						
							|  |  |  |   if (list) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       obj = (Object*) list; | 
					
						
							|  |  |  |       if (obj->type == OB_MESH) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	  return PyInt_FromLong(0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char blend_setCurrentFrame__doc__[] = | 
					
						
							|  |  |  | "setCurrentFrame(frame)" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject* | 
					
						
							|  |  |  | blend_setCurrentFrame(PyObject* self, PyObject* args) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int frame = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!PyArg_ParseTuple(args, "i", &frame)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   CFRA = frame; | 
					
						
							|  |  |  |   drawview3d(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Py_INCREF(Py_None); | 
					
						
							|  |  |  |   return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* List of methods defined in the module */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef blend_methods[] = { | 
					
						
							|  |  |  |   {"Mesh",               (PyCFunction) blend_Mesh, | 
					
						
							|  |  |  |    METH_VARARGS, blend_Mesh__doc__}, | 
					
						
							|  |  |  |   {"Object",             (PyCFunction) blend_Object, | 
					
						
							|  |  |  |    METH_VARARGS, blend_Object__doc__}, | 
					
						
							|  |  |  |   {"Scene",              (PyCFunction) blend_Scene, | 
					
						
							|  |  |  |    METH_VARARGS, blend_Scene__doc__}, | 
					
						
							|  |  |  |   {"addMesh",	         (PyCFunction) blend_addMesh, | 
					
						
							|  |  |  |    METH_VARARGS, blend_addMesh__doc__}, | 
					
						
							|  |  |  |   {"connect",	         (PyCFunction) blend_connect, | 
					
						
							|  |  |  |    METH_VARARGS, blend_connect__doc__}, | 
					
						
							|  |  |  |   {"getCamera",          (PyCFunction) blend_getCamera, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getCamera__doc__}, | 
					
						
							|  |  |  |   {"getCurrentScene",    (PyCFunction) blend_getCurrentScene, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getCurrentScene__doc__}, | 
					
						
							|  |  |  |   {"getDisplaySettings", (PyCFunction) blend_getDisplaySettings, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getDisplaySettings__doc__}, | 
					
						
							|  |  |  |   {"getLamp",            (PyCFunction) blend_getLamp, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getLamp__doc__}, | 
					
						
							|  |  |  |   {"getMaterial",        (PyCFunction) blend_getMaterial, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getMaterial__doc__}, | 
					
						
							|  |  |  |   {"getMesh",            (PyCFunction) blend_getMesh, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getMesh__doc__}, | 
					
						
							|  |  |  |   {"getObject",          (PyCFunction) blend_getObject, | 
					
						
							|  |  |  |    METH_VARARGS, blend_getObject__doc__}, | 
					
						
							|  |  |  |   {"isCamera",           (PyCFunction) blend_isCamera, | 
					
						
							|  |  |  |    METH_VARARGS, blend_isCamera__doc__}, | 
					
						
							|  |  |  |   {"isLamp",             (PyCFunction) blend_isLamp, | 
					
						
							|  |  |  |    METH_VARARGS, blend_isLamp__doc__}, | 
					
						
							|  |  |  |   {"isMesh",             (PyCFunction) blend_isMesh, | 
					
						
							|  |  |  |    METH_VARARGS, blend_isMesh__doc__}, | 
					
						
							|  |  |  |   {"setCurrentFrame",    (PyCFunction) blend_setCurrentFrame, | 
					
						
							|  |  |  |    METH_VARARGS, blend_setCurrentFrame__doc__}, | 
					
						
							|  |  |  |   { NULL,                (PyCFunction) NULL, 0, NULL } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char Blender_module_documentation[] = | 
					
						
							|  |  |  | "This is the Python API for Blender" | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | initBlender() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PyObject* m; | 
					
						
							|  |  |  |   PyObject* d; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Create the module and add the functions */ | 
					
						
							|  |  |  |   m = Py_InitModule4("Blender", blend_methods, | 
					
						
							|  |  |  | 		     Blender_module_documentation, | 
					
						
							|  |  |  | 		     (PyObject*)NULL,PYTHON_API_VERSION); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Add some symbolic constants to the module */ | 
					
						
							|  |  |  |   d = PyModule_GetDict(m); | 
					
						
							|  |  |  |   ErrorObject = PyString_FromString("Blender.error"); | 
					
						
							|  |  |  |   PyDict_SetItemString(d, "error", ErrorObject); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* XXXX Add constants here */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Check for errors */ | 
					
						
							|  |  |  |   if (PyErr_Occurred()) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       Py_FatalError("can't initialize module Blender"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /*  Jan Walter's stuff */ |