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>2006-03-19 07:45:58 +0300
committerCampbell Barton <ideasman42@gmail.com>2006-03-19 07:45:58 +0300
commit59ed566e86eaa7514101777910ac99fb2fdd3c2d (patch)
tree54ea8d5a7716b23f7d922daba2aab444debabde2 /source/blender/python/api2_2x/Group.c
parentabab9fc3de507930dceb2b08c4e83d2adb6338bc (diff)
Added support for group objects
grp.objects To have an iterator assigned as well as a list. Since gp.objects is an ietartor this is expected. grp.objects= someGroup.objects works now. Some other small fixes made. Made a wrapper for add_to_group() That handles the OB_FROMGROUP flag. Should be moved to group.c's add_to_group() void add_to_group_wraper(Group *group, Object *ob) { Base *base; add_to_group(group, ob); if (!(ob->flag & OB_FROMGROUP)) { /* do this to avoid a listbase lookup */ ob->flag |= OB_FROMGROUP; base= object_in_scene(ob, G.scene); if (base) base->flag |= OB_FROMGROUP; } }
Diffstat (limited to 'source/blender/python/api2_2x/Group.c')
-rwxr-xr-xsource/blender/python/api2_2x/Group.c86
1 files changed, 56 insertions, 30 deletions
diff --git a/source/blender/python/api2_2x/Group.c b/source/blender/python/api2_2x/Group.c
index 513efa71d41..1b7a133823a 100755
--- a/source/blender/python/api2_2x/Group.c
+++ b/source/blender/python/api2_2x/Group.c
@@ -14,6 +14,7 @@
#include "blendef.h"
#include "Object.h"
+#include "gen_utils.h"
/*****************************************************************************/
@@ -76,38 +77,68 @@ static PyObject *M_Group_getObjects( BPy_Group * self )
return (PyObject *)seq;
}
+
+void add_to_group_wraper(Group *group, Object *ob) {
+ Base *base;
+ add_to_group(group, ob);
+
+ if (!(ob->flag & OB_FROMGROUP)) { /* do this to avoid a listbase lookup */
+ ob->flag |= OB_FROMGROUP;
+
+ base= object_in_scene(ob, G.scene);
+ if (base)
+ base->flag |= OB_FROMGROUP;
+ }
+}
+
/* only for internal use Blender.Group.Get("MyGroup").objects= []*/
static int M_Group_setObjects( BPy_Group * self, PyObject * args )
{
- int i;
+ int i, list_size;
Group *group;
Object *blen_ob;
- Base *base;
-
group= self->group;
if( PyList_Check( args ) ) {
if( EXPP_check_sequence_consistency( args, &Object_Type ) != 1)
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a list of objects" );
+ return ( EXPP_ReturnIntError( PyExc_TypeError,
+ "expected a list of objects" ) );
/* remove all from the list and add the new items */
free_group(group); /* unlink all objects from this group, keep the group */
-
- for( i = 0; i < PyList_Size( args ); i++ ) {
+ list_size= PyList_Size( args );
+ for( i = 0; i < list_size; i++ ) {
blen_ob= ((BPy_Object *)PyList_GET_ITEM( args, i ))->object;
- add_to_group(group, blen_ob);
-
- if (!(blen_ob->flag & OB_FROMGROUP)) { /* do this to avoid a listbase lookup */
- blen_ob->flag |= OB_FROMGROUP;
-
- base= object_in_scene(blen_ob, G.scene);
- if (base)
- base->flag |= OB_FROMGROUP;
- }
+ add_to_group_wraper(group, blen_ob);
}
+ /*
} else if( args->ob_type == &MGroupObSeq_Type ) {
+ */
/* todo, handle sequences here */
+
+ } else if (PyIter_Check(args)) {
+ PyObject *iterator = PyObject_GetIter(args);
+ PyObject *item;
+ if (iterator == NULL) {
+ Py_DECREF(iterator);
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected a list of objects, This iterator cannot be used." );
+ }
+ free_group(group); /* unlink all objects from this group, keep the group */
+ while ((item = PyIter_Next(iterator))) {
+ if ( PyObject_TypeCheck(item, &Object_Type) ) {
+ blen_ob= ((BPy_Object *)item)->object;
+ add_to_group_wraper(group, blen_ob);
+ }
+ Py_DECREF(item);
+ }
+
+ Py_DECREF(iterator);
+
+ if (PyErr_Occurred()) {
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "An unknown error occured while adding iterator objects to the group.\nThe group has been modified." );
+ }
} else
return EXPP_ReturnIntError( PyExc_TypeError,
@@ -153,8 +184,8 @@ static PyObject *Group_getName( BPy_Group * self, PyObject * args )
{
PyObject *attr;
if( !(self->group) )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "Blender Group was deleted!" );
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Blender Group was deleted!" ) );
attr = PyString_FromString( self->group->id.name + 2 );
@@ -361,7 +392,7 @@ PyObject *M_Group_Get( PyObject * self, PyObject * args )
if( grouplist == NULL )
return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create PyList" ) );
+ "couldn't create group list" ) );
while( group_iter ) {
pyobj = Group_CreatePyObject( group_iter );
@@ -369,7 +400,7 @@ PyObject *M_Group_Get( PyObject * self, PyObject * args )
if( !pyobj )
return ( EXPP_ReturnPyObjError
( PyExc_MemoryError,
- "couldn't create PyString" ) );
+ "couldn't create Object" ) );
PyList_SET_ITEM( grouplist, index, pyobj );
@@ -399,8 +430,8 @@ PyObject *M_Group_Unlink( PyObject * self, PyObject * args )
group= pygrp->group;
if( !group )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "Blender Group was deleted!" );
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Blender Group was deleted!" ) );
pygrp->group= NULL;
free_group(group);
@@ -639,13 +670,8 @@ static PyObject *MGroupObSeq_append( BPy_MGroupObSeq * self, PyObject *args )
base= object_in_scene(blen_ob, G.scene);
- add_to_group(self->bpygroup->group, blen_ob); /* this checks so as not to add the object into the group twice*/
+ add_to_group_wraper(self->bpygroup->group, blen_ob); /* this checks so as not to add the object into the group twice*/
- if (!(blen_ob->flag & OB_FROMGROUP)) { /* do this to avoid a listbase lookup */
- blen_ob->flag |= OB_FROMGROUP;
- if (base)
- base->flag |= OB_FROMGROUP;
- }
return EXPP_incr_ret( Py_None );
}
@@ -658,8 +684,8 @@ static PyObject *MGroupObSeq_remove( BPy_MGroupObSeq * self, PyObject *args )
Base *base= NULL;
if( !(self->bpygroup->group) )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "Blender Group was deleted!" );
+ return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Blender Group was deleted!" ));
if( !PyArg_ParseTuple( args, "O!", &Object_Type, &pyobj ) )
return ( EXPP_ReturnPyObjError( PyExc_TypeError,