[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