Bugfix #4925
authorTon Roosendaal <ton@blender.org>
Sun, 17 Sep 2006 13:12:57 +0000 (13:12 +0000)
committerTon Roosendaal <ton@blender.org>
Sun, 17 Sep 2006 13:12:57 +0000 (13:12 +0000)
When using a particle system in a dupli-group, and the group is in the
current scene but not visible, the particles are calculated on wrong
position. This is the recurring trouble with particle calculating... which
doesn't do despgraph stuff.

This commit fixes the error, but it will still display particles *once*
(one draw) on the wrong location. That's a lag in the system I cannot
solve quickly...

Note that this system does work OK when you put the group in another Scene,
or linked from another file. That's what it was coded for...

source/blender/blenkernel/intern/DerivedMesh.c
source/blender/blenkernel/intern/effect.c

index 339958e2041c3d6e5fce829b1aa3a5578ff37357..e1140b7c44236d83a895adf1b0c03105c7d6ef6e 100644 (file)
@@ -3307,7 +3307,6 @@ void makeDispListMesh(Object *ob)
                mesh_build_data(ob);
                
                if(paf) {
-                       printf("ob %s %d\n", ob->id.name, ob->recalc);
                        if((paf->flag & PAF_STATIC) || (ob->recalc & OB_RECALC_TIME)==0)
                                build_particle_system(ob);
                }
index 4289bf627bdfa2a6a5d35826d6c3c1e13770b2d4..223255808a7069eab228603d1f04532387acebd9 100644 (file)
@@ -1559,8 +1559,10 @@ static pMatrixCache *cache_object_matrices(Object *ob, int start, int end)
        
        /* all objects get tagged recalc that influence this object (does group too) */
        /* another hack; while transform you cannot call this, it sets own recalc flags */
-       if(G.moving==0)
-               DAG_object_update_flags(G.scene, ob, G.scene->lay);
+       if(G.moving==0) {
+               ob->recalc |= OB_RECALC_OB; /* make sure a recalc gets flushed */
+               DAG_object_update_flags(G.scene, ob, -1);
+       }
        
        for(G.scene->r.cfra= start; G.scene->r.cfra<=end; G.scene->r.cfra++, mc++) {