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-09-24 12:30:38 +0400
committerCampbell Barton <ideasman42@gmail.com>2006-09-24 12:30:38 +0400
commite8495d1fdd7623cbd42cac1b30406dc6dbc0ee06 (patch)
treedbd207a21edfb748c872d3672517f2f97e6f383c /source/blender/python/api2_2x/Metaball.c
parente136fe0acb5d9e5d39fddec7dba4f49f807ffc7c (diff)
Extra generic errors for Scene, Groups and Metaballs to raise errors when trying to do anything with a python objects thats had its data removed in Blender.
Added to existing scn.objects scn.objects.active (get/set the active object for the scene) scn.objects.selected - an iterator that only uses selected objects scn.objects.context - an iterator on objects in the user context (visible in the current 3d views layer and selected) These are the same type as scn.objects but .add() .remove() .new() .active etc raise errors. so scn.objects.selected.add() will raise an error. Made nested loops possible with scn.objects, metaball.elements and ob.modifiers, by initializing the iter value as NULL and creating copys of the pyobject when _getIter() is called if ->iter is not NULL. This is how pythons xrange() works.
Diffstat (limited to 'source/blender/python/api2_2x/Metaball.c')
-rw-r--r--source/blender/python/api2_2x/Metaball.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/source/blender/python/api2_2x/Metaball.c b/source/blender/python/api2_2x/Metaball.c
index ea8a3ecac31..0b107766da3 100644
--- a/source/blender/python/api2_2x/Metaball.c
+++ b/source/blender/python/api2_2x/Metaball.c
@@ -726,14 +726,21 @@ static PyObject *Metaball_copy( BPy_Metaball * self )
return ( PyObject * ) pymball;
}
+
+static PyObject *MetaElemSeq_CreatePyObject(PyObject *self, MetaElem *iter)
+{
+ BPy_MetaElemSeq *seq = PyObject_NEW( BPy_MetaElemSeq, &MetaElemSeq_Type);
+ seq->bpymetaball = self; Py_INCREF(self);
+ seq->iter= iter;
+ return (PyObject *)seq;
+}
+
/*
* Element, get an instance of the iterator.
*/
static PyObject *Metaball_getElements( BPy_Metaball * self )
{
- BPy_MetaElemSeq *seq = PyObject_NEW( BPy_MetaElemSeq, &MetaElemSeq_Type);
- seq->bpymetaball = self; Py_INCREF(self);
- return (PyObject *)seq;
+ return MetaElemSeq_CreatePyObject(self, NULL);
}
/*
@@ -1016,8 +1023,11 @@ static PySequenceMethods MetaElemSeq_as_sequence = {
static PyObject *MetaElemSeq_getIter( BPy_MetaElemSeq * self )
{
- self->iter = self->bpymetaball->metaball->elems.first;
- return EXPP_incr_ret ( (PyObject *) self );
+ if (!self->iter) { /* not alredy looping on this data, */
+ self->iter = self->bpymetaball->metaball->elems.first;
+ return EXPP_incr_ret ( (PyObject *) self );
+ } else
+ return MetaElemSeq_CreatePyObject(self->bpymetaball, self->bpymetaball->metaball->elems.first);
}
/*
@@ -1027,9 +1037,11 @@ static PyObject *MetaElemSeq_getIter( BPy_MetaElemSeq * self )
static PyObject *MetaElemSeq_nextIter( BPy_MetaElemSeq * self )
{
PyObject *object;
- if( !(self->iter) || !(self->bpymetaball->metaball) )
+ if( !(self->iter) || !(self->bpymetaball->metaball) ) {
+ self->iter= NULL;
return EXPP_ReturnPyObjError( PyExc_StopIteration,
"iterator at end" );
+ }
object= MetaElem_CreatePyObject( self->iter );
self->iter= self->iter->next;