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);
        }
 }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to