Revision: 20165
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20165
Author:   khughes
Date:     2009-05-12 00:27:06 +0200 (Tue, 12 May 2009)

Log Message:
-----------
Python API
----------
Patch by Jean-michel Soler (jms) to support ShrinkWrap and SimpleDeform 
modifiers.

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Modifier.c
    trunk/blender/source/blender/python/api2_2x/doc/Modifier.py

Modified: trunk/blender/source/blender/python/api2_2x/Modifier.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Modifier.c      2009-05-11 
22:17:58 UTC (rev 20164)
+++ trunk/blender/source/blender/python/api2_2x/Modifier.c      2009-05-11 
22:27:06 UTC (rev 20165)
@@ -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,
+                                               SHRINKWRAP, 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, SHRINKWRAP, SIMPLEDEFORM*/
        
        /*SUBSURF SPECIFIC*/
        EXPP_MOD_LEVELS,
@@ -144,8 +146,29 @@
        EXPP_MOD_RADIUS,
        EXPP_MOD_SIZE,
        EXPP_MOD_USE_OB_TRANSFORM,
-       EXPP_MOD_SIZE_FROM_RADIUS
-       
+       EXPP_MOD_SIZE_FROM_RADIUS,
+
+       /* SHRINKWRAP*/
+       EXPP_MOD_OBJECT_AUX,
+       EXPP_MOD_KEEPDIST,
+       EXPP_MOD_PROJECT_OVER_X_AXIS,
+       EXPP_MOD_PROJECT_OVER_Y_AXIS,
+       EXPP_MOD_PROJECT_OVER_Z_AXIS,
+       EXPP_MOD_PROJECT_OVER_NORMAL,
+       EXPP_MOD_SUBSURFLEVELS,
+       EXPP_MOD_ALLOW_POS_DIR,
+       EXPP_MOD_ALLOW_NEG_DIR,
+       EXPP_MOD_CULL_TARGET_FRONTFACE,
+       EXPP_MOD_CULL_TARGET_BACKFACE,
+       EXPP_MOD_KEEP_ABOVE_SURFACE,
+
+       /* 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_,*/
        /* , */
@@ -989,6 +1012,43 @@
        switch( type ) {
        case EXPP_MOD_OBJECT:
                return Object_CreatePyObject( md->target );
+       case EXPP_MOD_OBJECT_AUX:
+               return Object_CreatePyObject( md->auxTarget );
+       case EXPP_MOD_VERTGROUP:
+               return PyString_FromString( md->vgroup_name ) ;
+       case EXPP_MOD_TYPES:
+               return PyInt_FromLong( (long)md->shrinkType );
+       case EXPP_MOD_ALLOW_POS_DIR:
+               return PyBool_FromLong( ( long ) 
+                               ( md->shrinkOpts & 
MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR) ) ;    
+       case EXPP_MOD_ALLOW_NEG_DIR:
+               return PyBool_FromLong( ( long ) 
+                               ( md->shrinkOpts & 
MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR) ) ;    
+       case EXPP_MOD_CULL_TARGET_FRONTFACE:
+               return PyBool_FromLong( ( long ) 
+                               ( md->shrinkOpts & 
MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE) ) ;    
+       case EXPP_MOD_CULL_TARGET_BACKFACE:
+               return PyBool_FromLong( ( long ) 
+                               ( md->shrinkOpts & 
MOD_SHRINKWRAP_CULL_TARGET_BACKFACE) ) ;     
+       case EXPP_MOD_KEEP_ABOVE_SURFACE:
+               return PyBool_FromLong( ( long ) 
+                               ( md->shrinkOpts & 
MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE) ) ;               
+       case EXPP_MOD_KEEPDIST:
+               return PyFloat_FromDouble( (double)md->keepDist );      
+       case EXPP_MOD_PROJECT_OVER_X_AXIS:
+               return PyBool_FromLong( ( long ) 
+                               ( md->projAxis & 
MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS) ) ;        
+       case EXPP_MOD_PROJECT_OVER_Y_AXIS:
+               return PyBool_FromLong( ( long ) 
+                               ( md->projAxis & 
MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) ) ;        
+       case EXPP_MOD_PROJECT_OVER_Z_AXIS:
+               return PyBool_FromLong( ( long ) 
+                               ( md->projAxis & 
MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS) ) ;        
+       case EXPP_MOD_PROJECT_OVER_NORMAL:
+               return PyBool_FromLong( ( long ) 
+                               ( md->projAxis & 
MOD_SHRINKWRAP_PROJECT_OVER_NORMAL) ) ;
+       case EXPP_MOD_SUBSURFLEVELS:
+               return PyInt_FromLong( ( long )md->subsurfLevels );     
        default:
                return EXPP_ReturnPyObjError( PyExc_KeyError, "key not found" );
        }
@@ -1012,12 +1072,145 @@
                }
                return 0;
        }
+       case EXPP_MOD_OBJECT_AUX: { 
+               Object *ob_new=NULL;
+               if (value == Py_None) {
+                       md->auxTarget = NULL;
+               } else if (BPy_Object_Check( value )) {
+                       ob_new = ((( BPy_Object * )value)->object);
+                       md->auxTarget = ob_new;
+               } else {
+                       return EXPP_ReturnIntError( PyExc_TypeError,
+                               "Expected an Object or None value" );
+               }
+               return 0;
+       }
+       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_TYPES:
+               return EXPP_setIValueRange( value, &md->shrinkType, 0,
+                               MOD_SHRINKWRAP_NEAREST_VERTEX, 'h' );
+       case EXPP_MOD_KEEPDIST:         
+               return EXPP_setFloatClamped( value, &md->keepDist, -1000.0, 
+1000.0 );
+       case EXPP_MOD_PROJECT_OVER_X_AXIS:
+               return EXPP_setBitfield( value, &md->projAxis,
+                                       MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS, 'h' 
);
+       case EXPP_MOD_PROJECT_OVER_Y_AXIS:
+               return EXPP_setBitfield( value, &md->projAxis,
+                                       MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS, 'h' 
);
+       case EXPP_MOD_PROJECT_OVER_Z_AXIS:
+               return EXPP_setBitfield( value, &md->projAxis,
+                                       MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS, 'h' 
);
+       case EXPP_MOD_PROJECT_OVER_NORMAL:
+               return EXPP_setBitfield( value, &md->projAxis,
+                                       MOD_SHRINKWRAP_PROJECT_OVER_NORMAL, 'h' 
);
+
+       case EXPP_MOD_ALLOW_POS_DIR:
+                               return EXPP_setBitfield( value, &md->shrinkOpts,
+                                       MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR, 
'h' );
+       case EXPP_MOD_ALLOW_NEG_DIR:
+                               return EXPP_setBitfield( value, &md->shrinkOpts,
+                                       MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR, 
'h' );                    
+       case EXPP_MOD_CULL_TARGET_FRONTFACE:
+                               return EXPP_setBitfield( value, &md->shrinkOpts,
+                                       MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, 
'h' );                    
+       case EXPP_MOD_CULL_TARGET_BACKFACE:
+                               return EXPP_setBitfield( value, &md->shrinkOpts,
+                                       MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, 
'h' );                     
+       case EXPP_MOD_KEEP_ABOVE_SURFACE:
+                               return EXPP_setBitfield( value, &md->shrinkOpts,
+                                       MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE, 'h' 
);                                       
+       case EXPP_MOD_SUBSURFLEVELS:
+               return EXPP_setIValueClamped( value, &md->subsurfLevels, 1, 6, 
'h' );
+       
        default:
                return EXPP_ReturnIntError( PyExc_KeyError, "key not found" );
        }
 }
 
+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_LOWER_LIMIT:
+               return EXPP_setFloatClamped( value, &md->limit[0], 0.0, 
md->limit[1] );
+       case EXPP_MOD_UPPER_LIMIT:
+               return EXPP_setFloatClamped( value, &md->limit[1], 
md->limit[0], 1.0 );
+       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 +1293,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 +1366,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 +1800,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 +1965,39 @@
                        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", 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to