Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2007-03-11 07:05:45 +0300
committerCampbell Barton <ideasman42@gmail.com>2007-03-11 07:05:45 +0300
commit1135434ed18b4d89505ce0ce9673bf801e4b48e7 (patch)
treee28fbb3300ca1e5013ea2719bfae0c6173d15176 /source/blender/python/api2_2x/gen_library.c
parent36eba6eb6c733bae0283758e7689595af023c401 (diff)
moved python functions that deal with blender libdata into gen_library.c from gen_utils and BPY_interface
small cleanup, removed unused functions and explicetly cast pointers..
Diffstat (limited to 'source/blender/python/api2_2x/gen_library.c')
-rw-r--r--source/blender/python/api2_2x/gen_library.c308
1 files changed, 308 insertions, 0 deletions
diff --git a/source/blender/python/api2_2x/gen_library.c b/source/blender/python/api2_2x/gen_library.c
new file mode 100644
index 00000000000..af7b031f0fc
--- /dev/null
+++ b/source/blender/python/api2_2x/gen_library.c
@@ -0,0 +1,308 @@
+#include "gen_library.h"
+#include "gen_utils.h" /*This must come first*/
+
+/* use for GenericLib_getProperties */
+#include "BKE_idprop.h"
+#include "IDProp.h"
+
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_library.h"
+
+/* GenericLib */
+#include "World.h"
+#include "Font.h"
+#include "Metaball.h"
+#include "Curve.h"
+#include "Camera.h"
+#include "NLA.h"
+#include "Lattice.h"
+#include "Armature.h"
+#include "Lamp.h"
+#include "Text.h"
+#include "Sound.h"
+#include "Scene.h"
+#include "Mesh.h"
+#include "Group.h"
+#include "Object.h"
+#include "Texture.h"
+#include "Ipo.h"
+#include "DNA_object_types.h"
+#include "DNA_ipo_types.h"
+
+
+
+/* Generic get/set attrs */
+PyObject *GenericLib_getName( void *self )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "data has been removed" ) );
+ return PyString_FromString( id->name + 2 );
+}
+
+int GenericLib_setName( void *self, PyObject *value )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ char *name = NULL;
+ if (!id) return ( EXPP_ReturnIntError( PyExc_RuntimeError, "data has been removed" ) );
+
+ name = PyString_AsString ( value );
+ if( !name )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected string argument" );
+
+ rename_id( id, name );
+
+ return 0;
+}
+
+PyObject *GenericLib_getFakeUser( void *self )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "data has been removed" ) );
+ if (id->flag & LIB_FAKEUSER)
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
+}
+
+int GenericLib_setFakeUser( void *self, PyObject *value )
+{
+ int param;
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnIntError( PyExc_RuntimeError, "data has been removed" ) );
+
+ param = PyObject_IsTrue( value );
+ if( param == -1 )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected int argument in range [0,1]" );
+
+ if (param) {
+ if (!(id->flag & LIB_FAKEUSER)) {
+ id->flag |= LIB_FAKEUSER;
+ id_us_plus(id);
+ }
+ } else {
+ if (id->flag & LIB_FAKEUSER) {
+ id->flag &= ~LIB_FAKEUSER;
+ id->us--;
+ }
+ }
+ return 0;
+}
+
+/* read only */
+PyObject *GenericLib_getLib( void *self )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "data has been removed" ) );
+
+ if (id->lib)
+ return PyString_FromString(id->lib->name);
+ else
+ return EXPP_incr_ret( Py_None );
+}
+
+PyObject *GenericLib_getUsers( void *self )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "data has been removed" ) );
+ return PyInt_FromLong(id->us);
+}
+
+PyObject *GenericLib_getProperties( void *self )
+{
+ ID *id = ((BPy_GenericLib *)self)->id;
+ if (!id) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "data has been removed" ) );
+ return BPy_Wrap_IDProperty( id, IDP_GetProperties(id, 1), NULL );
+}
+
+/* use for any.setName("name")*/
+PyObject * GenericLib_setName_with_method( void *self, PyObject *args )
+{
+ return EXPP_setterWrapper( (void *)self, args, (setter)GenericLib_setName );
+}
+
+
+/*
+ * returns the Blender lib type code from a PyObject
+ * -1 for no match, only give this function libdata
+ *
+ * At the moment this is only used by GenericLib_assignData
+ * so not all types are needed.
+ */
+short GenericLib_getType(PyObject * pydata)
+{
+ //~ if (BPy_Scene_Check(pydata)) return ID_SCE;
+ if (BPy_Object_Check(pydata)) return ID_OB;
+ if (BPy_Mesh_Check(pydata)) return ID_ME;
+ //~ if (BPy_Curve_Check(pydata)) return ID_CU;
+ //~ if (BPy_Metaball_Check(pydata)) return ID_MB;
+ //~ if (BPy_Material_Check(pydata)) return ID_MA;
+ if (BPy_Texture_Check(pydata)) return ID_TE;
+ //~ if (BPy_Image_Check(pydata)) return ID_IM;
+ //~ //if (BPy_Lattice_Check(pydata)) return ID_LT;
+ //~ if (BPy_Lamp_Check(pydata)) return ID_LA;
+ //~ if (BPy_Camera_Check(pydata)) return ID_CA;
+ if (BPy_Ipo_Check(pydata)) return ID_IP;
+ if (BPy_World_Check(pydata)) return ID_WO;
+ //~ //if (BPy_Font_Check(pydata)) return ID_VF;
+ //~ if (BPy_Text_Check(pydata)) return ID_TXT;
+ //~ if (BPy_Sound_Check(pydata)) return ID_SO;
+ if (BPy_Group_Check(pydata)) return ID_GR;
+ //~ if (BPy_Armature_Check(pydata)) return ID_AR;
+ //~ if (BPy_Action_Check(pydata)) return ID_AC;
+
+ return -1;
+}
+
+
+/*
+ * This function is used to assign a PyObject representing
+ * blender libdata to a pointer.
+ *
+ * Python examples of this are...
+ * ob.DupGroup = dupliGroup
+ * mesh.texMesh = texme
+ * ob.ipo = None
+ *
+ * This function deals with type checking, data usercounts,
+ * and raising errors.
+ *
+ * value - python value
+ * data - Blender pointer to assign value to
+ * ndata - Use this if there is a value data cannot be.
+ * for instance, a curve's curve modifier cant point to its self.
+ * refcount - non zero values will modify blenders user count.
+ * type - ID type.
+ * subtype - used only for objects and IPO's to stop the wrong types of obs/ipos
+ * being assigned.
+ *
+ */
+int GenericLib_assignData(PyObject *value, void **data, void **ndata, short refcount, short type, short subtype)
+{
+ ID *id=NULL;
+
+ if (*data && ndata && *data == *ndata) {
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "Cannot set this data to its self" );
+
+ id = ((ID*)*data);
+ }
+ if (value == Py_None) {
+ *data = NULL;
+ if (refcount && id) id->us--;
+ } else if (GenericLib_getType(value) == type) {
+
+ /* object subtypes */
+ if (subtype != 0) {
+ if (type == ID_OB) {
+ Object *ob= (Object *)(((BPy_GenericLib *)value)->id);
+ if (ob->type != subtype)
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "Object type not supported" );
+ }
+
+ if (type == ID_IP) {
+ Ipo *ipo = (Ipo *)(((BPy_GenericLib *)value)->id);
+ if (ipo->blocktype != subtype)
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "Ipo type does is not compatible" );
+ }
+
+
+ }
+ if (refcount && id) id->us--;
+ id = ((BPy_GenericLib *)value)->id;
+ id->us++;
+ *data = id;
+ } else {
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "Could not assign Python Type - None or Library Object" );
+ }
+ return 0;
+}
+
+
+/*
+ * returns the ID of the object with given name
+ * from a given list.
+ */
+ID *GetIdFromList( ListBase * list, char *name )
+{
+ ID *id = list->first;
+
+ while( id ) {
+ if( strcmp( name, id->name + 2 ) == 0 )
+ break;
+ id = id->next;
+ }
+
+ return id;
+}
+
+
+PyObject *GetPyObjectFromID( ID * id )
+{
+ switch ( MAKE_ID2( id->name[0], id->name[1] ) ) {
+ case ID_SCE:
+ 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;
+}
+