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:
Diffstat (limited to 'source/blender/python/api2_2x/Modifier.c')
-rw-r--r--source/blender/python/api2_2x/Modifier.c227
1 files changed, 119 insertions, 108 deletions
diff --git a/source/blender/python/api2_2x/Modifier.c b/source/blender/python/api2_2x/Modifier.c
index e6711a2b6d5..80d5c565087 100644
--- a/source/blender/python/api2_2x/Modifier.c
+++ b/source/blender/python/api2_2x/Modifier.c
@@ -34,6 +34,7 @@
#include "DNA_object_types.h"
#include "DNA_effect_types.h"
+#include "DNA_armature_types.h"
#include "DNA_vec_types.h"
#include "BKE_main.h"
@@ -111,9 +112,6 @@ static PyObject *Modifier_getName( BPy_Modifier * self );
static int Modifier_setName( BPy_Modifier * self, PyObject *arg );
static PyObject *Modifier_getType( BPy_Modifier * self );
-static PyObject *Modifier_moveUp( BPy_Modifier * self );
-static PyObject *Modifier_moveDown( BPy_Modifier * self );
-
static PyObject *Modifier_getData( BPy_Modifier * self, PyObject * key );
static int Modifier_setData( BPy_Modifier * self, PyObject * key,
PyObject * value );
@@ -123,10 +121,6 @@ static int Modifier_setData( BPy_Modifier * self, PyObject * key,
/*****************************************************************************/
static PyMethodDef BPy_Modifier_methods[] = {
/* name, method, flags, doc */
- {"up", ( PyCFunction ) Modifier_moveUp, METH_NOARGS,
- "Move modifier up in stack"},
- {"down", ( PyCFunction ) Modifier_moveDown, METH_NOARGS,
- "Move modifier down in stack"},
{NULL, NULL, 0, NULL}
};
@@ -292,41 +286,6 @@ static PyObject *Modifier_getType( BPy_Modifier * self )
return PyInt_FromLong( self->md->type );
}
-
-/*
- * move the modifier up in the stack
- */
-
-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" );
-
- Py_RETURN_NONE;
-}
-
-/*
- * move the modifier down in the stack
- */
-
-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" );
-
- Py_RETURN_NONE;
-}
-
static PyObject *subsurf_getter( BPy_Modifier * self, int type )
{
SubsurfModifierData *md = ( SubsurfModifierData *)(self->md);
@@ -860,7 +819,7 @@ ModifierData *Modifier_FromPyObject( PyObject * pyobj )
* Initialize the interator
*/
-static PyObject *ModSeq_getIter( BPy_ModSeq * self )
+static PyObject *Modifiers_getIter( BPy_Modifiers * self )
{
self->iter = (ModifierData *)self->obj->modifiers.first;
return EXPP_incr_ret ( (PyObject *) self );
@@ -870,7 +829,7 @@ static PyObject *ModSeq_getIter( BPy_ModSeq * self )
* Get the next Modifier
*/
-static PyObject *ModSeq_nextIter( BPy_ModSeq * self )
+static PyObject *Modifiers_nextIter( BPy_Modifiers * self )
{
ModifierData *this = self->iter;
if( this ) {
@@ -884,20 +843,20 @@ static PyObject *ModSeq_nextIter( BPy_ModSeq * self )
/* return the number of modifiers */
-static int ModSeq_length( BPy_ModSeq * self )
+static int Modifiers_length( BPy_Modifiers * self )
{
return BLI_countlist( &self->obj->modifiers );
}
/* return a modifier */
-static PyObject *ModSeq_item( BPy_ModSeq * self, int i )
+static PyObject *Modifiers_item( BPy_Modifiers * self, int i )
{
ModifierData *md = NULL;
/* if index is negative, start counting from the end of the list */
if( i < 0 )
- i += ModSeq_length( self );
+ i += Modifiers_length( self );
/* skip through the list until we get the modifier or end of list */
@@ -911,13 +870,13 @@ static PyObject *ModSeq_item( BPy_ModSeq * self, int i )
}
/*****************************************************************************/
-/* Python BPy_ModSeq sequence table: */
+/* Python BPy_Modifiers sequence table: */
/*****************************************************************************/
-static PySequenceMethods ModSeq_as_sequence = {
- ( inquiry ) ModSeq_length, /* sq_length */
+static PySequenceMethods Modifiers_as_sequence = {
+ ( inquiry ) Modifiers_length, /* sq_length */
( binaryfunc ) 0, /* sq_concat */
( intargfunc ) 0, /* sq_repeat */
- ( intargfunc ) ModSeq_item, /* sq_item */
+ ( intargfunc ) Modifiers_item, /* sq_item */
( intintargfunc ) 0, /* sq_slice */
( intobjargproc ) 0, /* sq_ass_item */
( intintobjargproc ) 0, /* sq_ass_slice */
@@ -926,16 +885,49 @@ static PySequenceMethods ModSeq_as_sequence = {
( intargfunc ) 0, /* sq_inplace_repeat */
};
+/*
+ * helper function to check for a valid modifier argument
+ */
+
+static ModifierData *locate_modifier( BPy_Modifiers *self, PyObject * args )
+{
+ BPy_Modifier *pyobj;
+ ModifierData *md;
+
+ /* check that argument is a modifier */
+ if( !PyArg_ParseTuple( args, "O!", &Modifier_Type, &pyobj ) )
+ return (ModifierData *)EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected an modifier as an argument" );
+
+ /* check whether modifier has been removed */
+ if( !pyobj->md )
+ return (ModifierData *)EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This modifier has been removed!" );
+
+ /* find the modifier in the object's list */
+ for( md = self->obj->modifiers.first; md; md = md->next )
+ if( md == pyobj->md )
+ return md;
+
+ /* return exception if we can't find the modifier */
+ return (ModifierData *)EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "This modifier is not in the object's stack" );
+}
+
/* create a new modifier at the end of the list */
-static PyObject *ModSeq_append( BPy_ModSeq *self, PyObject *args )
+static PyObject *Modifiers_append( BPy_Modifiers *self, PyObject *args )
{
int type;
if( !PyArg_ParseTuple( args, "i", &type ) )
- EXPP_ReturnPyObjError( PyExc_TypeError, "expected int argument" );
- if (type<=0 || type >= NUM_MODIFIER_TYPES) /* type 0 is eModifierType_None, should we be able to add one of these? */
- return EXPP_ReturnPyObjError( PyExc_TypeError, "int argument out of range, expected an int from Blender.Modifier.Type" );
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected int argument" );
+
+ /* type 0 is eModifierType_None, should we be able to add one of these? */
+ if( type <= 0 || type >= NUM_MODIFIER_TYPES )
+ return EXPP_ReturnPyObjError( PyExc_ValueError,
+ "int argument out of range, expected an int from Blender.Modifier.Type" );
BLI_addtail( &self->obj->modifiers, modifier_new( type ) );
return Modifier_CreatePyObject( self->obj, self->obj->modifiers.last );
@@ -943,84 +935,101 @@ static PyObject *ModSeq_append( BPy_ModSeq *self, PyObject *args )
/* remove an existing modifier */
-static PyObject *ModSeq_remove( BPy_ModSeq *self, PyObject *args )
+static PyObject *Modifiers_remove( BPy_Modifiers *self, PyObject *args )
{
- PyObject *pyobj;
- Object *obj;
- ModifierData *md_v, *md;
+ ModifierData *md = locate_modifier( self, args );
+ BPy_Modifier *py_obj;
- /* check that argument is a modifier */
- if( !PyArg_ParseTuple( args, "O!", &Modifier_Type, &pyobj ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected a modifier as an argument" );
+ /* if we can't locate the modifier, return (exception already set) */
+ if( !md )
+ return (PyObject *)NULL;
- /*
- * check that modseq and modifier refer to the same object (this is
- * more for user sanity than anything else)
- */
+ /* do the actual removal */
+ BLI_remlink( &self->obj->modifiers, md );
+ modifier_free( md );
- if( self->obj != ( ( BPy_Modifier * ) pyobj )->obj )
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "modifier does not belong to this object" );
+ /* erase the link to the modifier */
+ py_obj = ( BPy_Modifier * )PyTuple_GET_ITEM( args, 0 );
+ py_obj->md = NULL;
- md_v = ( ( BPy_Modifier * ) pyobj )->md;
+ Py_RETURN_NONE;
+}
- if (md_v==NULL)
+/* move the modifier up in the stack */
+
+static PyObject *Modifiers_moveUp( BPy_Modifiers * self, PyObject * args )
+{
+ ModifierData *md = locate_modifier( self, args );
+
+ /* if we can't locate the modifier, return (exception already set) */
+ if( !md )
+ return (PyObject *)NULL;
+
+ if( mod_moveUp( self->obj, md ) )
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "This modifier has already been removed!" );
-
- /* verify the modifier is still in the object's modifier */
- obj = self->obj;
- for (md=obj->modifiers.first; md; md=md->next)
- if (md==md_v)
- break;
- if (!md)
+ "cannot move above a modifier requiring original data" );
+
+ Py_RETURN_NONE;
+}
+
+/* move the modifier down in the stack */
+
+static PyObject *Modifiers_moveDown( BPy_Modifiers * self, PyObject *args )
+{
+ ModifierData *md = locate_modifier( self, args );
+
+ /* if we can't locate the modifier, return (exception already set) */
+ if( !md )
+ return (PyObject *)NULL;
+
+ if( mod_moveDown( self->obj, md ) )
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "This modifier is no longer in the object's stack" );
+ "cannot move beyond a non-deforming modifier" );
- /* do the actual removal */
- BLI_remlink(&(obj->modifiers), md_v);
- modifier_free(md_v);
- ( ( BPy_Modifier * ) pyobj )->md= NULL;
Py_RETURN_NONE;
}
+
/*****************************************************************************/
-/* Function: ModSeq_dealloc */
+/* Function: Modifiers_dealloc */
/* Description: This is a callback function for the BPy_Modifier type. It */
/* destroys data when the object is deleted. */
/*****************************************************************************/
-static void ModSeq_dealloc( BPy_Modifier * self )
+static void Modifiers_dealloc( BPy_Modifier * self )
{
PyObject_DEL( self );
}
/*****************************************************************************/
-/* Python BPy_ModSeq methods table: */
+/* Python BPy_Modifiers methods table: */
/*****************************************************************************/
-static PyMethodDef BPy_ModSeq_methods[] = {
+static PyMethodDef BPy_Modifiers_methods[] = {
/* name, method, flags, doc */
- {"append", ( PyCFunction ) ModSeq_append, METH_VARARGS,
+ {"append", ( PyCFunction ) Modifiers_append, METH_VARARGS,
"(type) - add a new modifier, where type is the type of modifier"},
- {"remove", ( PyCFunction ) ModSeq_remove, METH_VARARGS,
+ {"remove", ( PyCFunction ) Modifiers_remove, METH_VARARGS,
"(modifier) - remove an existing modifier, where modifier is a modifier from this object."},
+ {"moveUp", ( PyCFunction ) Modifiers_moveUp, METH_VARARGS,
+ "(modifier) - Move a modifier up in stack"},
+ {"moveDown", ( PyCFunction ) Modifiers_moveDown, METH_VARARGS,
+ "(modifier) - Move a modifier down in stack"},
{NULL, NULL, 0, NULL}
};
/*****************************************************************************/
-/* Python ModSeq_Type structure definition: */
+/* Python Modifiers_Type structure definition: */
/*****************************************************************************/
-PyTypeObject ModSeq_Type = {
+PyTypeObject Modifiers_Type = {
PyObject_HEAD_INIT( NULL ) /* required py macro */
0, /* ob_size */
/* For printing, in format "<module>.<name>" */
- "Blender Modifier Sequence",/* char *tp_name; */
- sizeof( BPy_ModSeq ), /* int tp_basicsize; */
+ "Blender.Modifiers", /* char *tp_name; */
+ sizeof( BPy_Modifiers ), /* int tp_basicsize; */
0, /* tp_itemsize; For allocation */
/* Methods to implement standard operations */
- ( destructor ) ModSeq_dealloc,/* destructor tp_dealloc; */
+ ( destructor ) Modifiers_dealloc,/* destructor tp_dealloc; */
NULL, /* printfunc tp_print; */
NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
@@ -1030,7 +1039,7 @@ PyTypeObject ModSeq_Type = {
/* Method suites for standard classes */
NULL, /* PyNumberMethods *tp_as_number; */
- &ModSeq_as_sequence, /* PySequenceMethods *tp_as_sequence; */
+ &Modifiers_as_sequence, /* PySequenceMethods *tp_as_sequence; */
NULL, /* PyMappingMethods *tp_as_mapping; */
/* More standard operations (here for binary compatibility) */
@@ -1064,11 +1073,11 @@ PyTypeObject ModSeq_Type = {
/*** Added in release 2.2 ***/
/* Iterators */
- ( getiterfunc )ModSeq_getIter, /* getiterfunc tp_iter; */
- ( iternextfunc )ModSeq_nextIter, /* iternextfunc tp_iternext; */
+ ( getiterfunc )Modifiers_getIter, /* getiterfunc tp_iter; */
+ ( iternextfunc )Modifiers_nextIter, /* iternextfunc tp_iternext; */
/*** Attribute descriptor and subclassing stuff ***/
- BPy_ModSeq_methods, /* struct PyMethodDef *tp_methods; */
+ BPy_Modifiers_methods, /* struct PyMethodDef *tp_methods; */
NULL, /* struct PyMemberDef *tp_members; */
NULL, /* struct PyGetSetDef *tp_getset; */
NULL, /* struct _typeobject *tp_base; */
@@ -1093,17 +1102,17 @@ PyTypeObject ModSeq_Type = {
};
/*****************************************************************************/
-/* Function: ModSeq_CreatePyObject */
-/* Description: This function will create a new BPy_ModSeq from an existing */
-/* ListBase structure. */
+/* Function: Modifiers_CreatePyObject */
+/* Description: This function will create a new BPy_Modifiers from an */
+/* existing ListBase structure. */
/*****************************************************************************/
PyObject *ModSeq_CreatePyObject( Object *obj )
{
- BPy_ModSeq *pymod;
- pymod = ( BPy_ModSeq * ) PyObject_NEW( BPy_ModSeq, &ModSeq_Type );
+ BPy_Modifiers *pymod;
+ pymod = ( BPy_Modifiers * ) PyObject_NEW( BPy_Modifiers, &Modifiers_Type );
if( !pymod )
return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create BPy_ModSeq object" );
+ "couldn't create BPy_Modifiers object" );
pymod->obj = obj;
return ( PyObject * ) pymod;
}
@@ -1248,10 +1257,12 @@ PyObject *Modifier_Init( void )
PyObject *TypeDict = M_Modifier_TypeDict( );
PyObject *SettingsDict = M_Modifier_SettingsDict( );
- if( PyType_Ready( &ModSeq_Type ) < 0 || PyType_Ready( &Modifier_Type ) < 0 )
+ if( PyType_Ready( &Modifiers_Type ) < 0 ||
+ PyType_Ready( &Modifier_Type ) < 0 )
return NULL;
- submodule = Py_InitModule3( "Blender.Modifier", NULL, "Modifer module for accessing and creating object modifier data" );
+ submodule = Py_InitModule3( "Blender.Modifier", NULL,
+ "Modifer module for accessing and creating object modifier data" );
if( TypeDict )
PyModule_AddObject( submodule, "Type", TypeDict );