| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /* 
 | 
					
						
							| 
									
										
										
										
											2004-09-18 18:47:03 +00:00
										 |  |  |  * $Id$ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * ***** 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, | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * Inc., 59 Temple Place - Suite 330, Boston, MA	02111-1307, USA. | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. | 
					
						
							|  |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This is a new part of Blender. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Contributor(s): Jacques Guignot | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ***** END GPL/BL DUAL LICENSE BLOCK ***** | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \file World.c | 
					
						
							|  |  |  |  * \ingroup scripts | 
					
						
							|  |  |  |  * \brief Blender.World Module and World Data PyObject implementation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Note: Parameters between "<" and ">" are optional.  But if one of them is | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  |  * given, all preceding ones must be given, too.  Of course, this only relates | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * to the Python functions and methods described here and only inside Python | 
					
						
							|  |  |  |  * code. [ This will go to another file later, probably the main exppython | 
					
						
							|  |  |  |  * doc file].  XXX Better: put optional args with their default value: | 
					
						
							|  |  |  |  * (self, name = "MyName") | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <BKE_main.h>
 | 
					
						
							|  |  |  | #include <BKE_global.h>
 | 
					
						
							|  |  |  | #include <BKE_object.h>
 | 
					
						
							|  |  |  | #include <BKE_library.h>
 | 
					
						
							|  |  |  | #include <BLI_blenlib.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | #include <DNA_scene_types.h>  /* for G.scene */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | #include "World.h"
 | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | #include "Ipo.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "constant.h"
 | 
					
						
							|  |  |  | #include "gen_utils.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | /* Python BPy_World methods declarations:                                   */ | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | static PyObject *World_getRange( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setRange( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getIpo( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setIpo( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_clearIpo( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_getName( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setName( BPy_World * self, PyObject * args ); | 
					
						
							| 
									
										
										
										
											2005-01-22 02:48:03 +00:00
										 |  |  | static PyObject *World_getMode( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setMode( BPy_World * self, PyObject * args ); | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | static PyObject *World_getSkytype( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setSkytype( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getMistype( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setMistype( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getHor( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setHor( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getZen( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setZen( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getAmb( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setAmb( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getStar( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setStar( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getMist( BPy_World * self ); | 
					
						
							|  |  |  | static PyObject *World_setMist( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_getScriptLinks( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_addScriptLink( BPy_World * self, PyObject * args ); | 
					
						
							|  |  |  | static PyObject *World_clearScriptLinks( BPy_World * self ); | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | static PyObject *World_setCurrent( BPy_World * self ); | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | /* Python API function prototypes for the World module.                     */ | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | static PyObject *M_World_New( PyObject * self, PyObject * args, | 
					
						
							|  |  |  | 			      PyObject * keywords ); | 
					
						
							|  |  |  | static PyObject *M_World_Get( PyObject * self, PyObject * args ); | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | static PyObject *M_World_GetCurrent( PyObject * self ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | /* Python World_Type callback function prototypes:			*/ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static void World_DeAlloc( BPy_World * self ); | 
					
						
							| 
									
										
										
										
											2003-07-05 01:44:32 +00:00
										 |  |  | //static int World_Print (BPy_World *self, FILE *fp, int flags);
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static int World_SetAttr( BPy_World * self, char *name, PyObject * v ); | 
					
						
							|  |  |  | static int World_Compare( BPy_World * a, BPy_World * b ); | 
					
						
							|  |  |  | static PyObject *World_GetAttr( BPy_World * self, char *name ); | 
					
						
							|  |  |  | static PyObject *World_Repr( BPy_World * self ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | /* The following string definitions are used for documentation strings.      */ | 
					
						
							|  |  |  | /* In Python these will be written to the console when doing a               */ | 
					
						
							|  |  |  | /* Blender.World.__doc__                                                     */ | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | static char M_World_doc[] = "The Blender World module\n\n\
 | 
					
						
							|  |  |  | This module provides access to **World Data** objects in Blender\n\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char M_World_New_doc[] = "() - return a new World object"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char M_World_Get_doc[] = | 
					
						
							|  |  |  | 	"(name) - return the world with the name 'name', \
 | 
					
						
							|  |  |  | returns None if not found.\n If 'name' is not specified, \ | 
					
						
							|  |  |  | it returns a list of all worlds in the\ncurrent scene."; | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | static char M_World_GetCurrent_doc[] = "() - returns the current world, or \
 | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | None if the Scene has no world"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | /* Python method structure definition for Blender.World module:              */ | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | struct PyMethodDef M_World_methods[] = { | 
					
						
							|  |  |  | 	{"New", ( PyCFunction ) M_World_New, METH_VARARGS | METH_KEYWORDS, | 
					
						
							|  |  |  | 	 M_World_New_doc}, | 
					
						
							|  |  |  | 	{"Get", M_World_Get, METH_VARARGS, M_World_Get_doc}, | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | 	{"GetActive", ( PyCFunction ) M_World_GetCurrent, METH_NOARGS, | 
					
						
							|  |  |  | 	 M_World_GetCurrent_doc}, | 
					
						
							|  |  |  | 	{"GetCurrent", ( PyCFunction ) M_World_GetCurrent, METH_NOARGS, | 
					
						
							|  |  |  | 	 M_World_GetCurrent_doc}, | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 	{"get", M_World_Get, METH_VARARGS, M_World_Get_doc}, | 
					
						
							|  |  |  | 	{NULL, NULL, 0, NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | /* Python BPy_World methods table:                                          */ | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							|  |  |  | static PyMethodDef BPy_World_methods[] = { | 
					
						
							|  |  |  | 	{"getRange", ( PyCFunction ) World_getRange, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Range"}, | 
					
						
							|  |  |  | 	{"setRange", ( PyCFunction ) World_setRange, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Change this World's range"}, | 
					
						
							|  |  |  | 	{"getIpo", ( PyCFunction ) World_getIpo, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Ipo"}, | 
					
						
							|  |  |  | 	{"setIpo", ( PyCFunction ) World_setIpo, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Change this World's ipo"}, | 
					
						
							|  |  |  | 	{"clearIpo", ( PyCFunction ) World_clearIpo, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Unlink Ipo from this World"}, | 
					
						
							|  |  |  | 	{"getName", ( PyCFunction ) World_getName, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data name"}, | 
					
						
							|  |  |  | 	{"setName", ( PyCFunction ) World_setName, METH_VARARGS, | 
					
						
							| 
									
										
										
										
											2005-01-22 02:48:03 +00:00
										 |  |  | 	 "() - Set World Data name"}, | 
					
						
							|  |  |  | 	{"getMode", ( PyCFunction ) World_getMode, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data mode"}, | 
					
						
							|  |  |  | 	{"setMode", ( PyCFunction ) World_setMode, METH_VARARGS, | 
					
						
							|  |  |  | 	 "(i) - Set World Data mode"}, | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 	{"getSkytype", ( PyCFunction ) World_getSkytype, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data skytype"}, | 
					
						
							|  |  |  | 	{"setSkytype", ( PyCFunction ) World_setSkytype, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data skytype"}, | 
					
						
							|  |  |  | 	{"getMistype", ( PyCFunction ) World_getMistype, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data mistype"}, | 
					
						
							|  |  |  | 	{"setMistype", ( PyCFunction ) World_setMistype, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data mistype"}, | 
					
						
							|  |  |  | 	{"getHor", ( PyCFunction ) World_getHor, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data hor"}, | 
					
						
							|  |  |  | 	{"setHor", ( PyCFunction ) World_setHor, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data hor"}, | 
					
						
							|  |  |  | 	{"getZen", ( PyCFunction ) World_getZen, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data zen"}, | 
					
						
							|  |  |  | 	{"setZen", ( PyCFunction ) World_setZen, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data zen"}, | 
					
						
							|  |  |  | 	{"getAmb", ( PyCFunction ) World_getAmb, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data amb"}, | 
					
						
							|  |  |  | 	{"setAmb", ( PyCFunction ) World_setAmb, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data amb"}, | 
					
						
							|  |  |  | 	{"getStar", ( PyCFunction ) World_getStar, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data star"}, | 
					
						
							|  |  |  | 	{"setStar", ( PyCFunction ) World_setStar, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data star"}, | 
					
						
							|  |  |  | 	{"getMist", ( PyCFunction ) World_getMist, METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data mist"}, | 
					
						
							|  |  |  | 	{"setMist", ( PyCFunction ) World_setMist, METH_VARARGS, | 
					
						
							|  |  |  | 	 "() - Return World Data mist"}, | 
					
						
							|  |  |  | 	{"getScriptLinks", ( PyCFunction ) World_getScriptLinks, METH_VARARGS, | 
					
						
							|  |  |  | 	 "(eventname) - Get a list of this world's scriptlinks (Text names) " | 
					
						
							|  |  |  | 	 "of the given type\n" | 
					
						
							|  |  |  | 	 "(eventname) - string: FrameChanged or Redraw."}, | 
					
						
							|  |  |  | 	{"addScriptLink", ( PyCFunction ) World_addScriptLink, METH_VARARGS, | 
					
						
							|  |  |  | 	 "(text, evt) - Add a new world scriptlink.\n" | 
					
						
							|  |  |  | 	 "(text) - string: an existing Blender Text name;\n" | 
					
						
							|  |  |  | 	 "(evt) string: FrameChanged or Redraw."}, | 
					
						
							|  |  |  | 	{"clearScriptLinks", ( PyCFunction ) World_clearScriptLinks, | 
					
						
							|  |  |  | 	 METH_NOARGS, | 
					
						
							|  |  |  | 	 "() - Delete all scriptlinks from this world :)."}, | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | 	{"setCurrent", ( PyCFunction ) World_setCurrent, METH_NOARGS, | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 	 "() - Makes this world the active world for the current scene."}, | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | 	{"makeActive", ( PyCFunction ) World_setCurrent, METH_NOARGS, | 
					
						
							|  |  |  | 	 "please use setCurrent instead, this alias will be removed."}, | 
					
						
							| 
									
										
										
										
											2004-10-07 19:25:40 +00:00
										 |  |  | 	{NULL, NULL, 0, NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | /* Python World_Type structure definition:			          */ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | PyTypeObject World_Type = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT( NULL )  | 
					
						
							|  |  |  | 	0,	/* ob_size */ | 
					
						
							|  |  |  | 	"World",		/* tp_name */ | 
					
						
							|  |  |  | 	sizeof( BPy_World ),	/* tp_basicsize */ | 
					
						
							|  |  |  | 	0,			/* tp_itemsize */ | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	/* methods */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	( destructor ) World_DeAlloc,	/* tp_dealloc */ | 
					
						
							|  |  |  | 	0,			/* tp_print */ | 
					
						
							|  |  |  | 	( getattrfunc ) World_GetAttr,	/* tp_getattr */ | 
					
						
							|  |  |  | 	( setattrfunc ) World_SetAttr,	/* tp_setattr */ | 
					
						
							|  |  |  | 	( cmpfunc ) World_Compare,	/* tp_compare */ | 
					
						
							|  |  |  | 	( reprfunc ) World_Repr,	/* tp_repr */ | 
					
						
							|  |  |  | 	0,			/* tp_as_number */ | 
					
						
							|  |  |  | 	0,			/* tp_as_sequence */ | 
					
						
							|  |  |  | 	0,			/* tp_as_mapping */ | 
					
						
							|  |  |  | 	0,			/* tp_as_hash */ | 
					
						
							|  |  |  | 	0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  | 	0,			/* tp_doc */ | 
					
						
							|  |  |  | 	0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  | 	BPy_World_methods,	/* tp_methods */ | 
					
						
							|  |  |  | 	0,			/* tp_members */ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \defgroup World_Module Blender.World module functions | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*@{*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief Python module function: Blender.World.New() | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This is the .New() function of the Blender.World submodule. It creates | 
					
						
							|  |  |  |  * new World Data in Blender and returns its Python wrapper object.  The | 
					
						
							|  |  |  |  * name parameter is mandatory. | 
					
						
							|  |  |  |  * \param <name> - string: The World Data name. | 
					
						
							|  |  |  |  * \return A new World PyObject. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *M_World_New( PyObject * self, PyObject * args, | 
					
						
							|  |  |  | 			      PyObject * kwords ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	World *add_world( char *name ); | 
					
						
							|  |  |  | 	char *name = NULL; | 
					
						
							|  |  |  | 	BPy_World *pyworld; | 
					
						
							|  |  |  | 	World *blworld; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "s", &name ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected	int argument" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	blworld = add_world( name ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( blworld ) { | 
					
						
							|  |  |  | 		/* return user count to zero because add_world() inc'd it */ | 
					
						
							|  |  |  | 		blworld->id.us = 0; | 
					
						
							|  |  |  | 		/* create python wrapper obj */ | 
					
						
							|  |  |  | 		pyworld = | 
					
						
							|  |  |  | 			( BPy_World * ) PyObject_NEW( BPy_World, &World_Type ); | 
					
						
							|  |  |  | 	} else | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 						"couldn't create World Data in Blender" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( pyworld == NULL ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_MemoryError, | 
					
						
							|  |  |  | 						"couldn't create World Data object" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	pyworld->world = blworld; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( PyObject * ) pyworld; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief Python module function: Blender.World.Get() | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * This is the .Get() function of the Blender.World submodule.	It searches | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * the list of current World Data objects and returns a Python wrapper for | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * the one with the name provided by the user.	If called with no arguments, | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * it returns a list of all current World Data object names in Blender. | 
					
						
							|  |  |  |  * \param <name> - string: The name of an existing Blender World Data object. | 
					
						
							|  |  |  |  * \return () - A list with the names of all current World Data objects;\n | 
					
						
							|  |  |  |  * \return (name) - A Python wrapper for the World Data called 'name' | 
					
						
							|  |  |  |  * in Blender. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *M_World_Get( PyObject * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	char *name = NULL; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	World *world_iter; | 
					
						
							|  |  |  | 	PyObject *worldlist; | 
					
						
							|  |  |  | 	BPy_World *wanted_world = NULL; | 
					
						
							|  |  |  | 	char error_msg[64]; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "|s", &name ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected string argument (or nothing)" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	world_iter = G.main->world.first; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( name ) {		/* (name) - Search world by name */ | 
					
						
							|  |  |  | 		while( ( world_iter ) && ( wanted_world == NULL ) ) { | 
					
						
							|  |  |  | 			if( strcmp( name, world_iter->id.name + 2 ) == 0 ) { | 
					
						
							|  |  |  | 				wanted_world = | 
					
						
							|  |  |  | 					( BPy_World * ) | 
					
						
							|  |  |  | 					PyObject_NEW( BPy_World, &World_Type ); | 
					
						
							|  |  |  | 				if( wanted_world ) | 
					
						
							|  |  |  | 					wanted_world->world = world_iter; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			world_iter = world_iter->id.next; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		if( wanted_world == NULL ) {	/* Requested world doesn't exist */ | 
					
						
							|  |  |  | 			PyOS_snprintf( error_msg, sizeof( error_msg ), | 
					
						
							|  |  |  | 				       "World \"%s\" not found", name ); | 
					
						
							|  |  |  | 			return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 				 ( PyExc_NameError, error_msg ) ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		return ( PyObject * ) wanted_world; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	else {			/* return a list of all worlds in the scene */ | 
					
						
							|  |  |  | 		worldlist = PyList_New( 0 ); | 
					
						
							|  |  |  | 		if( worldlist == NULL ) | 
					
						
							|  |  |  | 			return ( EXPP_ReturnPyObjError( PyExc_MemoryError, | 
					
						
							|  |  |  | 							"couldn't create PyList" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		while( world_iter ) { | 
					
						
							|  |  |  | 			BPy_World *found_world = | 
					
						
							|  |  |  | 				( BPy_World * ) PyObject_NEW( BPy_World, | 
					
						
							|  |  |  | 							      &World_Type ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 			found_world->world = world_iter; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 			PyList_Append( worldlist, ( PyObject * ) found_world ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 			world_iter = world_iter->id.next; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		return ( worldlist ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-06-22 11:38:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | static PyObject *M_World_GetCurrent( PyObject * self ) | 
					
						
							| 
									
										
										
										
											2004-06-22 11:38:58 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	BPy_World *w = NULL; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !G.scene->world ) { | 
					
						
							|  |  |  | 		Py_INCREF( Py_None ); | 
					
						
							|  |  |  | 		return Py_None; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	w = ( BPy_World * ) PyObject_NEW( BPy_World, &World_Type ); | 
					
						
							| 
									
										
										
										
											2004-06-22 11:38:58 +00:00
										 |  |  | 	w->world = G.scene->world; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( PyObject * ) w; | 
					
						
							| 
									
										
										
										
											2004-06-22 11:38:58 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*@}*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief Initializes the Blender.World submodule | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This function is used by Blender_Init() in Blender.c to register the | 
					
						
							|  |  |  |  * Blender.World submodule in the main Blender module. | 
					
						
							|  |  |  |  * \return PyObject*: The initialized submodule. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | PyObject *World_Init( void ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *submodule; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	World_Type.ob_type = &PyType_Type; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	submodule = Py_InitModule3( "Blender.World", | 
					
						
							|  |  |  | 				    M_World_methods, M_World_doc ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( submodule ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | /* Python BPy_World methods:						*/ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getRange( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2004-06-14 09:24:50 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return PyFloat_FromDouble( self->world->range ); | 
					
						
							| 
									
										
										
										
											2004-06-14 09:24:50 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setRange( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2004-06-14 09:24:50 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	float range = 0.f; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "f", &range ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected a float argument" ) ); | 
					
						
							|  |  |  | 	self->world->range = range; | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											2004-06-14 09:24:50 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getIpo( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-10-26 16:51:53 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	struct Ipo *ipo = self->world->ipo; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !ipo ) { | 
					
						
							|  |  |  | 		Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		return Py_None; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return Ipo_CreatePyObject( ipo ); | 
					
						
							| 
									
										
										
										
											2003-10-26 16:51:53 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setIpo( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *pyipo = 0; | 
					
						
							|  |  |  | 	Ipo *ipo = NULL; | 
					
						
							|  |  |  | 	Ipo *oldipo; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "O!", &Ipo_Type, &pyipo ) ) | 
					
						
							|  |  |  | 		return EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 					      "expected Ipo as argument" ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	ipo = Ipo_FromPyObject( pyipo ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !ipo ) | 
					
						
							|  |  |  | 		return EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 					      "null ipo!" ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-12-21 01:34:23 +00:00
										 |  |  | 	if( ipo->blocktype != ID_WO ) | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		return EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 					      "this ipo is not a World type ipo" ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	oldipo = self->world->ipo; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( oldipo ) { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		ID *id = &oldipo->id; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		if( id->us > 0 ) | 
					
						
							|  |  |  | 			id->us--; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	( ( ID * ) & ipo->id )->us++; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	self->world->ipo = ipo; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_clearIpo( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	World *world = self->world; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Ipo *ipo = ( Ipo * ) world->ipo; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( ipo ) { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		ID *id = &ipo->id; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		if( id->us > 0 ) | 
					
						
							|  |  |  | 			id->us--; | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		world->ipo = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 		Py_INCREF( Py_True ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 		return Py_True; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_False );	/* no ipo found */ | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_False; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod getName | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return string: The World Data name. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getName( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyString_FromString( self->world->id.name + 2 ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( attr ) | 
					
						
							|  |  |  | 		return attr; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 					"couldn't get World.name attribute" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod setName | 
					
						
							|  |  |  |  * \param name - string: The new World Data name. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setName( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	char *name = 0; | 
					
						
							|  |  |  | 	char buf[21]; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "s", &name ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected string argument" ) ); | 
					
						
							|  |  |  | 	snprintf( buf, sizeof( buf ), "%s", name ); | 
					
						
							|  |  |  | 	rename_id( &self->world->id, buf ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod getSkytype | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data skytype. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getSkytype( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyInt_FromLong( ( long ) self->world->skytype ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( attr ) | 
					
						
							|  |  |  | 		return attr; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 					"couldn't get World.skytype attribute" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod setSkytype | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data skytype. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setSkytype( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	int skytype; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "i", &skytype ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected int argument" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	self->world->skytype = skytype; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod getMode | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data mode. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getMode( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyInt_FromLong( ( long ) self->world->mode ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( attr ) | 
					
						
							|  |  |  | 		return attr; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 					"couldn't get World.mode attribute" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod setMode | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data mode. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setMode( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	int mode; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "i", &mode ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected int argument" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	self->world->mode = mode; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod getMistype | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data mistype. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getMistype( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyInt_FromLong( ( long ) self->world->mistype ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( attr ) | 
					
						
							|  |  |  | 		return attr; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 					"couldn't get World.mistype attribute" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief World PyMethod setMistype | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return int : The World Data mistype. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setMistype( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	int mistype; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !PyArg_ParseTuple( args, "i", &mistype ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected int argument" ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	self->world->mistype = mistype; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getHor( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyList_New( 0 ); | 
					
						
							|  |  |  | 	if( !attr ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 						"couldn't create list" ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->horr ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->horg ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->horb ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return attr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setHor( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *listargs = 0; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "O", &listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected list argument" ) ); | 
					
						
							|  |  |  | 	self->world->horr = PyFloat_AsDouble( PyList_GetItem( listargs, 0 ) ); | 
					
						
							|  |  |  | 	self->world->horg = PyFloat_AsDouble( PyList_GetItem( listargs, 1 ) ); | 
					
						
							|  |  |  | 	self->world->horb = PyFloat_AsDouble( PyList_GetItem( listargs, 2 ) ); | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getZen( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyList_New( 0 ); | 
					
						
							|  |  |  | 	if( !attr ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 						"couldn't create list" ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->zenr ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->zeng ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->zenb ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return attr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setZen( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *listargs = 0; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "O", &listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_TypeError, | 
					
						
							|  |  |  | 						"expected list argument" ) ); | 
					
						
							|  |  |  | 	self->world->zenr = PyFloat_AsDouble( PyList_GetItem( listargs, 0 ) ); | 
					
						
							|  |  |  | 	self->world->zeng = PyFloat_AsDouble( PyList_GetItem( listargs, 1 ) ); | 
					
						
							|  |  |  | 	self->world->zenb = PyFloat_AsDouble( PyList_GetItem( listargs, 2 ) ); | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getAmb( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyList_New( 0 ); | 
					
						
							|  |  |  | 	if( !attr ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, | 
					
						
							|  |  |  | 						"couldn't create list" ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->ambr ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->ambg ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->ambb ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return attr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setAmb( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *listargs = 0; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "O", &listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( !PyList_Check( listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( PyList_Size( listargs ) != 3 ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "wrong list size" ) ); | 
					
						
							|  |  |  | 	self->world->ambr = PyFloat_AsDouble( PyList_GetItem( listargs, 0 ) ); | 
					
						
							|  |  |  | 	self->world->ambg = PyFloat_AsDouble( PyList_GetItem( listargs, 1 ) ); | 
					
						
							|  |  |  | 	self->world->ambb = PyFloat_AsDouble( PyList_GetItem( listargs, 2 ) ); | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getStar( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyList_New( 0 ); | 
					
						
							|  |  |  | 	if( !attr ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_RuntimeError, "couldn't create list" ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starr ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starg ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starb ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starsize ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starmindist ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->stardist ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->starcolnoise ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return attr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setStar( BPy_World * self, PyObject * args ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *listargs = 0; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "O", &listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( !PyList_Check( listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( PyList_Size( listargs ) != 7 ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "wrong list size" ) ); | 
					
						
							|  |  |  | 	self->world->starr = PyFloat_AsDouble( PyList_GetItem( listargs, 0 ) ); | 
					
						
							|  |  |  | 	self->world->starg = PyFloat_AsDouble( PyList_GetItem( listargs, 1 ) ); | 
					
						
							|  |  |  | 	self->world->starb = PyFloat_AsDouble( PyList_GetItem( listargs, 2 ) ); | 
					
						
							|  |  |  | 	self->world->starsize = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 3 ) ); | 
					
						
							|  |  |  | 	self->world->starmindist = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 4 ) ); | 
					
						
							|  |  |  | 	self->world->stardist = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 5 ) ); | 
					
						
							|  |  |  | 	self->world->starcolnoise = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 6 ) ); | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getMist( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject *attr = PyList_New( 0 ); | 
					
						
							|  |  |  | 	if( !attr ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_RuntimeError, "couldn't create list" ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->misi ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->miststa ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->mistdist ) ); | 
					
						
							|  |  |  | 	PyList_Append( attr, PyFloat_FromDouble( self->world->misthi ) ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return attr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_setMist( BPy_World * self, PyObject * args ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *listargs = 0; | 
					
						
							|  |  |  | 	if( !PyArg_ParseTuple( args, "O", &listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( !PyList_Check( listargs ) ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "expected list argument" ) ); | 
					
						
							|  |  |  | 	if( PyList_Size( listargs ) != 4 ) | 
					
						
							|  |  |  | 		return ( EXPP_ReturnPyObjError | 
					
						
							|  |  |  | 			 ( PyExc_TypeError, "wrong list size" ) ); | 
					
						
							|  |  |  | 	self->world->misi = PyFloat_AsDouble( PyList_GetItem( listargs, 0 ) ); | 
					
						
							|  |  |  | 	self->world->miststa = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 1 ) ); | 
					
						
							|  |  |  | 	self->world->mistdist = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 2 ) ); | 
					
						
							|  |  |  | 	self->world->misthi = | 
					
						
							|  |  |  | 		PyFloat_AsDouble( PyList_GetItem( listargs, 3 ) ); | 
					
						
							|  |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | /* world.addScriptLink */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_addScriptLink( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	World *world = self->world; | 
					
						
							|  |  |  | 	ScriptLink *slink = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	slink = &( world )->scriptlink; | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( !EXPP_addScriptLink( slink, args, 0 ) ) | 
					
						
							|  |  |  | 		return EXPP_incr_ret( Py_None ); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* world.clearScriptLinks */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_clearScriptLinks( BPy_World * self ) | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	World *world = self->world; | 
					
						
							|  |  |  | 	ScriptLink *slink = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	slink = &( world )->scriptlink; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return EXPP_incr_ret( Py_BuildValue | 
					
						
							|  |  |  | 			      ( "i", EXPP_clearScriptLinks( slink ) ) ); | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* world.getScriptLinks */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_getScriptLinks( BPy_World * self, PyObject * args ) | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	World *world = self->world; | 
					
						
							|  |  |  | 	ScriptLink *slink = NULL; | 
					
						
							|  |  |  | 	PyObject *ret = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	slink = &( world )->scriptlink; | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	ret = EXPP_getScriptLinks( slink, args, 0 ); | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( ret ) | 
					
						
							|  |  |  | 		return ret; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
											  
											
												New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
  Thanks to them for the new contributions!
  (I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'.  Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work.  G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A).  Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode.  It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender.  Loading after the program is up has no such problems.  When I finish I'll post examples of demo mode scripts.
											
										 
											2004-07-03 05:17:04 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-20 16:22:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
  image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
  be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
  accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
  now), same in Blender.Sound: renamed makeActive to setCurrent.  Stephen Swaney
  pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
  functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
  after reading a discussion on blender.org's Python forum where eeshlo mentioned the
  pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
  confirmed, talked to Theeth about this and as he suggested am changing the default
  back to 'worldspace'.
											
										 
											2004-10-20 05:51:24 +00:00
										 |  |  | /* world.setCurrent */ | 
					
						
							|  |  |  | static PyObject *World_setCurrent( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2004-09-20 16:22:32 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	World *world = self->world; | 
					
						
							|  |  |  | 	/* If there is a world then it now has one less user */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( G.scene->world ) | 
					
						
							| 
									
										
										
										
											2004-09-20 16:22:32 +00:00
										 |  |  | 		G.scene->world->id.us--; | 
					
						
							|  |  |  | 	world->id.us++; | 
					
						
							|  |  |  | 	G.scene->world = world; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	Py_INCREF( Py_None ); | 
					
						
							| 
									
										
										
										
											2004-09-20 16:22:32 +00:00
										 |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | /*@{*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType destructor | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static void World_DeAlloc( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	PyObject_DEL( self ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType attribute getter | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This is the callback called when a user tries to retrieve the contents of | 
					
						
							|  |  |  |  * World PyObject data members.  Ex. in Python: "print myworld.lens". | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_GetAttr( BPy_World * self, char *name ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if( strcmp( name, "name" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getName( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "skytype" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getSkytype( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mode" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getMode( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mistype" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getMistype( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "hor" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getHor( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "zen" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getZen( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "amb" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getAmb( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "star" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getStar( self ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mist" ) == 0 ) | 
					
						
							|  |  |  | 		return World_getMist( self ); | 
					
						
							| 
									
										
										
										
											2005-01-13 03:04:12 +00:00
										 |  |  | 	if( strcmp( name, "users" ) == 0 ) | 
					
						
							|  |  |  | 		return PyInt_FromLong( self->world->id.us ); | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return Py_FindMethod( BPy_World_methods, ( PyObject * ) self, name ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType attribute setter | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This is the callback called when the user tries to change the value of some | 
					
						
							|  |  |  |  * World data member.  Ex. in Python: "myworld.lens = 45.0". | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static int World_SetAttr( BPy_World * self, char *name, PyObject * value ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *valtuple = Py_BuildValue( "(O)", value ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if( !valtuple ) | 
					
						
							|  |  |  | 		return EXPP_ReturnIntError( PyExc_MemoryError, | 
					
						
							|  |  |  | 					    "WorldSetAttr: couldn't parse args" ); | 
					
						
							|  |  |  | 	if( strcmp( name, "name" ) == 0 ) | 
					
						
							|  |  |  | 		World_setName( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "skytype" ) == 0 ) | 
					
						
							|  |  |  | 		World_setSkytype( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mode" ) == 0 ) | 
					
						
							|  |  |  | 		World_setMode( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mistype" ) == 0 ) | 
					
						
							|  |  |  | 		World_setMistype( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "hor" ) == 0 ) | 
					
						
							|  |  |  | 		World_setHor( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "zen" ) == 0 ) | 
					
						
							|  |  |  | 		World_setZen( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "amb" ) == 0 ) | 
					
						
							|  |  |  | 		World_setAmb( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "star" ) == 0 ) | 
					
						
							|  |  |  | 		World_setStar( self, valtuple ); | 
					
						
							|  |  |  | 	if( strcmp( name, "mist" ) == 0 ) | 
					
						
							|  |  |  | 		World_setMist( self, valtuple ); | 
					
						
							|  |  |  | 	return 0;		/* normal exit */ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType compare function | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This function compares two given World PyObjects, returning 0 for equality | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * and -1 otherwise.	In Python it becomes 1 if they are equal and 0 case not. | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * The comparison is done with their pointers to Blender World Data objects, | 
					
						
							|  |  |  |  * so any two wrappers pointing to the same Blender World Data will be | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * considered the same World PyObject.	Currently, only the "==" and "!=" | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  * comparisons are meaninful -- the "<", "<=", ">" or ">=" are not. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static int World_Compare( BPy_World * a, BPy_World * b ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	World *pa = a->world, *pb = b->world; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( pa == pb ) ? 0 : -1; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType print callback | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This function is called when the user tries to print a PyObject of type | 
					
						
							|  |  |  |  * World.  It builds a string with the name of the wrapped Blender World. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-07-04 16:06:39 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2003-06-27 07:46:29 +00:00
										 |  |  | static int World_Print(BPy_World *self, FILE *fp, int flags) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | {  | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	fprintf(fp, "[World \"%s\"]", self->world->id.name+2); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2003-07-04 16:06:39 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \brief The World PyType repr callback | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This function is called when the statement "repr(myworld)" is executed in | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  |  * Python.	Repr gives a string representation of a PyObject. | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | static PyObject *World_Repr( BPy_World * self ) | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return PyString_FromFormat( "[World \"%s\"]", | 
					
						
							|  |  |  | 				    self->world->id.name + 2 ); | 
					
						
							| 
									
										
										
										
											2003-06-21 11:27:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*@}*/ | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | static int World_compare (BPy_World *a, BPy_World *b) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | 	World *pa = a->world, *pb = b->world; | 
					
						
							|  |  |  | 	return (pa == pb) ? 0:-1; | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2003-10-28 00:29:37 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | PyObject *World_CreatePyObject( struct World * world ) | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	BPy_World *blen_object; | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	blen_object = ( BPy_World * ) PyObject_NEW( BPy_World, &World_Type ); | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	if( blen_object == NULL ) { | 
					
						
							|  |  |  | 		return ( NULL ); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	blen_object->world = world; | 
					
						
							|  |  |  | 	return ( ( PyObject * ) blen_object ); | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | int World_CheckPyObject( PyObject * py_obj ) | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( py_obj->ob_type == &World_Type ); | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | World *World_FromPyObject( PyObject * py_obj ) | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	BPy_World *blen_obj; | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	blen_obj = ( BPy_World * ) py_obj; | 
					
						
							|  |  |  | 	return ( blen_obj->world ); | 
					
						
							| 
									
										
										
										
											2003-07-27 13:53:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | /* Description: Returns the object with the name specified by the argument   */ | 
					
						
							|  |  |  | /*		name. Note that the calling function has to remove the first */ | 
					
						
							|  |  |  | /*		two characters of the object name. These two characters	     */ | 
					
						
							|  |  |  | /*		specify the type of the object (OB, ME, WO, ...)           */ | 
					
						
							|  |  |  | /*		The function will return NULL when no object with the given  */ | 
					
						
							|  |  |  | /*		 name is found.						*/ | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | /*****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | World *GetWorldByName( char *name ) | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	World *world_iter; | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	world_iter = G.main->world.first; | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	while( world_iter ) { | 
					
						
							|  |  |  | 		if( StringEqual( name, GetIdName( &( world_iter->id ) ) ) ) { | 
					
						
							|  |  |  | 			return ( world_iter ); | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		world_iter = world_iter->id.next; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* There is no object with the given name */ | 
					
						
							| 
									
										
										
										
											2004-09-25 20:30:40 +00:00
										 |  |  | 	return ( NULL ); | 
					
						
							| 
									
										
										
										
											2003-07-27 15:56:32 +00:00
										 |  |  | } |