diff --git a/source/blender/blenkernel/intern/script.c b/source/blender/blenkernel/intern/script.c index 45072513591dd2c8713bbb986ae8588c9b34a890..16b08e37b6c5b4422744a0462a44c869122e584f 100644 --- a/source/blender/blenkernel/intern/script.c +++ b/source/blender/blenkernel/intern/script.c @@ -38,10 +38,10 @@ #include "BPI_script.h" #include "MEM_guardedalloc.h" +#include "BKE_bad_level_calls.h" /* for BPY_clear_script */ /* #include "BLI_blenlib.h" -#include "BKE_bad_level_calls.h" #include "BKE_utildefines.h" #include "BKE_library.h" #include "BKE_global.h" diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c index 53a3b6f91d434de5a40794fdca50b6b8eeac9220..3ff3a9599b92661216f468bbdcee37cb75e4c738 100644 --- a/source/blender/python/BPY_interface.c +++ b/source/blender/python/BPY_interface.c @@ -611,8 +611,8 @@ int BPY_menu_do_python(short menutype, int event) buffer = MEM_mallocN(len+2, "pyfilebuf"); /* len+2 to add '\n\0' */ len = fread(buffer, 1, len, fp); - buffer[len-1] = '\n'; /* to fix potential syntax error */ - buffer[len] = '\0'; + buffer[len] = '\n'; /* fix syntax error in files w/o eol*/ + buffer[len+1] = '\0'; /* fast clean-up of dos cr/lf line endings: change '\r' to space */ diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c index 065960e45d8960ac19b0e54996a987f8eb639cb8..66d82c9509ce0a0235863f0d1ce7b1fa1d7fe70c 100644 --- a/source/blender/python/api2_2x/Blender.c +++ b/source/blender/python/api2_2x/Blender.c @@ -207,14 +207,15 @@ void M_Blender_Init (void) /* TODO: create a docstring for the Blender module */ module = Py_InitModule3("Blender", Blender_methods, NULL); + types_InitAll(); /* set all our pytypes to &PyType_Type*/ + dict = PyModule_GetDict (module); g_blenderdict = dict; + PyDict_SetItemString (dict, "Types", Types_Init()); PyDict_SetItemString (dict, "sys", sys_Init()); PyDict_SetItemString (dict, "Registry", Registry_Init()); PyDict_SetItemString (dict, "Scene", Scene_Init()); PyDict_SetItemString (dict, "Object", Object_Init()); - PyDict_SetItemString (dict, "Types", Types_Init()); - PyDict_SetItemString (dict, "NMesh", NMesh_Init()); PyDict_SetItemString (dict, "Material", Material_Init()); PyDict_SetItemString (dict, "Camera", Camera_Init()); PyDict_SetItemString (dict, "Lamp", Lamp_Init()); @@ -232,6 +233,7 @@ void M_Blender_Init (void) PyDict_SetItemString (dict, "Text", Text_Init()); PyDict_SetItemString (dict, "World", World_Init()); PyDict_SetItemString (dict, "Texture", Texture_Init()); + PyDict_SetItemString (dict, "NMesh", NMesh_Init()); PyDict_SetItemString (dict, "Noise", Noise_Init()); PyDict_SetItemString (dict, "Mathutils",Mathutils_Init()); } diff --git a/source/blender/python/api2_2x/Effect.c b/source/blender/python/api2_2x/Effect.c index 13afa2a5ad8570c5b24e80d4d4e8c30debe833df..ac6edead28aef66570ea9b03e09ae431e9541bda 100644 --- a/source/blender/python/api2_2x/Effect.c +++ b/source/blender/python/api2_2x/Effect.c @@ -33,6 +33,40 @@ #include "Particle.h" #include "Wave.h" +/*****************************************************************************/ +/* Python BPy_Effect methods table: */ +/*****************************************************************************/ +static PyMethodDef BPy_Effect_methods[] = { + {0} +}; + +/*****************************************************************************/ +/* Python Effect_Type structure definition: */ +/*****************************************************************************/ +PyTypeObject Effect_Type = +{ + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + "Effect", /* tp_name */ + sizeof (BPy_Effect), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)EffectDeAlloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)EffectGetAttr, /* tp_getattr */ + (setattrfunc)EffectSetAttr, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)EffectRepr, /* 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_Effect_methods, /* tp_methods */ + 0, /* tp_members */ +}; /*****************************************************************************/ /* Python method structure definition for Blender.Effect module: */ diff --git a/source/blender/python/api2_2x/Effect.h b/source/blender/python/api2_2x/Effect.h index 711afad0a2daa2212e724bd8e067dc7da901ed42..8b0562db2a4e4c12728d272049557451763ecbda 100644 --- a/source/blender/python/api2_2x/Effect.h +++ b/source/blender/python/api2_2x/Effect.h @@ -46,14 +46,6 @@ #include"gen_utils.h" #include "bpy_types.h" - -/*****************************************************************************/ -/* Python BPy_Effect methods table: */ -/*****************************************************************************/ -static PyMethodDef BPy_Effect_methods[] = { - {0} -}; - /*****************************************************************************/ /* Python API function prototypes for the Effect module. */ /*****************************************************************************/ @@ -79,32 +71,5 @@ PyObject *EffectRepr (BPy_Effect *msh); PyObject* EffectCreatePyObject (struct Effect *effect); int EffectCheckPyObject (PyObject *py_obj); struct Effect* EffectFromPyObject (PyObject *py_obj); -/*****************************************************************************/ -/* Python Effect_Type structure definition: */ -/*****************************************************************************/ -static PyTypeObject Effect_Type = -{ - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ - "Effect", /* tp_name */ - sizeof (BPy_Effect), /* tp_basicsize */ - 0, /* tp_itemsize */ - /* methods */ - (destructor)EffectDeAlloc, /* tp_dealloc */ - 0, /* tp_print */ - (getattrfunc)EffectGetAttr, /* tp_getattr */ - (setattrfunc)EffectSetAttr, /* tp_setattr */ - 0, /* tp_compare */ - (reprfunc)EffectRepr, /* 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_Effect_methods, /* tp_methods */ - 0, /* tp_members */ -}; #endif /* EXPP_EFFECT_H */ diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c index 25364642c7afd5e687de71f42217c6aede955da1..2c0e6c1172176323eec7e2736bacccd1654fc7d7 100644 --- a/source/blender/python/api2_2x/Object.c +++ b/source/blender/python/api2_2x/Object.c @@ -741,7 +741,7 @@ static PyObject *Object_getDrawMode (BPy_Object *self) static PyObject *Object_getAction (BPy_Object *self) { - BPy_Action *py_action = NULL; + /*BPy_Action *py_action = NULL;*/ if(!self->object->action){ Py_INCREF (Py_None); diff --git a/source/blender/python/api2_2x/Types.c b/source/blender/python/api2_2x/Types.c index 3a1b95f8b5949db3431f0c7687d8c81c0850c2a7..8acc3b6abbebafac0e3ddf1bfc7784611876d0f9 100644 --- a/source/blender/python/api2_2x/Types.c +++ b/source/blender/python/api2_2x/Types.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. @@ -37,82 +37,106 @@ This module is a dictionary of all Blender Python types"; struct PyMethodDef Null_methods[] = {{NULL, NULL}}; -/*****************************************************************************/ -/* Function: Types_Init */ -/*****************************************************************************/ -PyObject *Types_Init (void) +void types_InitAll(void) { - PyObject *submodule, *dict; - - /* These are only set when some object initializes them. But unless we - * do it now, we get an easy way to crash Blender. Maybe we'd better - * have an Init function for all these internal types that more than one - * module can use. We could call it after setting the Blender dictionary */ - Action_Type.ob_type = &PyType_Type; - matrix_Type.ob_type = &PyType_Type; - vector_Type.ob_type = &PyType_Type; - euler_Type.ob_type = &PyType_Type; - quaternion_Type.ob_type = &PyType_Type; - rgbTuple_Type.ob_type = &PyType_Type; - constant_Type.ob_type = &PyType_Type; - buffer_Type.ob_type = &PyType_Type; - Button_Type.ob_type = &PyType_Type; + /* The internal types (lowercase first letter, like constant_Type) are only + * set when some object initializes them. But unless we do it early, we get + * some easy and unpredictable (varies with platform, even distro) ways to + * crash Blender. Some modules also need this early up, so let's generalize + * and init all our pytypes here. */ + + Action_Type.ob_type = &PyType_Type; + Armature_Type.ob_type = &PyType_Type; BezTriple_Type.ob_type = &PyType_Type; - - /* Another one that needs to be here: */ + Bone_Type.ob_type = &PyType_Type; + Build_Type.ob_type = &PyType_Type; + Button_Type.ob_type = &PyType_Type; + Camera_Type.ob_type = &PyType_Type; + Curve_Type.ob_type = &PyType_Type; + Effect_Type.ob_type = &PyType_Type; + Image_Type.ob_type = &PyType_Type; + Ipo_Type.ob_type = &PyType_Type; + IpoCurve_Type.ob_type = &PyType_Type; + Lamp_Type.ob_type = &PyType_Type; + Lattice_Type.ob_type = &PyType_Type; + Material_Type.ob_type = &PyType_Type; + Metaball_Type.ob_type = &PyType_Type; + MTex_Type.ob_type = &PyType_Type; + NMCol_Type.ob_type = &PyType_Type; + NMFace_Type.ob_type = &PyType_Type; + NMVert_Type.ob_type = &PyType_Type; + NMesh_Type.ob_type = &PyType_Type; + Object_Type.ob_type = &PyType_Type; + Particle_Type.ob_type = &PyType_Type; + Scene_Type.ob_type = &PyType_Type; Text_Type.ob_type = &PyType_Type; + Texture_Type.ob_type = &PyType_Type; + Wave_Type.ob_type = &PyType_Type; + World_Type.ob_type = &PyType_Type; + buffer_Type.ob_type = &PyType_Type; + constant_Type.ob_type = &PyType_Type; + euler_Type.ob_type = &PyType_Type; + matrix_Type.ob_type = &PyType_Type; + quaternion_Type.ob_type = &PyType_Type; + rgbTuple_Type.ob_type = &PyType_Type; + vector_Type.ob_type = &PyType_Type; +} - Texture_Type.ob_type = &PyType_Type; - MTex_Type.ob_type = &PyType_Type; +/*****************************************************************************/ +/* Function: Types_Init */ +/*****************************************************************************/ +PyObject *Types_Init (void) +{ + PyObject *submodule, *dict; - submodule = Py_InitModule3 ("Blender.Types", Null_methods, M_Types_doc); + submodule = Py_InitModule3 ("Blender.Types", Null_methods, M_Types_doc); - dict = PyModule_GetDict(submodule); + dict = PyModule_GetDict(submodule); - /* The Blender Object Type */ + /* The Blender Object Type */ - PyDict_SetItemString(dict, "ObjectType", (PyObject *)&Object_Type); + PyDict_SetItemString(dict, "ObjectType", (PyObject *)&Object_Type); - /* Blender Object Data Types */ + /* Blender Object Data Types */ - PyDict_SetItemString(dict, "SceneType", (PyObject *)&Scene_Type); + PyDict_SetItemString(dict, "SceneType", (PyObject *)&Scene_Type); - PyDict_SetItemString(dict, "NMeshType", (PyObject *)&NMesh_Type); - PyDict_SetItemString(dict, "NMFaceType", (PyObject *)&NMFace_Type); - PyDict_SetItemString(dict, "NMVertType", (PyObject *)&NMVert_Type); - PyDict_SetItemString(dict, "NMColType", (PyObject *)&NMCol_Type); + PyDict_SetItemString(dict, "NMeshType", (PyObject *)&NMesh_Type); + PyDict_SetItemString(dict, "NMFaceType", (PyObject *)&NMFace_Type); + PyDict_SetItemString(dict, "NMVertType", (PyObject *)&NMVert_Type); + PyDict_SetItemString(dict, "NMColType", (PyObject *)&NMCol_Type); - PyDict_SetItemString(dict, "ArmatureType", (PyObject *)&Armature_Type); - PyDict_SetItemString(dict, "BoneType", (PyObject *)&Bone_Type); + PyDict_SetItemString(dict, "ArmatureType", (PyObject *)&Armature_Type); + PyDict_SetItemString(dict, "BoneType", (PyObject *)&Bone_Type); - PyDict_SetItemString(dict, "CurveType", (PyObject *)&Curve_Type); - PyDict_SetItemString(dict, "IpoType", (PyObject *)&Ipo_Type); - PyDict_SetItemString(dict, "MetaballType", (PyObject *)&Metaball_Type); + PyDict_SetItemString(dict, "CurveType", (PyObject *)&Curve_Type); + PyDict_SetItemString(dict, "IpoType", (PyObject *)&Ipo_Type); + PyDict_SetItemString(dict, "MetaballType", (PyObject *)&Metaball_Type); - PyDict_SetItemString(dict, "CameraType", (PyObject *)&Camera_Type); - PyDict_SetItemString(dict, "ImageType", (PyObject *)&Image_Type); - PyDict_SetItemString(dict, "LampType", (PyObject *)&Lamp_Type); - PyDict_SetItemString(dict, "TextType", (PyObject *)&Text_Type); - PyDict_SetItemString(dict, "MaterialType", (PyObject *)&Material_Type); + PyDict_SetItemString(dict, "CameraType", (PyObject *)&Camera_Type); + PyDict_SetItemString(dict, "ImageType", (PyObject *)&Image_Type); + PyDict_SetItemString(dict, "LampType", (PyObject *)&Lamp_Type); + PyDict_SetItemString(dict, "TextType", (PyObject *)&Text_Type); + PyDict_SetItemString(dict, "MaterialType", (PyObject *)&Material_Type); - PyDict_SetItemString(dict, "ButtonType", (PyObject *)&Button_Type); + PyDict_SetItemString(dict, "ButtonType", (PyObject *)&Button_Type); - PyDict_SetItemString(dict, "LatticeType", (PyObject *)&Lattice_Type); + PyDict_SetItemString(dict, "LatticeType", (PyObject *)&Lattice_Type); - PyDict_SetItemString(dict, "TextureType", (PyObject *)&Texture_Type); - PyDict_SetItemString(dict, "MTexType", (PyObject *)&MTex_Type); + PyDict_SetItemString(dict, "TextureType", (PyObject *)&Texture_Type); + PyDict_SetItemString(dict, "MTexType", (PyObject *)&MTex_Type); - /* External helper Types available to the main ones above */ + /* External helper Types available to the main ones above */ - PyDict_SetItemString(dict, "vectorType", (PyObject *)&vector_Type); - PyDict_SetItemString(dict, "bufferType", (PyObject *)&buffer_Type); - PyDict_SetItemString(dict, "constantType", (PyObject *)&constant_Type); - PyDict_SetItemString(dict, "rgbTupleType", (PyObject *)&rgbTuple_Type); - PyDict_SetItemString(dict, "matrix_Type", (PyObject *)&matrix_Type); - PyDict_SetItemString(dict, "eulerType", (PyObject *)&euler_Type); - PyDict_SetItemString(dict, "quaternionType", (PyObject *)&quaternion_Type); - PyDict_SetItemString(dict, "BezTripleType", (PyObject *)&BezTriple_Type); - PyDict_SetItemString(dict, "ActionType", (PyObject *)&Action_Type); + PyDict_SetItemString(dict, "vectorType", (PyObject *)&vector_Type); + PyDict_SetItemString(dict, "bufferType", (PyObject *)&buffer_Type); + PyDict_SetItemString(dict, "constantType", (PyObject *)&constant_Type); + PyDict_SetItemString(dict, "rgbTupleType", (PyObject *)&rgbTuple_Type); + PyDict_SetItemString(dict, "matrix_Type", (PyObject *)&matrix_Type); + PyDict_SetItemString(dict, "eulerType", (PyObject *)&euler_Type); + PyDict_SetItemString(dict, "quaternionType", (PyObject *)&quaternion_Type); + PyDict_SetItemString(dict, "BezTripleType", (PyObject *)&BezTriple_Type); + PyDict_SetItemString(dict, "ActionType", (PyObject *)&Action_Type); - return submodule; + return submodule; } diff --git a/source/blender/python/api2_2x/Types.h b/source/blender/python/api2_2x/Types.h index ec812ef183c9f65a9830d2f2cfa72b8608810623..87d45fa7795fc3fd702d276ef6d2a4c9cee5a2e6 100644 --- a/source/blender/python/api2_2x/Types.h +++ b/source/blender/python/api2_2x/Types.h @@ -34,22 +34,21 @@ #include "Python.h" -extern PyTypeObject Button_Type, Material_Type; - -extern PyTypeObject Texture_Type, MTex_Type; - +extern PyTypeObject Action_Type, Armature_Type; +extern PyTypeObject BezTriple_Type, Bone_Type, Build_Type, Button_Type; +extern PyTypeObject Camera_Type, Curve_Type; +extern PyTypeObject Effect_Type; +extern PyTypeObject Image_Type, Ipo_Type, IpoCurve_Type; +extern PyTypeObject Lamp_Type, Lattice_Type; +extern PyTypeObject Material_Type, Metaball_Type, MTex_Type; +extern PyTypeObject NMFace_Type, NMVert_Type, NMCol_Type, NMesh_Type; extern PyTypeObject Object_Type; +extern PyTypeObject Particle_Type; extern PyTypeObject Scene_Type; -extern PyTypeObject NMesh_Type, NMFace_Type, NMVert_Type, NMCol_Type; -extern PyTypeObject Camera_Type, Lamp_Type, Image_Type, Text_Type; -extern PyTypeObject Armature_Type, Bone_Type; -extern PyTypeObject Curve_Type, Ipo_Type, Metaball_Type; -extern PyTypeObject Lattice_Type; - -extern PyTypeObject buffer_Type, rgbTuple_Type, - constant_Type, BezTriple_Type; +extern PyTypeObject Text_Type, Texture_Type; +extern PyTypeObject Wave_Type, World_Type; -extern PyTypeObject vector_Type, matrix_Type, euler_Type, quaternion_Type; -extern PyTypeObject Action_Type; +extern PyTypeObject buffer_Type, constant_Type, euler_Type; +extern PyTypeObject matrix_Type, quaternion_Type, rgbTuple_Type, vector_Type; #endif /* EXPP_TYPES_H */ diff --git a/source/blender/python/api2_2x/doc/Draw.py b/source/blender/python/api2_2x/doc/Draw.py index 4a0185cd389b8da5eb39be905934cac1bf769ec3..3c391f9384854b61071b82ec73595b5343b16e96 100644 --- a/source/blender/python/api2_2x/doc/Draw.py +++ b/source/blender/python/api2_2x/doc/Draw.py @@ -381,3 +381,12 @@ def Text(string, fontsize = 'normal'): @rtype: int @return: The width of I{string} drawn with the chosen I{fontsize}. """ + +class Button: + """ + The Button object + ================= + This object represents a button in Blender's GUI. + @type val: int or float or string (depends on button type). + @cvar val: The button's value. + """ diff --git a/source/blender/python/api2_2x/matrix.c b/source/blender/python/api2_2x/matrix.c index cfd7a6604df9cc830e4d210bf4bbac987048abe6..42f82ef55879cdb4ee2104fe0662eaa601da89e8 100644 --- a/source/blender/python/api2_2x/matrix.c +++ b/source/blender/python/api2_2x/matrix.c @@ -264,7 +264,7 @@ PyObject *Matrix_Invert(MatrixObject *self) { float det; int x,y,z; - float *mat; + float *mat = NULL; float t; if(self->rowSize != self->colSize) diff --git a/source/blender/python/api2_2x/modules.h b/source/blender/python/api2_2x/modules.h index b761fbad2a0408c1471a872ea882cc56c4fba48a..74f3ec81b5e5b087c900fcce71f9a4630fa6fa9b 100644 --- a/source/blender/python/api2_2x/modules.h +++ b/source/blender/python/api2_2x/modules.h @@ -62,6 +62,8 @@ extern PyObject *g_blenderdict; /*****************************************************************************/ void M_Blender_Init (void); +void types_InitAll(void); /* in Types.c */ + /* sys */ PyObject * sys_Init (void);