added remove to the modifier seq (when pymodifier->md is NULL then its been removed)
authorCampbell Barton <ideasman42@gmail.com>
Sun, 23 Apr 2006 08:01:02 +0000 (08:01 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 23 Apr 2006 08:01:02 +0000 (08:01 +0000)
added name to the docs

source/blender/python/api2_2x/Modifier.c
source/blender/python/api2_2x/Modifier.h
source/blender/python/api2_2x/doc/Modifier.py

index ad03dbcaed8311750037f621387209e1622b7cc7..cf0e868d9208a533f1eb1bd50bb3d9116c609260 100644 (file)
@@ -249,6 +249,10 @@ PyTypeObject Modifier_Type = {
 
 static PyObject *Modifier_getName( BPy_Modifier * self )
 {
+       if (self->md==NULL)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                               "This modifier has been removed!" ));
+       
        return PyString_FromString( self->md->name );
 }
 
@@ -262,6 +266,10 @@ static int Modifier_setName( BPy_Modifier * self, PyObject * attr )
        if( !name )
                return EXPP_ReturnIntError( PyExc_TypeError, "expected string arg" );
 
+       if (self->md==NULL)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                               "This modifier has been removed!" ));
+       
        BLI_strncpy( self->md->name, name, sizeof( self->md->name ) );
 
        return 0;
@@ -273,6 +281,10 @@ static int Modifier_setName( BPy_Modifier * self, PyObject * attr )
 
 static PyObject *Modifier_moveUp( BPy_Modifier * self )
 {
+       if (self->md==NULL)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                               "This modifier has been removed!" ));
+       
        if( mod_moveUp( self->obj, self->md ) )
                return EXPP_ReturnPyObjError( PyExc_RuntimeError,
                                "cannot move above a modifier requiring original data" );
@@ -286,6 +298,10 @@ static PyObject *Modifier_moveUp( BPy_Modifier * self )
 
 static PyObject *Modifier_moveDown( BPy_Modifier * self )
 {
+       if (self->md==NULL)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                               "This modifier has been removed!" ));
+       
        if( mod_moveDown( self->obj, self->md ) )
                return EXPP_ReturnPyObjError( PyExc_RuntimeError,
                                "cannot move beyond a non-deforming modifier" );
@@ -886,8 +902,12 @@ static int Modifier_setData( BPy_Modifier * self, PyObject * key,
 /*****************************************************************************/
 static PyObject *Modifier_repr( BPy_Modifier * self )
 {
-       ModifierTypeInfo *mti = modifierType_getInfo(self->md->type);
-       return PyString_FromFormat( "[Modifier \"%s\"]", mti->name );
+       ModifierTypeInfo *mti;
+       if (self->md==NULL)
+               return PyString_FromString( "[Modifier - Removed");
+       
+       mti= modifierType_getInfo(self->md->type);
+       return PyString_FromFormat( "[Modifier \"%s\", Type \"%s\"]", self->md->name, mti->name );
 }
 
 /* Three Python Modifier_Type helper functions needed by the Object module: */
@@ -1016,6 +1036,39 @@ static PyObject *ModSeq_append( BPy_ModSeq *self, PyObject *args )
        return Modifier_CreatePyObject( self->obj, self->obj->modifiers.last );
 }
 
+/* remove an existing modifier a new modifier at the end of the list */
+static PyObject *ModSeq_remove( BPy_ModSeq *self, PyObject *args )
+{
+       PyObject *pyobj;
+       Object *obj;
+       ModifierData *md_v, *md;
+       if( !PyArg_ParseTuple( args, "O!", &Modifier_Type, &pyobj ) ) {
+               return ( EXPP_ReturnPyObjError( PyExc_TypeError, "expected a modifier as an argument" ) );
+       }
+       obj = ( ( BPy_Modifier * ) pyobj )->obj;
+       md_v = ( ( BPy_Modifier * ) pyobj )->md;
+       
+       
+       if (md_v==NULL)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                     "This modifier has alredy been removed!" ));
+       
+       for (md=obj->modifiers.first; md; md=md->next)
+               if (md==md_v)
+                       break;
+       
+       if (!md)
+               return (EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                     "This modifier is not in its object list, this should never happen!" ));
+       
+       BLI_remlink(&(obj->modifiers), md_v);
+       modifier_free(md_v);
+       ( ( BPy_Modifier * ) pyobj )->md= NULL;
+       return EXPP_incr_ret( Py_None );
+}
+
+
+
 /*
  * simple method to implement pseudo module constants
  */
@@ -1048,6 +1101,7 @@ static PyGetSetDef BPy_ModSeq_getseters[] = {
         (getter)ModSeq_typeConst, (setter)NULL,
         NULL, (void *)eModifierType_Mirror},
        {"DECIMATE",
+        (getter)ModSeq_typeConst, (setter)NULL,
         (getter)ModSeq_typeConst, (setter)NULL,
         NULL, (void *)eModifierType_Decimate},
        {"WAVE",
@@ -1065,7 +1119,9 @@ static PyGetSetDef BPy_ModSeq_getseters[] = {
 static PyMethodDef BPy_ModSeq_methods[] = {
        /* name, method, flags, doc */
        {"append", ( PyCFunction ) ModSeq_append, METH_VARARGS,
-        "add a new modifier"},
+        "(type) - add a new modifier, where type is the type of modifier"},
+       {"remove", ( PyCFunction ) ModSeq_remove, METH_VARARGS,
+        "(modifier) - remove an existing modifier, where modifier is a modifier from this object."},
        {NULL, NULL, 0, NULL}
 };
 
index 15b2c93f1dffc7ebfbe1ee79b68ceb5fc4aa5310..6b48ebd14f043ae1eb8813b43e1cbb6d034b5f18 100644 (file)
@@ -44,7 +44,9 @@
 typedef struct {
        PyObject_HEAD           /* required macro */
        Object *obj;
-       ModifierData *md;
+       /* if md this is null, the modifier has been removed and we need to raise
+       an error when its data is accessed */
+       ModifierData *md; 
 } BPy_Modifier;
 
 extern PyTypeObject Modifier_Type;
index 54f50a7b0346bc0a04144160be8158c461fbeba2..7e2227ece57a5d5fe36dd01c6cbaf60e7a72bd18 100644 (file)
@@ -56,7 +56,8 @@ class Modifier:
   The Modifier object
   ===================
   This object provides access to a modifier for a particular object.
-  """
+  @ivar name: The name of this modifier. 31 chars max.
+  """  
 
   def __getitem__(key):
     """