diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c index 6acc37140a8..5f1f0bf1504 100644 --- a/source/blender/python/BPY_interface.c +++ b/source/blender/python/BPY_interface.c @@ -59,12 +59,31 @@ #include "api2_2x/Blender.h" #include "api2_2x/Camera.h" #include "api2_2x/Draw.h" -#include "api2_2x/Lamp.h" -#include "api2_2x/NMesh.h" -#include "api2_2x/Object.h" #include "api2_2x/Registry.h" -#include "api2_2x/Scene.h" + +/* ID_asPyObject */ +#include "api2_2x/Object.h" +#include "api2_2x/Camera.h" +#include "api2_2x/Armature.h" +#include "api2_2x/Lamp.h" +/*#include "api2_2x/ CurNurb.h" do we need this ? */ +#include "api2_2x/Curve.h" +#include "api2_2x/NMesh.h" +#include "api2_2x/Mesh.h" +#include "api2_2x/Lattice.h" +#include "api2_2x/Metaball.h" +#include "api2_2x/Text3d.h" +#include "api2_2x/Font.h" +#include "api2_2x/Group.h" #include "api2_2x/World.h" +#include "api2_2x/Texture.h" +#include "api2_2x/Ipo.h" +#include "api2_2x/Text.h" +#include "api2_2x/Sound.h" +#include "api2_2x/NLA.h" +#include "api2_2x/Main.h" +#include "api2_2x/Scene.h" + /* bpy_registryDict is declared in api2_2x/Registry.h and defined * in api2_2x/Registry.c @@ -1334,25 +1353,68 @@ static ScriptLink *ID_getScriptlink( ID * id ) } } -static PyObject *ID_asPyObject( ID * id ) +PyObject *ID_asPyObject( ID * id ) { switch ( MAKE_ID2( id->name[0], id->name[1] ) ) { - case ID_OB: - return Object_CreatePyObject( ( Object * ) id ); - case ID_LA: - return Lamp_CreatePyObject( ( Lamp * ) id ); - case ID_CA: - return Camera_CreatePyObject( ( Camera * ) id ); - case ID_MA: - return Material_CreatePyObject( ( Material * ) id ); - case ID_WO: - return World_CreatePyObject( ( World * ) id ); case ID_SCE: - return Scene_CreatePyObject( ( Scene * ) id ); - default: - Py_INCREF( Py_None ); - return Py_None; + return Scene_CreatePyObject( ( Scene *) id ); + break; + case ID_OB: + return Object_CreatePyObject( (Object *) id ); + break; + case ID_ME: + return Mesh_CreatePyObject( (Mesh *)id, NULL ); + break; + case ID_CU: /*todo, support curnurbs?*/ + return Curve_CreatePyObject((Curve *)id); + break; + case ID_MB: + return Metaball_CreatePyObject((MetaBall *)id); + break; + case ID_MA: + return Material_CreatePyObject((Material *)id); + break; + case ID_TE: + return Texture_CreatePyObject((Tex *)id); + break; + case ID_IM: + return Image_CreatePyObject((Image *)id); + break; + case ID_LT: + return Lattice_CreatePyObject((Lattice *)id); + break; + case ID_LA: + return Lamp_CreatePyObject((Lamp *)id); + break; + case ID_CA: + return Camera_CreatePyObject((Camera *)id); + break; + case ID_IP: + return Ipo_CreatePyObject((Ipo *)id); + break; + case ID_WO: + return World_CreatePyObject((World *)id); + break; + case ID_VF: + return Font_CreatePyObject((VFont *)id); + break; + case ID_TXT: + return Text_CreatePyObject((Text *)id); + break; + case ID_SO: + return Sound_CreatePyObject((bSound *)id); + break; + case ID_GR: + return Group_CreatePyObject((Group *)id); + break; + case ID_AR: + return Armature_CreatePyObject((bArmature *)id); + break; + case ID_AC: + return Action_CreatePyObject((bAction *)id); + break; } + Py_RETURN_NONE; } int BPY_has_onload_script( void ) diff --git a/source/blender/python/api2_2x/Main.c b/source/blender/python/api2_2x/Main.c index 6fceec1f485..23af017c164 100644 --- a/source/blender/python/api2_2x/Main.c +++ b/source/blender/python/api2_2x/Main.c @@ -67,7 +67,7 @@ #include "BIF_drawtext.h" /* unlink_text */ /* python types */ -#include "../BPY_extern.h" /* clearing scriptlinks */ +#include "../BPY_extern.h" /* clearing scriptlinks and ID_asPyObject */ #include "gen_utils.h" @@ -101,69 +101,6 @@ static PyObject *MainSeq_CreatePyObject( Link *iter, int type ) return (PyObject *)seq; } -static PyObject *Link_as_BPyData( Link *link, short type ) -{ - switch (type) { - case ID_SCE: - return Scene_CreatePyObject( ( Scene *) link ); - break; - case ID_OB: - return Object_CreatePyObject( (Object *) link ); - break; - case ID_ME: - return Mesh_CreatePyObject( (Mesh *)link, NULL ); - break; - case ID_CU: /*todo, support curnurbs?*/ - return Curve_CreatePyObject((Curve *)link); - break; - case ID_MB: - return Metaball_CreatePyObject((MetaBall *)link); - break; - case ID_MA: - return Material_CreatePyObject((Material *)link); - break; - case ID_TE: - return Texture_CreatePyObject((Tex *)link); - break; - case ID_IM: - return Image_CreatePyObject((Image *)link); - break; - case ID_LT: - return Lattice_CreatePyObject((Lattice *)link); - break; - case ID_LA: - return Lamp_CreatePyObject((Lamp *)link); - break; - case ID_CA: - return Camera_CreatePyObject((Camera *)link); - break; - case ID_IP: - return Ipo_CreatePyObject((Ipo *)link); - break; - case ID_WO: - return World_CreatePyObject((World *)link); - break; - case ID_VF: - return Font_CreatePyObject((VFont *)link); - break; - case ID_TXT: - return Text_CreatePyObject((Text *)link); - break; - case ID_SO: - return Sound_CreatePyObject((bSound *)link); - break; - case ID_GR: - return Group_CreatePyObject((Group *)link); - break; - case ID_AR: - return Armature_CreatePyObject((bArmature *)link); - break; - case ID_AC: - return Action_CreatePyObject((bAction *)link); - break; - } - Py_RETURN_NONE; -} static int MainSeq_len( BPy_MainSeq * self ) { @@ -221,7 +158,7 @@ static PyObject * MainSeq_subscript(BPy_MainSeq * self, PyObject *key) (lib && use_lib && id->lib && (!strcmp( id->lib->name, lib))) /* only external lib */ ) { - return Link_as_BPyData((Link *)id, self->type); + return ID_asPyObject(id); } } } @@ -280,7 +217,7 @@ static PyObject *MainSeq_nextIter( BPy_MainSeq * self ) "iterator at end" ); } - object = Link_as_BPyData(self->iter, self->type); + object = ID_asPyObject((ID *)self->iter); link= self->iter->next; self->iter= link; diff --git a/source/blender/python/api2_2x/Main.h b/source/blender/python/api2_2x/Main.h index f1dd6c0782e..a76b9fc5160 100644 --- a/source/blender/python/api2_2x/Main.h +++ b/source/blender/python/api2_2x/Main.h @@ -38,6 +38,9 @@ /* The Main PyType Object defined in Main.c */ extern PyTypeObject MainSeq_Type; + /* BPY_interface.c */ +extern PyObject *ID_asPyObject( ID * id ); + #define BPy_MainSeq_Check(v) \ ((v)->ob_type == &MainSeq_Type)