[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17027] trunk/blender: Last (hopefully) soft body fixes:

Erwin Coumans blender at erwincoumans.com
Sat Oct 11 22:19:06 CEST 2008


Revision: 17027
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17027
Author:   erwin
Date:     2008-10-11 22:19:04 +0200 (Sat, 11 Oct 2008)

Log Message:
-----------
Last (hopefully) soft body fixes: 
Enable soft body collision clusters by default.
Add option to 'disable collision' button between soft body and rigid body connected by constraint (option was already available between two rigid bodies)

Modified Paths:
--------------
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp
    trunk/blender/source/blender/blenkernel/intern/bullet.c
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp	2008-10-11 19:53:39 UTC (rev 17026)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp	2008-10-11 20:19:04 UTC (rev 17027)
@@ -306,8 +306,16 @@
 }
 
 //
-void			btSoftBody::appendAnchor(int node,btRigidBody* body)
+void			btSoftBody::appendAnchor(int node,btRigidBody* body,bool disableCollisionWithBody=false)
 {
+	if (disableCollisionWithBody)
+	{
+		if (m_collisionDisabledObjects.findLinearSearch(body)==m_collisionDisabledObjects.size())
+		{
+			m_collisionDisabledObjects.push_back(body);
+		}
+	}
+
 	Anchor	a;
 	a.m_node			=	&m_nodes[node];
 	a.m_body			=	body;

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h	2008-10-11 19:53:39 UTC (rev 17026)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h	2008-10-11 20:19:04 UTC (rev 17027)
@@ -49,6 +49,8 @@
 class	btSoftBody : public btCollisionObject
 {
 public:
+	btAlignedObjectArray<class btCollisionObject*> m_collisionDisabledObjects;
+
 	//
 	// Enumerations
 	//
@@ -667,7 +669,7 @@
 									Material* mat=0);
 	/* Append anchor														*/ 
 	void				appendAnchor(	int node,
-										btRigidBody* body);
+										btRigidBody* body,bool disableCollision);
 	/* Append linear joint													*/ 
 	void				appendLinearJoint(const LJoint::Specs& specs,Cluster* body0,Body body1);
 	void				appendLinearJoint(const LJoint::Specs& specs,Body body=Body());

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp	2008-10-11 19:53:39 UTC (rev 17026)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp	2008-10-11 20:19:04 UTC (rev 17027)
@@ -59,7 +59,10 @@
 	btSoftBody* softBody =  m_isSwapped? (btSoftBody*)body1 : (btSoftBody*)body0;
 	btCollisionObject* rigidCollisionObject = m_isSwapped? body0 : body1;
 	
-	softBody->defaultCollisionHandler(rigidCollisionObject);
+	if (softBody->m_collisionDisabledObjects.findLinearSearch(rigidCollisionObject)==softBody->m_collisionDisabledObjects.size())
+	{
+		softBody->defaultCollisionHandler(rigidCollisionObject);
+	}
 
 
 }

Modified: trunk/blender/source/blender/blenkernel/intern/bullet.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bullet.c	2008-10-11 19:53:39 UTC (rev 17026)
+++ trunk/blender/source/blender/blenkernel/intern/bullet.c	2008-10-11 20:19:04 UTC (rev 17027)
@@ -78,8 +78,8 @@
 
 	bsb->kSHR			=	1.0f;
 	bsb->kAHR			=	0.7f;
-	bsb->collisionflags = 0;
-	//bsb->collisionflags = OB_BSB_COL_CL_RS + OB_BSB_COL_CL_SS;
+	//bsb->collisionflags = 0;
+	bsb->collisionflags = OB_BSB_COL_CL_RS + OB_BSB_COL_CL_SS;
 	bsb->numclusteriterations = 64;
 
 	return bsb;

Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp	2008-10-11 19:53:39 UTC (rev 17026)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp	2008-10-11 20:19:04 UTC (rev 17027)
@@ -1581,7 +1581,7 @@
 			{
 				if (rb1)
 				{
-					sb0->appendAnchor(node,rb1);
+					sb0->appendAnchor(node,rb1,disableCollisionBetweenLinkedBodies);
 				} else
 				{
 					sb0->setMass(node,0.f);
@@ -1643,7 +1643,7 @@
 			{
 				if (rb0)
 				{
-					sb1->appendAnchor(node,rb0);
+					sb1->appendAnchor(node,rb0,disableCollisionBetweenLinkedBodies);
 				} else
 				{
 					sb1->setMass(node,0.f);





More information about the Bf-blender-cvs mailing list