[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14764] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Fri May 9 15:04:36 CEST 2008


Revision: 14764
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14764
Author:   blendix
Date:     2008-05-09 15:04:36 +0200 (Fri, 09 May 2008)

Log Message:
-----------

Fix for bug #10475: added more dependencies for physics systems
with deflectors and fields for proper dependency graph updates.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/src/buttons_object.c

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2008-05-09 12:39:56 UTC (rev 14763)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2008-05-09 13:04:36 UTC (rev 14764)
@@ -346,6 +346,24 @@
 	}
 }
 
+static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode *node)
+{
+	Base *base;
+	DagNode *node2;
+
+	// would be nice to have a list of colliders here
+	// so for now walk all objects in scene check 'same layer rule'
+	for(base = G.scene->base.first; base; base= base->next) {
+		if((base->lay & ob->lay) && base->object->pd) {
+			Object *ob1= base->object;
+			if((ob1->pd->deflect || ob1->pd->forcefield) && (ob1 != ob))  {
+				node2 = dag_get_node(dag, ob1);					
+				dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Field Collision");
+			}
+		}
+	}
+}
+
 static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int mask)
 {
 	bConstraint *con;
@@ -523,22 +541,9 @@
 	}
     
 	/* softbody collision  */
-	if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE)) {
-		Base *base;
-		if(modifiers_isSoftbodyEnabled(ob)){
-			// would be nice to have a list of colliders here
-			// so for now walk all objects in scene check 'same layer rule'
-			for(base = G.scene->base.first; base; base= base->next) {
-				if( (base->lay & ob->lay) && base->object->pd) {
-					Object *ob1= base->object;
-					if((ob1->pd->deflect) && (ob1 != ob))  {
-						node2 = dag_get_node(dag, ob1);					
-						dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Softbody Collision");
-					}
-				}
-			}
-		}
-	}
+	if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE))
+		if(modifiers_isSoftbodyEnabled(ob) || modifiers_isClothEnabled(ob))
+			dag_add_collision_field_relation(dag, ob, node);
 		
 	if (ob->type==OB_MBALL) {
 		Object *mom= find_basis_mball(ob);

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2008-05-09 12:39:56 UTC (rev 14763)
+++ trunk/blender/source/blender/src/buttons_object.c	2008-05-09 13:04:36 UTC (rev 14764)
@@ -3208,6 +3208,7 @@
 		{
 			md = modifier_new ( eModifierType_Collision );
 			BLI_addtail ( &ob->modifiers, md );
+			DAG_scene_sort(G.scene);
 			DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
 			allqueue(REDRAWBUTSEDIT, 0);
 			allqueue(REDRAWVIEW3D, 0);
@@ -3215,8 +3216,10 @@
 	}
 	else
 	{
+		DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
 		BLI_remlink ( &ob->modifiers, md );
 		modifier_free ( md );
+		DAG_scene_sort(G.scene);
 		allqueue(REDRAWBUTSEDIT, 0);
 	}
 }





More information about the Bf-blender-cvs mailing list