== Clamp To Constraint ==

* PyApi access to this constraint
* Also, a minor tweak to one of the comments about one of this constraint's variables.
This commit is contained in:
2007-04-07 04:21:12 +00:00
parent 655f9a61de
commit b1c8a1eefb
3 changed files with 59 additions and 3 deletions

View File

@@ -219,7 +219,7 @@ typedef struct bRigidBodyJointConstraint{
/* ClampTo Constraint */
typedef struct bClampToConstraint {
Object *tar; /* 'target' must be a curve */
int flag; /* which plane to find object on */
int flag; /* which axis/plane to compare owner's location on */
int pad;
} bClampToConstraint;

View File

@@ -103,6 +103,7 @@ enum constraint_constants {
EXPP_CONSTR_COPY,
EXPP_CONSTR_LIMIT,
EXPP_CONSTR_CLAMP,
EXPP_CONSTR_LIMXMIN = LIMIT_XMIN,
EXPP_CONSTR_LIMXMAX = LIMIT_XMAX,
@@ -723,6 +724,40 @@ static int followpath_setter( BPy_Constraint *self, int type, PyObject *value )
}
}
static PyObject *clampto_getter( BPy_Constraint * self, int type )
{
bClampToConstraint *con = (bClampToConstraint *)(self->con->data);
switch( type ) {
case EXPP_CONSTR_TARGET:
return Object_CreatePyObject( con->tar );
case EXPP_CONSTR_CLAMP:
return PyInt_FromLong( (long)con->flag );
default:
return EXPP_ReturnPyObjError( PyExc_KeyError, "key not found" );
}
}
static int clampto_setter( BPy_Constraint *self, int type, PyObject *value )
{
bClampToConstraint *con = (bClampToConstraint *)(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_CLAMP:
return EXPP_setIValueRange( value, &con->flag,
CLAMPTO_AUTO, CLAMPTO_Z, 'i' );
default:
return EXPP_ReturnIntError( PyExc_KeyError, "key not found" );
}
}
static PyObject *locktrack_getter( BPy_Constraint * self, int type )
{
bLockTrackConstraint *con = (bLockTrackConstraint *)(self->con->data);
@@ -1340,6 +1375,8 @@ static PyObject *Constraint_getData( BPy_Constraint * self, PyObject * key )
return sizelimit_getter( self, setting );
case CONSTRAINT_TYPE_RIGIDBODYJOINT:
return rigidbody_getter( self, setting );
case CONSTRAINT_TYPE_CLAMPTO:
return clampto_getter( self, setting );
case CONSTRAINT_TYPE_CHILDOF: /* Unimplemented */
case CONSTRAINT_TYPE_PYTHON:
default:
@@ -1404,6 +1441,9 @@ static int Constraint_setData( BPy_Constraint * self, PyObject * key,
case CONSTRAINT_TYPE_RIGIDBODYJOINT:
result = rigidbody_setter( self, key_int, arg);
break;
case CONSTRAINT_TYPE_CLAMPTO:
result = clampto_setter( self, key_int, arg);
break;
case CONSTRAINT_TYPE_NULL:
return EXPP_ReturnIntError( PyExc_KeyError, "key not found" );
case CONSTRAINT_TYPE_CHILDOF: /* Unimplemented */
@@ -1878,6 +1918,8 @@ static PyObject *M_Constraint_TypeDict( void )
PyInt_FromLong( CONSTRAINT_TYPE_SIZELIMIT ) );
PyConstant_Insert( d, "RIGIDBODYJOINT",
PyInt_FromLong( CONSTRAINT_TYPE_RIGIDBODYJOINT ) );
PyConstant_Insert( d, "CLAMPTO",
PyInt_FromLong( CONSTRAINT_TYPE_CLAMPTO ) );
}
return S;
}
@@ -1963,6 +2005,15 @@ static PyObject *M_Constraint_SettingsDict( void )
PyInt_FromLong( LOCLIKE_Y_INVERT ) );
PyConstant_Insert( d, "COPYZINVERT",
PyInt_FromLong( LOCLIKE_Z_INVERT ) );
PyConstant_Insert( d, "CLAMPAUTO",
PyInt_FromLong( CLAMPTO_AUTO ) );
PyConstant_Insert( d, "CLAMPX",
PyInt_FromLong( CLAMPTO_X ) );
PyConstant_Insert( d, "CLAMPY",
PyInt_FromLong( CLAMPTO_Y ) );
PyConstant_Insert( d, "CLAMPZ",
PyInt_FromLong( CLAMPTO_Z ) );
PyConstant_Insert( d, "TARGET",
PyInt_FromLong( EXPP_CONSTR_TARGET ) );
@@ -2026,6 +2077,8 @@ static PyObject *M_Constraint_SettingsDict( void )
PyInt_FromLong( EXPP_CONSTR_COPY ) );
PyConstant_Insert( d, "LIMIT",
PyInt_FromLong( EXPP_CONSTR_LIMIT ) );
PyConstant_Insert( d, "CLAMP",
PyInt_FromLong( EXPP_CONSTR_CLAMP ) );
PyConstant_Insert( d, "LIMIT_XMIN",
PyInt_FromLong( EXPP_CONSTR_LIMXMIN ) );

View File

@@ -31,7 +31,8 @@ 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, NULL
LOCKTRACK, STRETCHTO, FLOOR, LIMITLOC, LIMITROT, LIMITSIZE, CLAMPTO,
NULL
@type Settings: readonly dictionary
@var Settings: Constant dict used for changing constraint settings.
@@ -40,7 +41,7 @@ Or to print all the constraints attached to each bone in a pose::
Limit Rotation (LIMITROT), Limit Scale (LIMITSIZE))
- BONE (string): name of Bone sub-target (for armature targets) (Note: not
used by Stretch To (STRETCHTO), Limit Location (LIMITLOC), Limit Rotation
(LIMITROT), Limit Scale (LIMITSIZE))
(LIMITROT), Limit Scale (LIMITSIZE), Follow Path (FOLLOWPATH), Clamp To (CLAMPTO))
- Used by IK Solver (IKSOLVER) constraint:
- TOLERANCE (float): clamped to [0.0001:1.0]
- ITERATIONS (int): clamped to [1,10000]
@@ -77,6 +78,8 @@ Or to print all the constraints attached to each bone in a pose::
- TRACK (int): values are TRACKX, TRACKY, TRACKZ, TRACKNEGX,
TRACKNEGY, TRACKNEGZ
- LOCK (int): values are LOCKX, LOCKY, LOCKZ
- Used by Clamp To (CLAMPTO) constraint:
- CLAMP (int): values are CLAMPAUTO, CLAMPX, CLAMPY, CLAMPZ
- Used by Floor (FLOOR) constraint:
- MINMAX (int): values are MINX, MINY, MINZ, MAXX, MAXY, MAXZ
- OFFSET (float): clamped to [-100.0,100.0]