[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13476] trunk/blender: New: Collision Modifier and Cloth can be at any position on the modifier stack.

Daniel Genrich daniel.genrich at gmx.net
Wed Jan 30 15:01:06 CET 2008


Revision: 13476
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13476
Author:   genscher
Date:     2008-01-30 15:01:05 +0100 (Wed, 30 Jan 2008)

Log Message:
-----------
New: Collision Modifier and Cloth can be at any position on the modifier stack. BUT everytime the vertices count change, they will free themselves and internal build new (they rely on vertex count). Should be no problem anymore with e.g. subsurf modifier before collision modifier (tested). Fix: applied a patch from schlaile to get my bullet additions compiled with gcc 3.3

Modified Paths:
--------------
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/Bullet-C-API.cpp
    trunk/blender/source/blender/blenkernel/intern/modifier.c

Modified: trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/Bullet-C-API.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/Bullet-C-API.cpp	2008-01-30 13:44:25 UTC (rev 13475)
+++ trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/Bullet-C-API.cpp	2008-01-30 14:01:05 UTC (rev 13476)
@@ -53,10 +53,15 @@
 extern "C"
 double plNearestPoints(float p1[3], float p2[3], float p3[3], float q1[3], float q2[3], float q3[3], float *pa, float *pb, float normal[3])
 {
-	btTriangleShape trishapeA(btVector3(p1[0], p1[1], p1[2]), btVector3(p2[0], p2[1], p2[2]), btVector3(p3[0], p3[1], p3[2]));
+	btVector3 vp(p1[0], p1[1], p1[2]);
+	btTriangleShape trishapeA(vp, 
+				  btVector3(p2[0], p2[1], p2[2]), 
+				  btVector3(p3[0], p3[1], p3[2]));
 	trishapeA.setMargin(0.000001f);
-	
-	btTriangleShape trishapeB(btVector3(q1[0], q1[1], q1[2]), btVector3(q2[0], q2[1], q2[2]), btVector3(q3[0], q3[1], q3[2]));
+	btVector3 vq(q1[0], q1[1], q1[2]);
+	btTriangleShape trishapeB(vq, 
+				  btVector3(q2[0], q2[1], q2[2]), 
+				  btVector3(q3[0], q3[1], q3[2]));
 	trishapeB.setMargin(0.000001f);
 	
 	// btVoronoiSimplexSolver sGjkSimplexSolver;

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2008-01-30 13:44:25 UTC (rev 13475)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2008-01-30 14:01:05 UTC (rev 13476)
@@ -5178,6 +5178,8 @@
 				// TODO: epsilon
 				// create bounding box hierarchy
 				collmd->tree = bvh_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->x, numverts, ob->pd->pdef_sbift);
+				
+				collmd->time = current_time;
 			}
 			else if(numverts == collmd->numverts)
 			{
@@ -5207,9 +5209,14 @@
 					// recalc static bounding boxes
 					bvh_update_from_mvert(collmd->tree, collmd->current_x, numverts, NULL, 0);
 				}
+				
+				collmd->time = current_time;
 			}
+			else if(numverts != collmd->numverts)
+			{
+				collisionModifier_freeData((ModifierData *)collmd);
+			}
 			
-			collmd->time = current_time;
 		}
 		else
 		{	
@@ -7050,10 +7057,7 @@
 		mti->type = eModifierTypeType_Nonconstructive;
 		mti->initData = clothModifier_initData;
 		mti->flags = eModifierTypeFlag_AcceptsMesh
-				| eModifierTypeFlag_RequiresOriginalData;
-		 			// | eModifierTypeFlag_SupportsMapping
-					// | eModifierTypeFlag_SupportsEditmode 
-					// | eModifierTypeFlag_EnableInEditmode;
+				| eModifierTypeFlag_UsesPointCache;
 		mti->dependsOnTime = clothModifier_dependsOnTime;
 		mti->freeData = clothModifier_freeData; 
 		mti->requiredDataMask = clothModifier_requiredDataMask;
@@ -7064,8 +7068,7 @@
 		mti = INIT_TYPE(Collision);
 		mti->type = eModifierTypeType_OnlyDeform;
 		mti->initData = collisionModifier_initData;
-		mti->flags = eModifierTypeFlag_AcceptsMesh 
-				| eModifierTypeFlag_RequiresOriginalData;
+		mti->flags = eModifierTypeFlag_AcceptsMesh;
 		mti->dependsOnTime = collisionModifier_dependsOnTime;
 		mti->freeData = collisionModifier_freeData; 
 		mti->deformVerts = collisionModifier_deformVerts;





More information about the Bf-blender-cvs mailing list