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-10 12:43:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2007-03-10 12:43:43 +0300
commit59ff076d033009f210a517cca55c4cbd5a97dec3 (patch)
tree1908bdc38bb8c6311008555067736a264432d5b0 /source/blender/python/api2_2x/Main.c
parent046508b78dc4c214b0f8a891a24a3720a209c003 (diff)
Main
* Added bpy.*.new() - works for all except sound and font types * Added bpy.*.load() - works for sound, font and image types Text3d - removed unneeded check.
Diffstat (limited to 'source/blender/python/api2_2x/Main.c')
-rw-r--r--source/blender/python/api2_2x/Main.c281
1 files changed, 240 insertions, 41 deletions
diff --git a/source/blender/python/api2_2x/Main.c b/source/blender/python/api2_2x/Main.c
index 23af017c164..ec3f0afc503 100644
--- a/source/blender/python/api2_2x/Main.c
+++ b/source/blender/python/api2_2x/Main.c
@@ -47,24 +47,33 @@
#include "DNA_action_types.h"
#include "DNA_meta_types.h"
+/* Use the add_* from BKE_* */
#include "BKE_global.h"
+#include "BKE_armature.h"
+#include "BKE_ipo.h"
+#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_library.h"
+#include "BKE_lattice.h"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "BKE_sca.h" /*free_text_controllers*/
#include "BKE_font.h"
-#include "BKE_mball.h" /* add_mball */
-#include "BKE_mesh.h" /* add_mesh */
-#include "BKE_curve.h" /* add_curve */
+#include "BKE_mball.h"
+#include "BKE_mesh.h"
+#include "BKE_curve.h"
#include "BKE_material.h"
#include "BKE_group.h"
+#include "BKE_text.h"
+#include "BKE_texture.h"
+#include "BKE_world.h"
#include "BLI_blenlib.h" /* BLI_countlist */
#include "BIF_drawscene.h" /* for set_scene */
#include "BIF_screen.h" /* curarea */
#include "BIF_drawimage.h" /* what image */
#include "BIF_drawtext.h" /* unlink_text */
+#include "BIF_editsound.h" /* sound_new_sound */
/* python types */
#include "../BPY_extern.h" /* clearing scriptlinks and ID_asPyObject */
@@ -303,6 +312,8 @@ static int MainSeq_setActive(BPy_MainSeq *self, PyObject *value)
}
+
+/* New Data, internal functions */
Mesh *add_mesh__internal(char *name)
{
Mesh *mesh = add_mesh(); /* doesn't return NULL now, but might someday */
@@ -336,90 +347,276 @@ MetaBall *add_metaball__internal(char *name)
{
MetaBall *blmball; /* for actual Data we create in Blender */
blmball = add_mball( ); /* first create the MetaBall Data in Blender */
-
- /* null check? */
-
- /* return user count to zero because add_curve() inc'd it */
blmball->id.us = 0;
rename_id( &blmball->id, name );
return blmball;
}
+Material *add_material__internal(char *name)
+{
+ Material *bmat;
+ bmat = add_material( name );
+ bmat->id.us = 0; /* was incref'ed by add_material() above */
+ return bmat;
+}
+
+Tex *add_texture__internal(char *name)
+{
+ Tex *btex;
+ btex= add_texture( name );
+ btex->id.us = 0; /* was incref'ed by add_material() above */
+ return btex;
+}
+
+Lattice *add_lattice__internal(char *name)
+{
+ Lattice *blat;
+ blat= add_lattice( );
+ blat->id.us = 0; /* was incref'ed by add_material() above */
+ rename_id( &blat->id, name );
+ return blat;
+}
+
+Lamp *add_lamp__internal(char *name)
+{
+ Lamp *blam;
+ blam= add_lamp( );
+ blam->id.us = 0; /* was incref'ed by add_material() above */
+ rename_id( &blam->id, name );
+ return blam;
+}
+
+Camera *add_camera__internal(char *name)
+{
+ Camera *bcam;
+ bcam= add_camera( );
+ bcam->id.us = 0; /* was incref'ed by add_material() above */
+ rename_id( &bcam->id, name );
+ return bcam;
+}
+
+Ipo *add_ipo__internal(char *name, short idcode)
+{
+ Ipo *blipo;
+ blipo = add_ipo( name, idcode );
+ blipo->id.us = 0;
+ return blipo;
+}
+
+World *add_world__internal(char *name)
+{
+ World *bwor;
+ bwor= add_world( name );
+ bwor->id.us = 0; /* was incref'ed by add_material() above */
+ return bwor;
+}
+
+Text *add_text__internal(char *name)
+{
+ Text *btxt;
+ btxt= add_empty_text( );
+ rename_id( &btxt->id, name );
+ return btxt;
+}
+
+Group *add_group__internal(char *name)
+{
+ Group *bgrp;
+ bgrp= add_group( );
+ bgrp->id.us = 1;
+ rename_id( &bgrp->id, name );
+ return bgrp;
+}
+
+bArmature *add_armature__internal(char *name)
+{
+ bArmature *barm;
+ barm= add_armature( );
+ barm->id.us = 0;
+ rename_id( &barm->id, name );
+ return barm;
+}
+
+bAction *add_action__internal(char *name)
+{
+ bAction *bact;
+ bact = alloc_libblock( &G.main->action, ID_AC, name );
+ bact->id.flag |= LIB_FAKEUSER; /* no need to assign a user because alloc_libblock alredy assigns one */
+ return bact;
+}
+
PyObject *MainSeq_new(BPy_MainSeq *self, PyObject * args)
{
+ ID *id = NULL;
+ char *name, *ipo_type;
+ int img_width=256, img_height=256;
+ short ipo_code=NULL;
- char *name;
- if( !PyArg_ParseTuple( args, "s#", &name, 21 ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "string expected as argument" );
-
- /* TODO, New data functions */
+ if (self->type == ID_IM) {
+ /* Image, accepts width and height*/
+ if( !PyArg_ParseTuple( args, "s|ii", &name, &img_width, &img_height ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "one string and two ints expected as arguments" );
+
+ } else if (self->type == ID_IP) {
+ /* IPO, needs name and type strings */
+ if( !PyArg_ParseTuple( args, "ss", &name, &ipo_type ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "two strings expected as arguments" );
+
+ if( !strcmp( ipo_type, "Object" ) )
+ ipo_code = ID_OB;
+ else if( !strcmp( ipo_type, "Camera" ) )
+ ipo_code = ID_CA;
+ else if( !strcmp( ipo_type, "World" ) )
+ ipo_code = ID_WO;
+ else if( !strcmp( ipo_type, "Material" ) )
+ ipo_code = ID_MA;
+ else if( !strcmp( ipo_type, "Texture" ) )
+ ipo_code = ID_TE;
+ else if( !strcmp( ipo_type, "Lamp" ) )
+ ipo_code = ID_LA;
+ else if( !strcmp( ipo_type, "Action" ) )
+ ipo_code = ID_PO;
+ else if( !strcmp( ipo_type, "Constraint" ) )
+ ipo_code = ID_CO;
+ else if( !strcmp( ipo_type, "Sequence" ) )
+ ipo_code = ID_SEQ;
+ else if( !strcmp( ipo_type, "Curve" ) )
+ ipo_code = ID_CU;
+ else if( !strcmp( ipo_type, "Key" ) )
+ ipo_code = ID_KE;
+ else
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "Second argument for IPO type incorrect\t\nmust be a string in (Object, Camera, World, Material, Texture, Lamp, Action, Sequence, Curve, Key)" );
+
+ } else {
+ /* Other types only need the name */
+ if( !PyArg_ParseTuple( args, "s", &name ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "new(name) - name must be a string argument" );
+ }
- /*
- switch (type) {
+ switch (self->type) {
case ID_SCE:
- return Scene_CreatePyObject( add_scene( name ) );
+ id = (ID *)add_scene( name );
+ break;
case ID_OB:
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"Add objects through the scenes objects iterator" );
case ID_ME:
- return Mesh_CreatePyObject( add_mesh__internal( name ) );
+ id = (ID *)add_mesh__internal( name );
+ break;
case ID_CU:
- return Curve_CreatePyObject(add_curve__internal( name ) );
+ id = (ID *)add_curve__internal( name );
+ break;
case ID_MB:
- return Metaball_CreatePyObject((MetaBall *)link);
-
+ id = (ID *)add_metaball__internal( name );
break;
case ID_MA:
-
+ id = (ID *)add_material__internal( name );
break;
case ID_TE:
-
+ id = (ID *)add_texture__internal( name );
break;
- case ID_IM:
-
+ case ID_IM:
+ {
+ Image *image = BKE_add_image_size(img_width, img_height, name, 0);
+ if( !image )
+ return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "couldn't create PyObject Image_Type" ) );
+
+ /* reset usage count, since BKE_add_image_size() incremented it */
+ /* image->id.us--; */
+ /* Strange, new images have a user count of one???, otherwise it messes up */
+ id = (ID *)image;
break;
+ }
case ID_LT:
-
+ id = (ID *)add_lattice__internal( name );
break;
case ID_LA:
-
+ id = (ID *)add_lamp__internal( name );
break;
-
case ID_CA:
-
+ id = (ID *)add_camera__internal( name );
break;
case ID_IP:
-
+ id = (ID *)add_ipo__internal( name, ipo_code );
break;
case ID_WO:
-
+ id = (ID *)add_world__internal( name );
break;
case ID_VF:
-
- break;
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "Cannot create new fonts, use the load() function to load from a file" );
case ID_TXT:
-
+ id = (ID *)add_text__internal( name );
break;
case ID_SO:
-
- break;
- case ID_GR:
-
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "Cannot create new sounds, use the load() function to load from a file" );
+ case ID_GR:
+ id = (ID *)add_group__internal( name );
break;
case ID_AR:
-
+ id = (ID *)add_armature__internal( name );
break;
case ID_AC:
-
+ id = (ID *)add_action__internal( name );
break;
}
- */
+
+ if (id) return ID_asPyObject(id);
Py_RETURN_NONE;
}
+PyObject *MainSeq_load(BPy_MainSeq *self, PyObject * args)
+{
+
+ char *filename;
+
+ if( !PyArg_ParseTuple( args, "s", &filename ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected a filename" );
+
+ switch (self->type) {
+ case ID_IM:
+ {
+ Image *img = BKE_add_image_file( filename );
+ if (!img)
+ return ( EXPP_ReturnPyObjError( PyExc_IOError,
+ "couldn't load image" ) );
+
+ return Image_CreatePyObject( img );
+ }
+ case ID_VF:
+ {
+ VFont *vf = load_vfont (filename);
+ if (!vf)
+ return EXPP_ReturnPyObjError( PyExc_IOError,
+ "couldn't load font" );
+
+ return Font_CreatePyObject(vf);
+ }
+ case ID_SO:
+ {
+ bSound *snd = sound_new_sound( filename );
+ if (!snd)
+ return EXPP_ReturnPyObjError( PyExc_IOError,
+ "couldn't load sound" );
+
+ return Sound_CreatePyObject(snd);
+ }
+ default:
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "Can only load image, sound and font types");
+ }
+}
+
+
PyObject *MainSeq_unlink(BPy_MainSeq *self, PyObject * args)
{
PyObject *pyobj;
@@ -533,7 +730,9 @@ static PyGetSetDef MainSeq_getseters[] = {
static struct PyMethodDef BPy_MainSeq_methods[] = {
{"new", (PyCFunction)MainSeq_new, METH_VARARGS,
- "Create a new object in this scene from the obdata given and return a new object"},
+ "(name) - Create a new object in this scene from the obdata given and return a new object"},
+ {"load", (PyCFunction)MainSeq_load, METH_VARARGS,
+ "(filename) - loads the given filename for image, font and sound types"},
{"unlink", (PyCFunction)MainSeq_unlink, METH_VARARGS,
"unlinks the object from the scene"},
{NULL, NULL, 0, NULL}