[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20165] trunk/blender/source/blender/ python/api2_2x: Python API
Ken Hughes
khughes at pacific.edu
Tue May 12 00:27:07 CEST 2009
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. @@
More information about the Bf-blender-cvs
mailing list