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:
authorJohnny Matthews <johnny.matthews@gmail.com>2005-04-15 00:11:10 +0400
committerJohnny Matthews <johnny.matthews@gmail.com>2005-04-15 00:11:10 +0400
commit95994e937f8e251914fead142a8f5c262605e5d5 (patch)
tree3276da8d0d2f90d7f2eb17cd1bcd120f4caaac1f /source/blender/python/api2_2x/Object.c
parent4108a47720877b381b21a3bffd2e25ced0fa49d6 (diff)
This commit initializes the softbody pointer if it is accessed through python and has not yet been set up.
Diffstat (limited to 'source/blender/python/api2_2x/Object.c')
-rw-r--r--source/blender/python/api2_2x/Object.c195
1 files changed, 149 insertions, 46 deletions
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 48605abcd00..e0ea2cbd07e 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -46,6 +46,7 @@
#include <BKE_property.h>
#include <BKE_mball.h>
#include <BKE_font.h>
+#include <BKE_softbody.h>
#include <BIF_editview.h>
#include <BSE_editipo.h>
@@ -127,6 +128,8 @@ struct PyMethodDef M_Object_methods[] = {
/*****************************************************************************/
/* Python BPy_Object methods declarations: */
/*****************************************************************************/
+int setupSB(Object* ob); /*Make sure Softbody Pointer is initialized */
+
static PyObject *Object_buildParts( BPy_Object * self );
static PyObject *Object_clearIpo( BPy_Object * self );
static PyObject *Object_clrParent( BPy_Object * self, PyObject * args );
@@ -2963,7 +2966,6 @@ PyObject *Object_getPIType( BPy_Object * self )
}
PyObject *Object_setPIType( BPy_Object * self, PyObject * args )
{
- BPy_constant *constant;
int value;
if(!self->object->pd){
@@ -3114,7 +3116,6 @@ PyObject *Object_getPIDeflection( BPy_Object * self )
PyObject *Object_setPIDeflection( BPy_Object * self, PyObject * args )
{
- BPy_constant *constant;
int value;
if(!self->object->pd){
@@ -3138,8 +3139,9 @@ PyObject *Object_getSBMass( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->nodemass );
@@ -3156,8 +3158,9 @@ PyObject *Object_setSBMass( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3177,8 +3180,9 @@ PyObject *Object_getSBGravity( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->grav );
@@ -3195,8 +3199,9 @@ PyObject *Object_setSBGravity( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3216,8 +3221,9 @@ PyObject *Object_getSBFriction( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->mediafrict );
@@ -3234,8 +3240,9 @@ PyObject *Object_setSBFriction( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3255,8 +3262,9 @@ PyObject *Object_getSBErrorLimit( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->rklimit );
@@ -3273,8 +3281,9 @@ PyObject *Object_setSBErrorLimit( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3294,8 +3303,9 @@ PyObject *Object_getSBGoalSpring( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->goalspring );
@@ -3312,8 +3322,9 @@ PyObject *Object_setSBGoalSpring( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer) " ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3333,8 +3344,9 @@ PyObject *Object_getSBGoalFriction( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->goalfrict );
@@ -3351,8 +3363,9 @@ PyObject *Object_setSBGoalFriction( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3372,8 +3385,9 @@ PyObject *Object_getSBMinGoal( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->mingoal );
@@ -3390,8 +3404,9 @@ PyObject *Object_setSBMinGoal( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3411,8 +3426,9 @@ PyObject *Object_getSBMaxGoal( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->maxgoal );
@@ -3429,8 +3445,9 @@ PyObject *Object_setSBMaxGoal( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3450,8 +3467,9 @@ PyObject *Object_getSBInnerSpring( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->inspring );
@@ -3468,8 +3486,9 @@ PyObject *Object_setSBInnerSpring( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3489,8 +3508,9 @@ PyObject *Object_getSBInnerSpringFriction( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->infrict );
@@ -3507,8 +3527,9 @@ PyObject *Object_setSBInnerSpringFriction( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3528,8 +3549,9 @@ PyObject *Object_getSBDefaultGoal( BPy_Object * self )
PyObject *attr;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
attr = PyFloat_FromDouble( ( double ) self->object->soft->defgoal );
@@ -3546,8 +3568,9 @@ PyObject *Object_setSBDefaultGoal( BPy_Object * self, PyObject * args )
float value;
if(!self->object->soft){
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "particle deflection could not be accessed (null pointer)" ) );
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
}
if( !PyArg_ParseTuple( args, "f", &value ) )
@@ -3567,6 +3590,13 @@ PyObject *Object_getSBEnable( BPy_Object * self )
short flag = self->object->softflag;
PyObject *attr = NULL;
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
+
if(self->object->softflag & OB_SB_ENABLE){
attr = PyInt_FromLong(1);
}
@@ -3582,6 +3612,13 @@ PyObject *Object_getSBEnable( BPy_Object * self )
PyObject *Object_setSBEnable( BPy_Object * self, PyObject * args )
{
short value;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if( !PyArg_ParseTuple( args, "h", &value ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected integer argument" ) );
@@ -3600,6 +3637,12 @@ PyObject *Object_getSBPostDef( BPy_Object * self )
{
short flag = self->object->softflag;
PyObject *attr = NULL;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
if(self->object->softflag & OB_SB_POSTDEF){
attr = PyInt_FromLong(1);
@@ -3616,6 +3659,14 @@ PyObject *Object_getSBPostDef( BPy_Object * self )
PyObject *Object_setSBPostDef( BPy_Object * self, PyObject * args )
{
short value;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
+
if( !PyArg_ParseTuple( args, "h", &value ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected integer argument" ) );
@@ -3630,6 +3681,12 @@ PyObject *Object_getSBUseGoal( BPy_Object * self )
short flag = self->object->softflag;
PyObject *attr = NULL;
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if(self->object->softflag & OB_SB_GOAL){
attr = PyInt_FromLong(1);
}
@@ -3645,6 +3702,13 @@ PyObject *Object_getSBUseGoal( BPy_Object * self )
PyObject *Object_setSBUseGoal( BPy_Object * self, PyObject * args )
{
short value;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if( !PyArg_ParseTuple( args, "h", &value ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected integer argument" ) );
@@ -3660,6 +3724,12 @@ PyObject *Object_getSBUseEdges( BPy_Object * self )
short flag = self->object->softflag;
PyObject *attr = NULL;
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if(self->object->softflag & OB_SB_EDGES){
attr = PyInt_FromLong(1);
}
@@ -3675,6 +3745,13 @@ PyObject *Object_getSBUseEdges( BPy_Object * self )
PyObject *Object_setSBUseEdges( BPy_Object * self, PyObject * args )
{
short value;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if( !PyArg_ParseTuple( args, "h", &value ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected integer argument" ) );
@@ -3689,6 +3766,12 @@ PyObject *Object_getSBStiffQuads( BPy_Object * self )
{
short flag = self->object->softflag;
PyObject *attr = NULL;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
if(self->object->softflag & OB_SB_QUADS){
attr = PyInt_FromLong(1);
@@ -3705,6 +3788,13 @@ PyObject *Object_getSBStiffQuads( BPy_Object * self )
PyObject *Object_setSBStiffQuads( BPy_Object * self, PyObject * args )
{
short value;
+
+ if(!self->object->soft){
+ if(!setupSB(self->object))
+ return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "softbody could not be accessed (null pointer)" ) );
+ }
+
if( !PyArg_ParseTuple( args, "h", &value ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected integer argument" ) );
@@ -3715,3 +3805,16 @@ PyObject *Object_setSBStiffQuads( BPy_Object * self, PyObject * args )
return EXPP_incr_ret( Py_None );
}
+int setupSB(Object* ob){
+ ob->soft= sbNew();
+ ob->softflag |= OB_SB_GOAL|OB_SB_EDGES;
+ // default add edges for softbody
+ if(ob->type==OB_MESH) {
+ Mesh *me= ob->data;
+ if(me->medge==NULL) make_edges(me);
+ }
+ if(ob->soft)
+ return 1;
+ else
+ return 0;
+}