Index: source/blender/python/api2_2x/Modifier.c =================================================================== --- source/blender/python/api2_2x/Modifier.c (revision 20085) +++ source/blender/python/api2_2x/Modifier.c (working copy) @@ -64,17 +64,19 @@ EXPP_MOD_ONCAGE, /*GENERIC*/ - EXPP_MOD_OBJECT, /*ARMATURE, LATTICE, CURVE, BOOLEAN, ARRAY*/ - EXPP_MOD_VERTGROUP, /*ARMATURE, LATTICE, CURVE, SMOOTH, CAST*/ + EXPP_MOD_OBJECT, /*ARMATURE, LATTICE, CURVE, BOOLEAN, ARRAY, + SHRINKWRAP, SIMPLEDEFORM*/ + EXPP_MOD_VERTGROUP, /*ARMATURE, LATTICE, CURVE, SMOOTH, CAST, + SIMPLEDEFORM*/ EXPP_MOD_LIMIT, /*ARRAY, MIRROR*/ EXPP_MOD_FLAG, /*MIRROR, WAVE*/ EXPP_MOD_COUNT, /*DECIMATOR, ARRAY*/ EXPP_MOD_LENGTH, /*BUILD, ARRAY*/ - EXPP_MOD_FACTOR, /*SMOOTH, CAST*/ + EXPP_MOD_FACTOR, /*SMOOTH, CAST, SIMPLEDEFORM*/ EXPP_MOD_ENABLE_X, /*SMOOTH, CAST*/ EXPP_MOD_ENABLE_Y, /*SMOOTH, CAST*/ EXPP_MOD_ENABLE_Z, /*SMOOTH, CAST*/ - EXPP_MOD_TYPES, /*SUBSURF, CAST*/ + EXPP_MOD_TYPES, /*SUBSURF, CAST, SIMPLEDEFORM*/ /*SUBSURF SPECIFIC*/ EXPP_MOD_LEVELS, @@ -144,8 +146,15 @@ EXPP_MOD_RADIUS, EXPP_MOD_SIZE, EXPP_MOD_USE_OB_TRANSFORM, - EXPP_MOD_SIZE_FROM_RADIUS - + EXPP_MOD_SIZE_FROM_RADIUS, + + /* SIMPLEDEFORM*/ + EXPP_MOD_RELATIVE, + EXPP_MOD_LOWER_LIMIT, + EXPP_MOD_UPPER_LIMIT, + EXPP_MOD_LOCK_AXIS_X, + EXPP_MOD_LOCK_AXIS_Y + /* yet to be implemented */ /* EXPP_MOD_HOOK_,*/ /* , */ @@ -1017,7 +1026,84 @@ } } +static PyObject *simpledeform_getter( BPy_Modifier * self, int type ) +{ + SimpleDeformModifierData *md = (SimpleDeformModifierData *)(self->md); + switch( type ) { + case EXPP_MOD_OBJECT: + return Object_CreatePyObject( md->origin ); + case EXPP_MOD_TYPES: + return PyInt_FromLong( (long)md->mode ); + case EXPP_MOD_FACTOR: + return PyFloat_FromDouble( (double)md->factor ); + case EXPP_MOD_UPPER_LIMIT: + return PyFloat_FromDouble( (double)md->limit[1] ); + case EXPP_MOD_LOWER_LIMIT: + return PyFloat_FromDouble( (double)md->limit[0] ); + case EXPP_MOD_VERTGROUP: + return PyString_FromString( md->vgroup_name ) ; + case EXPP_MOD_RELATIVE: + return PyBool_FromLong( ( long ) + ( md->originOpts ) ) ; + case EXPP_MOD_LOCK_AXIS_X: + return PyBool_FromLong( ( long ) + ( md->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_X) ) ; + case EXPP_MOD_LOCK_AXIS_Y: + return PyBool_FromLong( ( long ) + ( md->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_Y) ) ; + default: + return EXPP_ReturnPyObjError( PyExc_KeyError, "key not found" ); + } +} + +static int simpledeform_setter( BPy_Modifier *self, int type, PyObject *value ) +{ + SimpleDeformModifierData *md = (SimpleDeformModifierData *)(self->md); + + switch( type ) { + case EXPP_MOD_OBJECT: { /* Only object for now */ + Object *ob_new=NULL; + if (value == Py_None) { + md->origin = NULL; + } else if (BPy_Object_Check( value )) { + ob_new = ((( BPy_Object * )value)->object); + md->origin = ob_new; + } else { + return EXPP_ReturnIntError( PyExc_TypeError, + "Expected an Object or None value" ); + } + return 0; + } + case EXPP_MOD_TYPES: + return EXPP_setIValueRange( value, &md->mode, 1, MOD_SIMPLEDEFORM_MODE_STRETCH, 'h' ); + case EXPP_MOD_FACTOR: + return EXPP_setFloatClamped( value, &md->factor, -10.0, 10.0 ); + case EXPP_MOD_UPPER_LIMIT: + return EXPP_setFloatClamped( value, &md->limit[1], md->limit[0], 1.0 ); + case EXPP_MOD_LOWER_LIMIT: + return EXPP_setFloatClamped( value, &md->limit[0], 0.0, md->limit[1] ); + case EXPP_MOD_VERTGROUP:{ + char *defgrp_name = PyString_AsString( value ); + if( !defgrp_name ) + return EXPP_ReturnIntError( PyExc_TypeError, + "expected string arg" ); + BLI_strncpy( md->vgroup_name, defgrp_name, sizeof( md->vgroup_name ) ); + return 0; + } + case EXPP_MOD_RELATIVE: + return EXPP_setBitfield( value, &md->originOpts, 1, 'h' ); + case EXPP_MOD_LOCK_AXIS_X: + return EXPP_setBitfield( value, &md->axis, + MOD_SIMPLEDEFORM_LOCK_AXIS_X, 'h' ); + case EXPP_MOD_LOCK_AXIS_Y: + return EXPP_setBitfield( value, &md->axis, + MOD_SIMPLEDEFORM_LOCK_AXIS_Y, 'h' ); + default: + return EXPP_ReturnIntError( PyExc_KeyError, "key not found" ); + } +} + /* static PyObject *uvproject_getter( BPy_Modifier * self, int type ) { DisplaceModifierData *md = (DisplaceModifierData *)(self->md); @@ -1100,7 +1186,9 @@ case eModifierType_Shrinkwrap: return shrinkwrap_getter( self, setting ); /*case eModifierType_UVProject: - return uvproject_getter( self, setting );*/ + return uvproject_getter( self, setting );*/ + case eModifierType_SimpleDeform: + return simpledeform_getter( self, setting ); case eModifierType_Hook: case eModifierType_Softbody: case eModifierType_None: @@ -1171,6 +1259,8 @@ return displace_setter( self, key_int, arg ); case eModifierType_Shrinkwrap: return shrinkwrap_setter( self, key_int, arg ); + case eModifierType_SimpleDeform: + return simpledeform_setter( self, key_int, arg ); /*case eModifierType_UVProject: return uvproject_setter( self, key_int, arg );*/ case eModifierType_Hook: @@ -1603,8 +1693,8 @@ PyInt_FromLong( eModifierType_Bevel ) ); PyConstant_Insert( d, "SHRINKWRAP", PyInt_FromLong( eModifierType_Shrinkwrap ) ); - PyConstant_Insert( d, "SHRINKWRAP", - PyInt_FromLong( eModifierType_Shrinkwrap ) ); + PyConstant_Insert( d, "SIMPLEDEFORM", + PyInt_FromLong( eModifierType_SimpleDeform ) ); } return S; } @@ -1768,6 +1858,16 @@ PyConstant_Insert( d, "SIZE_FROM_RADIUS", PyInt_FromLong( EXPP_MOD_SIZE_FROM_RADIUS ) ); /*End Auto generated code*/ + PyConstant_Insert( d, "RELATIVE", + PyInt_FromLong( EXPP_MOD_RELATIVE ) ); + PyConstant_Insert( d, "UPPER_LIMIT", + PyInt_FromLong( EXPP_MOD_UPPER_LIMIT ) ); + PyConstant_Insert( d, "LOWER_LIMIT", + PyInt_FromLong( EXPP_MOD_LOWER_LIMIT ) ); + PyConstant_Insert( d, "LOCK_AXIS_X", + PyInt_FromLong( EXPP_MOD_LOCK_AXIS_X ) ); + PyConstant_Insert( d, "LOCK_AXIS_Y", + PyInt_FromLong( EXPP_MOD_LOCK_AXIS_Y ) ); } return S; }