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:
authorJoshua Leung <aligorith@gmail.com>2008-03-16 13:26:13 +0300
committerJoshua Leung <aligorith@gmail.com>2008-03-16 13:26:13 +0300
commit87c54fb78428c8b629dab1ff8013db67ee61c8c6 (patch)
tree07182b82aa7837099571017a51cc96e300482926 /source/blender/python/api2_2x
parentbf4e4234ae522ef3809ec586a99c4512ec4110c3 (diff)
Constraints PyAPI:
Added support for Limit Distance constraint
Diffstat (limited to 'source/blender/python/api2_2x')
-rw-r--r--source/blender/python/api2_2x/Constraint.c68
-rw-r--r--source/blender/python/api2_2x/doc/Constraint.py8
2 files changed, 73 insertions, 3 deletions
diff --git a/source/blender/python/api2_2x/Constraint.c b/source/blender/python/api2_2x/Constraint.c
index 9b76765902a..844b9cc99ad 100644
--- a/source/blender/python/api2_2x/Constraint.c
+++ b/source/blender/python/api2_2x/Constraint.c
@@ -114,6 +114,8 @@ enum constraint_constants {
EXPP_CONSTR_LIMIT,
EXPP_CONSTR_CLAMP,
+ EXPP_CONSTR_MODE,
+
EXPP_CONSTR_LIMXMIN = LIMIT_XMIN,
EXPP_CONSTR_LIMXMAX = LIMIT_XMAX,
EXPP_CONSTR_LIMYMIN = LIMIT_YMIN,
@@ -904,6 +906,56 @@ static int stretchto_setter( BPy_Constraint *self, int type, PyObject *value )
}
}
+static PyObject *distlimit_getter( BPy_Constraint * self, int type )
+{
+ bDistLimitConstraint *con = (bDistLimitConstraint *)(self->con->data);
+
+ switch( type ) {
+ case EXPP_CONSTR_TARGET:
+ return Object_CreatePyObject( con->tar );
+ case EXPP_CONSTR_BONE:
+ return PyString_FromString( con->subtarget );
+ case EXPP_CONSTR_RESTLENGTH:
+ return PyFloat_FromDouble( (double)con->dist );
+ case EXPP_CONSTR_MODE:
+ return PyInt_FromLong( (long)con->mode );
+ default:
+ return EXPP_ReturnPyObjError( PyExc_KeyError, "key not found" );
+ }
+}
+
+static int distlimit_setter( BPy_Constraint *self, int type, PyObject *value )
+{
+ bDistLimitConstraint *con = (bDistLimitConstraint *)(self->con->data);
+
+ switch( type ) {
+ case EXPP_CONSTR_TARGET: {
+ Object *obj = (( BPy_Object * )value)->object;
+ if( !BPy_Object_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected BPy object argument" );
+ con->tar = obj;
+ return 0;
+ }
+ case EXPP_CONSTR_BONE: {
+ char *name = PyString_AsString( value );
+ if( !name )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected string arg" );
+
+ BLI_strncpy( con->subtarget, name, sizeof( con->subtarget ) );
+
+ return 0;
+ }
+ case EXPP_CONSTR_RESTLENGTH:
+ return EXPP_setFloatClamped( value, &con->dist, 0.0, 100.0 );
+ case EXPP_CONSTR_MODE:
+ return EXPP_setIValueRange( value, &con->mode, LIMITDIST_INSIDE, LIMITDIST_ONSURFACE, 'i' );
+ default:
+ return EXPP_ReturnIntError( PyExc_KeyError, "key not found" );
+ }
+}
+
static PyObject *followpath_getter( BPy_Constraint * self, int type )
{
bFollowPathConstraint *con = (bFollowPathConstraint *)(self->con->data);
@@ -1883,6 +1935,8 @@ static PyObject *Constraint_getData( BPy_Constraint * self, PyObject * key )
return loclimit_getter( self, setting );
case CONSTRAINT_TYPE_SIZELIMIT:
return sizelimit_getter( self, setting );
+ case CONSTRAINT_TYPE_DISTLIMIT:
+ return distlimit_getter( self, setting );
case CONSTRAINT_TYPE_RIGIDBODYJOINT:
return rigidbody_getter( self, setting );
case CONSTRAINT_TYPE_CLAMPTO:
@@ -1960,6 +2014,9 @@ static int Constraint_setData( BPy_Constraint * self, PyObject * key,
case CONSTRAINT_TYPE_SIZELIMIT:
result = sizelimit_setter( self, key_int, arg);
break;
+ case CONSTRAINT_TYPE_DISTLIMIT:
+ result = distlimit_setter( self, key_int, arg);
+ break;
case CONSTRAINT_TYPE_RIGIDBODYJOINT:
result = rigidbody_setter( self, key_int, arg);
break;
@@ -2447,6 +2504,8 @@ static PyObject *M_Constraint_TypeDict( void )
PyInt_FromLong( CONSTRAINT_TYPE_ROTLIMIT ) );
PyConstant_Insert( d, "LIMITSIZE",
PyInt_FromLong( CONSTRAINT_TYPE_SIZELIMIT ) );
+ PyConstant_Insert( d, "LIMITDIST",
+ PyInt_FromLong( CONSTRAINT_TYPE_DISTLIMIT ) );
PyConstant_Insert( d, "RIGIDBODYJOINT",
PyInt_FromLong( CONSTRAINT_TYPE_RIGIDBODYJOINT ) );
PyConstant_Insert( d, "CLAMPTO",
@@ -2640,6 +2699,15 @@ static PyObject *M_Constraint_SettingsDict( void )
PyConstant_Insert( d, "LOCK",
PyInt_FromLong( EXPP_CONSTR_LOCK ) );
+
+ PyConstant_Insert( d, "LIMITMODE",
+ PyInt_FromLong( EXPP_CONSTR_MODE ) );
+ PyConstant_Insert( d, "LIMIT_INSIDE",
+ PyInt_FromLong( LIMITDIST_INSIDE ) );
+ PyConstant_Insert( d, "LIMIT_OUTSIDE",
+ PyInt_FromLong( LIMITDIST_OUTSIDE ) );
+ PyConstant_Insert( d, "LIMIT_ONSURFACE",
+ PyInt_FromLong( LIMITDIST_ONSURFACE ) );
PyConstant_Insert( d, "COPY",
PyInt_FromLong( EXPP_CONSTR_COPY ) );
diff --git a/source/blender/python/api2_2x/doc/Constraint.py b/source/blender/python/api2_2x/doc/Constraint.py
index 83c171a8939..0f9e4b5e07a 100644
--- a/source/blender/python/api2_2x/doc/Constraint.py
+++ b/source/blender/python/api2_2x/doc/Constraint.py
@@ -31,13 +31,13 @@ Or to print all the constraints attached to each bone in a pose::
@var Type: Constant Constraint dict used by L{Constraints.append()} and
for comparison with L{Constraint.type}. Values are
TRACKTO, IKSOLVER, FOLLOWPATH, COPYROT, COPYLOC, COPYSIZE, ACTION,
- LOCKTRACK, STRETCHTO, FLOOR, LIMITLOC, LIMITROT, LIMITSIZE, CLAMPTO,
- PYTHON, CHILDOF, TRANSFORM, NULL
+ LOCKTRACK, STRETCHTO, FLOOR, LIMITLOC, LIMITROT, LIMITSIZE, LIMITDIST,
+ CLAMPTO, PYTHON, CHILDOF, TRANSFORM, NULL
@type Settings: readonly dictionary
@var Settings: Constant dict used for changing constraint settings.
- Used for all single-target constraints
- (TRACKTO, FOLLOWPATH, COPYROT, COPYLOC, COPYSIZE, ACTION, LOCKTRACK, STRETCHTO, FLOOR, CLAMPTO, CHILDOF, TRANSFORM)
+ (TRACKTO, FOLLOWPATH, COPYROT, COPYLOC, COPYSIZE, ACTION, LOCKTRACK, STRETCHTO, FLOOR, CLAMPTO, CHILDOF, TRANSFORM, LIMITDIST)
- TARGET (Object): target object
- BONE (string): name of Bone sub-target (for Armature targets), or name of Vertex Group sub-target
(for Geometry targets)
@@ -127,6 +127,8 @@ Or to print all the constraints attached to each bone in a pose::
- YMAX (float): clamped to [0.0001,1000.0]
- ZMIN (float): clamped to [0.0001,1000.0]
- ZMAX (float): clamped to [0.0001,1000.0]
+ - Used by Limit Distance (LIMITDIST) constraint:
+ - LIMITMODE (int): any one of LIMIT_INSIDE, LIMIT_OUTSIDE, LIMIT_ONSURFACE
- Used by Python Script (PYTHON) constraint:
- SCRIPT (Text): script to use
- PROPERTIES (IDProperties): ID-Properties of constraint