make debugDrawWorld virtual for btSoftRigidDynamicsWorld

Move btSoftBodyWorldInfo to public, instead of nested, so it can be easier forward declared.
See http://code.google.com/p/bullet/issues/detail?id=78

Add get methods for damping/thresholds, see http://code.google.com/p/bullet/issues/detail?id=77
This commit is contained in:
erwin.coumans
2008-08-19 16:09:04 +00:00
parent 8eafab367f
commit 07b577fd86
8 changed files with 51 additions and 28 deletions

View File

@@ -49,7 +49,7 @@ public:
btAlignedObjectArray<btSoftRididCollisionAlgorithm*> m_SoftRigidCollisionAlgorithms; btAlignedObjectArray<btSoftRididCollisionAlgorithm*> m_SoftRigidCollisionAlgorithms;
btSoftBody::btSoftBodyWorldInfo m_softBodyWorldInfo; btSoftBodyWorldInfo m_softBodyWorldInfo;
bool m_autocam; bool m_autocam;

View File

@@ -187,6 +187,26 @@ public:
void setDamping(btScalar lin_damping, btScalar ang_damping); void setDamping(btScalar lin_damping, btScalar ang_damping);
btScalar getLinearDamping() const
{
return m_linearDamping;
}
btScalar getAngularDamping() const
{
return m_angularDamping;
}
btScalar getLinearSleepingThreshold() const
{
return m_linearSleepingThreshold;
}
btScalar getAngularSleepingThreshold() const
{
return m_angularSleepingThreshold;
}
void applyDamping(btScalar timeStep); void applyDamping(btScalar timeStep);
SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const {

View File

@@ -17,7 +17,7 @@ subject to the following restrictions:
#include "btSoftBodyInternals.h" #include "btSoftBodyInternals.h"
// //
btSoftBody::btSoftBody(btSoftBody::btSoftBodyWorldInfo* worldInfo,int node_count, const btVector3* x, const btScalar* m) btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo,int node_count, const btVector3* x, const btScalar* m)
:m_worldInfo(worldInfo) :m_worldInfo(worldInfo)
{ {
/* Init */ /* Init */
@@ -1911,7 +1911,7 @@ for(i=0;i<m_clusters.size();++i)
if(n) if(n)
{ {
/* Frame */ /* Frame */
const btScalar eps=0.0001; const btScalar eps=btScalar(0.0001);
btMatrix3x3 m,r,s; btMatrix3x3 m,r,s;
m[0]=m[1]=m[2]=btVector3(0,0,0); m[0]=m[1]=m[2]=btVector3(0,0,0);
m[0][0]=eps*1; m[0][0]=eps*1;

View File

@@ -31,6 +31,20 @@ subject to the following restrictions:
class btBroadphaseInterface; class btBroadphaseInterface;
class btCollisionDispatcher; class btCollisionDispatcher;
/* btSoftBodyWorldInfo */
struct btSoftBodyWorldInfo
{
btScalar air_density;
btScalar water_density;
btScalar water_offset;
btVector3 water_normal;
btBroadphaseInterface* m_broadphase;
btCollisionDispatcher* m_dispatcher;
btVector3 m_gravity;
btSparseSdf<3> m_sparsesdf;
};
/// btSoftBody is work-in-progress /// btSoftBody is work-in-progress
class btSoftBody : public btCollisionObject class btSoftBody : public btCollisionObject
{ {
@@ -135,18 +149,6 @@ public:
typedef btAlignedObjectArray<btScalar> tScalarArray; typedef btAlignedObjectArray<btScalar> tScalarArray;
typedef btAlignedObjectArray<btVector3> tVector3Array; typedef btAlignedObjectArray<btVector3> tVector3Array;
/* btSoftBodyWorldInfo */
struct btSoftBodyWorldInfo
{
btScalar air_density;
btScalar water_density;
btScalar water_offset;
btVector3 water_normal;
btBroadphaseInterface* m_broadphase;
btCollisionDispatcher* m_dispatcher;
btVector3 m_gravity;
btSparseSdf<3> m_sparsesdf;
};
/* sCti is Softbody contact info */ /* sCti is Softbody contact info */
struct sCti struct sCti

View File

@@ -444,7 +444,7 @@ void btSoftBodyHelpers::DrawFrame( btSoftBody* psb,
} }
// //
btSoftBody* btSoftBodyHelpers::CreateRope( btSoftBody::btSoftBodyWorldInfo& worldInfo, const btVector3& from, btSoftBody* btSoftBodyHelpers::CreateRope( btSoftBodyWorldInfo& worldInfo, const btVector3& from,
const btVector3& to, const btVector3& to,
int res, int res,
int fixeds) int fixeds)
@@ -476,7 +476,7 @@ btSoftBody* btSoftBodyHelpers::CreateRope( btSoftBody::btSoftBodyWorldInfo& wor
} }
// //
btSoftBody* btSoftBodyHelpers::CreatePatch(btSoftBody::btSoftBodyWorldInfo& worldInfo,const btVector3& corner00, btSoftBody* btSoftBodyHelpers::CreatePatch(btSoftBodyWorldInfo& worldInfo,const btVector3& corner00,
const btVector3& corner10, const btVector3& corner10,
const btVector3& corner01, const btVector3& corner01,
const btVector3& corner11, const btVector3& corner11,
@@ -553,7 +553,7 @@ btSoftBody* btSoftBodyHelpers::CreatePatch(btSoftBody::btSoftBodyWorldInfo& wor
} }
// //
btSoftBody* btSoftBodyHelpers::CreateEllipsoid(btSoftBody::btSoftBodyWorldInfo& worldInfo,const btVector3& center, btSoftBody* btSoftBodyHelpers::CreateEllipsoid(btSoftBodyWorldInfo& worldInfo,const btVector3& center,
const btVector3& radius, const btVector3& radius,
int res) int res)
{ {
@@ -585,7 +585,7 @@ btSoftBody* btSoftBodyHelpers::CreateEllipsoid(btSoftBody::btSoftBodyWorldInfo&
// //
btSoftBody* btSoftBodyHelpers::CreateFromTriMesh(btSoftBody::btSoftBodyWorldInfo& worldInfo,const btScalar* vertices, btSoftBody* btSoftBodyHelpers::CreateFromTriMesh(btSoftBodyWorldInfo& worldInfo,const btScalar* vertices,
const int* triangles, const int* triangles,
int ntriangles) int ntriangles)
{ {
@@ -627,7 +627,7 @@ btSoftBody* btSoftBodyHelpers::CreateFromTriMesh(btSoftBody::btSoftBodyWorldInf
} }
// //
btSoftBody* btSoftBodyHelpers::CreateFromConvexHull(btSoftBody::btSoftBodyWorldInfo& worldInfo, const btVector3* vertices, btSoftBody* btSoftBodyHelpers::CreateFromConvexHull(btSoftBodyWorldInfo& worldInfo, const btVector3* vertices,
int nvertices) int nvertices)
{ {
HullDesc hdsc(QF_TRIANGLES,nvertices,vertices); HullDesc hdsc(QF_TRIANGLES,nvertices,vertices);

View File

@@ -73,13 +73,13 @@ struct btSoftBodyHelpers
static void DrawFrame( btSoftBody* psb, static void DrawFrame( btSoftBody* psb,
btIDebugDraw* idraw); btIDebugDraw* idraw);
/* Create a rope */ /* Create a rope */
static btSoftBody* CreateRope( btSoftBody::btSoftBodyWorldInfo& worldInfo, static btSoftBody* CreateRope( btSoftBodyWorldInfo& worldInfo,
const btVector3& from, const btVector3& from,
const btVector3& to, const btVector3& to,
int res, int res,
int fixeds); int fixeds);
/* Create a patch */ /* Create a patch */
static btSoftBody* CreatePatch(btSoftBody::btSoftBodyWorldInfo& worldInfo, static btSoftBody* CreatePatch(btSoftBodyWorldInfo& worldInfo,
const btVector3& corner00, const btVector3& corner00,
const btVector3& corner10, const btVector3& corner10,
const btVector3& corner01, const btVector3& corner01,
@@ -89,17 +89,17 @@ struct btSoftBodyHelpers
int fixeds, int fixeds,
bool gendiags); bool gendiags);
/* Create an ellipsoid */ /* Create an ellipsoid */
static btSoftBody* CreateEllipsoid(btSoftBody::btSoftBodyWorldInfo& worldInfo, static btSoftBody* CreateEllipsoid(btSoftBodyWorldInfo& worldInfo,
const btVector3& center, const btVector3& center,
const btVector3& radius, const btVector3& radius,
int res); int res);
/* Create from trimesh */ /* Create from trimesh */
static btSoftBody* CreateFromTriMesh( btSoftBody::btSoftBodyWorldInfo& worldInfo, static btSoftBody* CreateFromTriMesh( btSoftBodyWorldInfo& worldInfo,
const btScalar* vertices, const btScalar* vertices,
const int* triangles, const int* triangles,
int ntriangles); int ntriangles);
/* Create from convex-hull */ /* Create from convex-hull */
static btSoftBody* CreateFromConvexHull( btSoftBody::btSoftBodyWorldInfo& worldInfo, static btSoftBody* CreateFromConvexHull( btSoftBodyWorldInfo& worldInfo,
const btVector3* vertices, const btVector3* vertices,
int nvertices); int nvertices);
}; };

View File

@@ -506,7 +506,7 @@ static inline btScalar VolumeOf( const btVector3& x0,
} }
// //
static void EvaluateMedium( const btSoftBody::btSoftBodyWorldInfo* wfi, static void EvaluateMedium( const btSoftBodyWorldInfo* wfi,
const btVector3& x, const btVector3& x,
btSoftBody::sMedium& medium) btSoftBody::sMedium& medium)
{ {

View File

@@ -40,7 +40,7 @@ protected:
void solveSoftBodiesConstraints(); void solveSoftBodiesConstraints();
virtual void debugDrawWorld();
public: public:
@@ -48,6 +48,7 @@ public:
virtual ~btSoftRigidDynamicsWorld(); virtual ~btSoftRigidDynamicsWorld();
virtual void debugDrawWorld();
void addSoftBody(btSoftBody* body); void addSoftBody(btSoftBody* body);