===Python API===
Change code for rigid body access to use attributes instead of methods; also add documentation to epydoc.
This commit is contained in:
		@@ -285,14 +285,9 @@ static PyObject *Object_setPISurfaceDamp( BPy_Object * self, PyObject * args );
 | 
			
		||||
static PyObject *Object_getPIDeflection( BPy_Object * self );
 | 
			
		||||
static PyObject *Object_setPIDeflection( BPy_Object * self, PyObject * args );
 | 
			
		||||
 | 
			
		||||
static PyObject *Object_getRBMass( BPy_Object * self );
 | 
			
		||||
static PyObject *Object_setRBMass( BPy_Object * self, PyObject * args );
 | 
			
		||||
static PyObject *Object_getRBFlags( BPy_Object * self );
 | 
			
		||||
static PyObject *Object_setRBFlags( BPy_Object * self, PyObject * args );
 | 
			
		||||
static PyObject *Object_getRBShapeBoundType( BPy_Object * self );
 | 
			
		||||
static PyObject *Object_setRBShapeBoundType( BPy_Object * self, PyObject * args );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int Object_setRBMass( BPy_Object * self, PyObject * args );
 | 
			
		||||
static int Object_setRBFlags( BPy_Object * self, PyObject * args );
 | 
			
		||||
static int Object_setRBShapeBoundType( BPy_Object * self, PyObject * args );
 | 
			
		||||
 | 
			
		||||
static PyObject *Object_isSB( BPy_Object * self );
 | 
			
		||||
static PyObject *Object_getSBMass( BPy_Object * self );
 | 
			
		||||
@@ -440,6 +435,7 @@ automatic when the script finishes."},
 | 
			
		||||
     
 | 
			
		||||
/* Rigidbody , mass, inertia, shape type (boundtype), friction, restitution */
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	{"getRBMass", ( PyCFunction ) Object_getRBMass, METH_NOARGS,
 | 
			
		||||
	 "Returns RB Mass"},
 | 
			
		||||
	{"setRBMass", ( PyCFunction ) Object_setRBMass, METH_VARARGS,
 | 
			
		||||
@@ -454,6 +450,7 @@ automatic when the script finishes."},
 | 
			
		||||
	 "Returns RB Shape Bound Type"},
 | 
			
		||||
	{"setRBShapeBoundType", ( PyCFunction ) Object_setRBShapeBoundType, METH_VARARGS,
 | 
			
		||||
	 "Sets RB Shape Bound Type"},
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -692,7 +689,7 @@ PyTypeObject Object_Type = {
 | 
			
		||||
/* Function:			  M_Object_New				 */
 | 
			
		||||
/* Python equivalent:	  Blender.Object.New				 */
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
PyObject *M_Object_New( PyObject * self, PyObject * args )
 | 
			
		||||
PyObject *M_Object_New( PyObject * self_unused, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
	struct Object *object;
 | 
			
		||||
	int type;
 | 
			
		||||
@@ -802,7 +799,7 @@ PyObject *M_Object_New( PyObject * self, PyObject * args )
 | 
			
		||||
/* Function:	  M_Object_Get						*/
 | 
			
		||||
/* Python equivalent:	  Blender.Object.Get				*/
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
PyObject *M_Object_Get( PyObject * self, PyObject * args )
 | 
			
		||||
PyObject *M_Object_Get( PyObject * self_unused, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
	struct Object *object;
 | 
			
		||||
	PyObject *blen_object;
 | 
			
		||||
@@ -866,7 +863,7 @@ PyObject *M_Object_Get( PyObject * self, PyObject * args )
 | 
			
		||||
/* Function:	  M_Object_GetSelected				*/
 | 
			
		||||
/* Python equivalent:	  Blender.Object.GetSelected		*/
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
static PyObject *M_Object_GetSelected( PyObject * self )
 | 
			
		||||
static PyObject *M_Object_GetSelected( PyObject * self_unused )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *blen_object;
 | 
			
		||||
	PyObject *list;
 | 
			
		||||
@@ -915,7 +912,8 @@ static PyObject *M_Object_GetSelected( PyObject * self )
 | 
			
		||||
/* Function:			  M_Object_Duplicate				 */
 | 
			
		||||
/* Python equivalent:	  Blender.Object.Duplicate				 */
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
static PyObject *M_Object_Duplicate( PyObject * self, PyObject * args, PyObject *kwd )
 | 
			
		||||
static PyObject *M_Object_Duplicate( PyObject * self_unused,
 | 
			
		||||
		PyObject * args, PyObject *kwd )
 | 
			
		||||
{
 | 
			
		||||
	int dupflag= 0; /* this a flag, passed to adduplicate() and used instead of U.dupflag sp python can set what is duplicated */	
 | 
			
		||||
 | 
			
		||||
@@ -3644,6 +3642,12 @@ static PyObject *Object_getAttr( BPy_Object * obj, char *name )
 | 
			
		||||
		return ModSeq_CreatePyObject( object );
 | 
			
		||||
	if( StringEqual( name, "constraints" ) )
 | 
			
		||||
		return ObConstraintSeq_CreatePyObject( object );
 | 
			
		||||
	if( StringEqual( name, "rbMass" ) )
 | 
			
		||||
		return PyFloat_FromDouble( ( double ) object->mass );
 | 
			
		||||
	if( StringEqual( name, "rbFlags" ) )
 | 
			
		||||
		return PyInt_FromLong( ( long ) object->gameflag );
 | 
			
		||||
	if( StringEqual( name, "rbShapeBoundType" ) )
 | 
			
		||||
		return PyInt_FromLong( ( long ) object->boundtype );
 | 
			
		||||
 | 
			
		||||
	/* not an attribute, search the methods table */
 | 
			
		||||
	return Py_FindMethod( BPy_Object_methods, ( PyObject * ) obj, name );
 | 
			
		||||
@@ -3881,6 +3885,12 @@ static int Object_setAttr( BPy_Object * obj, char *name, PyObject * value )
 | 
			
		||||
		}
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	if( StringEqual( name, "rbMass" ) )
 | 
			
		||||
		return Object_setRBMass( obj, value );
 | 
			
		||||
	if( StringEqual( name, "rbFlags" ) )
 | 
			
		||||
		return Object_setRBFlags( obj, value );
 | 
			
		||||
	if( StringEqual( name, "rbShapeBoundType" ) )
 | 
			
		||||
		return Object_setRBShapeBoundType( obj, value );
 | 
			
		||||
 | 
			
		||||
	/* SECOND, handle all the attributes that passes the value as a tuple to another function */
 | 
			
		||||
 | 
			
		||||
@@ -4329,93 +4339,55 @@ PyObject *Object_setPIDeflection( BPy_Object * self, PyObject * args )
 | 
			
		||||
 | 
			
		||||
/* RIGIDBODY FUNCTIONS */
 | 
			
		||||
 | 
			
		||||
PyObject *Object_getRBMass( BPy_Object * self )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *attr;
 | 
			
		||||
    
 | 
			
		||||
    attr = PyFloat_FromDouble( ( double ) self->object->mass );
 | 
			
		||||
 | 
			
		||||
	if( attr )
 | 
			
		||||
		return attr;
 | 
			
		||||
 | 
			
		||||
	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
 | 
			
		||||
					"couldn't get Object->mass attribute" ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject *Object_setRBMass( BPy_Object * self, PyObject * args )
 | 
			
		||||
static int Object_setRBMass( BPy_Object * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
    float value;
 | 
			
		||||
	PyObject* flt = PyNumber_Float( args );
 | 
			
		||||
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "f", &value ) )
 | 
			
		||||
		return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
 | 
			
		||||
			"expected float argument" ) );
 | 
			
		||||
	if( !flt )
 | 
			
		||||
		return EXPP_ReturnIntError( PyExc_TypeError,
 | 
			
		||||
				"expected float argument" );
 | 
			
		||||
	value = PyFloat_AS_DOUBLE( flt );
 | 
			
		||||
 | 
			
		||||
	if(value < 0.0f)
 | 
			
		||||
		return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
 | 
			
		||||
			"acceptable values are non-negative, 0.0 or more" ) );
 | 
			
		||||
	if( value < 0.0f )
 | 
			
		||||
		return EXPP_ReturnIntError( PyExc_AttributeError,
 | 
			
		||||
			"acceptable values are non-negative, 0.0 or more" );
 | 
			
		||||
 | 
			
		||||
	self->object->mass = value;
 | 
			
		||||
 | 
			
		||||
	return EXPP_incr_ret( Py_None );
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* this is too low level, possible to add helper methods */
 | 
			
		||||
PyObject *Object_getRBFlags( BPy_Object * self )
 | 
			
		||||
 | 
			
		||||
static int Object_setRBFlags( BPy_Object * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *attr;
 | 
			
		||||
	PyObject* integer = PyNumber_Int( args );
 | 
			
		||||
 | 
			
		||||
    attr = PyInt_FromLong( self->object->gameflag );
 | 
			
		||||
 | 
			
		||||
	if( attr )
 | 
			
		||||
		return attr;
 | 
			
		||||
 | 
			
		||||
	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
 | 
			
		||||
					"couldn't get Object->gameflags attribute" ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject *Object_setRBFlags( BPy_Object * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
    int value;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "i", &value ) )
 | 
			
		||||
		return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
 | 
			
		||||
			"expected int argument" ) );
 | 
			
		||||
	if( !integer )
 | 
			
		||||
		return EXPP_ReturnIntError( PyExc_TypeError,
 | 
			
		||||
				"expected integer argument" );
 | 
			
		||||
 | 
			
		||||
	/* more input validation? */
 | 
			
		||||
 | 
			
		||||
	self->object->gameflag  = value;
 | 
			
		||||
	self->object->gameflag = ( int )PyInt_AS_LONG( integer );
 | 
			
		||||
 | 
			
		||||
	return EXPP_incr_ret( Py_None );
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject *Object_getRBShapeBoundType( BPy_Object * self )
 | 
			
		||||
static int Object_setRBShapeBoundType( BPy_Object * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *attr;
 | 
			
		||||
	PyObject* integer = PyNumber_Int( args );
 | 
			
		||||
 | 
			
		||||
    attr = PyInt_FromLong( self->object->boundtype );
 | 
			
		||||
 | 
			
		||||
	if( attr )
 | 
			
		||||
		return attr;
 | 
			
		||||
 | 
			
		||||
	return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
 | 
			
		||||
					"couldn't get Object->boundtype attribute" ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject *Object_setRBShapeBoundType( BPy_Object * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
    int value;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "i", &value ) )
 | 
			
		||||
		return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
 | 
			
		||||
			"expected int argument" ) );
 | 
			
		||||
	if( !integer )
 | 
			
		||||
		return EXPP_ReturnIntError( PyExc_TypeError,
 | 
			
		||||
				"expected integer argument" );
 | 
			
		||||
 | 
			
		||||
	/* more input validation? */
 | 
			
		||||
 | 
			
		||||
	self->object->boundtype  = value;
 | 
			
		||||
	self->object->boundtype = ( int )PyInt_AS_LONG( integer );
 | 
			
		||||
 | 
			
		||||
	return EXPP_incr_ret( Py_None );
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -330,6 +330,12 @@ class Object:
 | 
			
		||||
    @type constraints: BPy_ConstraintSeq
 | 
			
		||||
    @ivar constraints: a L{sequence<Constraint.ConstraintSeq>} of
 | 
			
		||||
    L{constraints<Constraint.Constraint>} for the object.
 | 
			
		||||
    @type rbMass: float
 | 
			
		||||
    @ivar rbMass: Rigid body mass.  Must be a positive value.
 | 
			
		||||
    @type rbFlags: int
 | 
			
		||||
    @ivar rbFlags: Rigid body flags.
 | 
			
		||||
    @type rbShapeBoundType: int
 | 
			
		||||
    @ivar rbShapeBoundType: Rigid body shape bound type.
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
  def buildParts():
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user