[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44995] trunk/blender/source/blender: Fix #30456: transforming object with a hair particle system, on a frame after

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Mar 19 19:14:32 CET 2012


Revision: 44995
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44995
Author:   blendix
Date:     2012-03-19 18:14:24 +0000 (Mon, 19 Mar 2012)
Log Message:
-----------
Fix #30456: transforming object with a hair particle system, on a frame after
the cache end frame would reset to the previous state on confirm. Was an issue
with object animation being evaluated unnecessarily, now make check more
precise.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/makesdna/DNA_particle_types.h

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2012-03-19 17:22:01 UTC (rev 44994)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2012-03-19 18:14:24 UTC (rev 44995)
@@ -1814,6 +1814,8 @@
 		}
 		ob = sim->ob;
 		where_is_object_time(sim->scene, ob, pa->time);
+
+		psys->flag |= PSYS_OB_ANIM_RESTORE;
 	}
 
 	psys_get_birth_coordinates(sim, pa, &pa->state, dtime, cfra);
@@ -4438,6 +4440,9 @@
 	/* execute drivers only, as animation has already been done */
 	BKE_animsys_evaluate_animdata(scene, &part->id, part->adt, cfra, ADT_RECALC_DRIVERS);
 
+	/* to verify if we need to restore object afterwards */
+	psys->flag &= ~PSYS_OB_ANIM_RESTORE;
+
 	if(psys->recalc & PSYS_RECALC_TYPE)
 		psys_changed_type(&sim);
 
@@ -4550,14 +4555,16 @@
 		}
 	}
 
-	if(psys->cfra < cfra) {
-		/* make sure emitter is left at correct time (particle emission can change this) */
+	/* make sure emitter is left at correct time (particle emission can change this) */
+	if(psys->flag & PSYS_OB_ANIM_RESTORE) {
 		while(ob) {
 			BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, cfra, ADT_RECALC_ANIM);
 			ob = ob->parent;
 		}
 		ob = sim.ob;
 		where_is_object_time(scene, ob, cfra);
+
+		psys->flag &= ~PSYS_OB_ANIM_RESTORE;
 	}
 
 	psys->cfra = cfra;

Modified: trunk/blender/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_particle_types.h	2012-03-19 17:22:01 UTC (rev 44994)
+++ trunk/blender/source/blender/makesdna/DNA_particle_types.h	2012-03-19 18:14:24 UTC (rev 44995)
@@ -498,7 +498,8 @@
 #define PSYS_KEYED			1024
 #define PSYS_EDITED			2048
 //#define PSYS_PROTECT_CACHE	4096 /* deprecated */
-#define PSYS_DISABLED		8192
+#define PSYS_DISABLED			8192
+#define PSYS_OB_ANIM_RESTORE	16384 /* runtime flag */
 
 /* pars->flag */
 #define PARS_UNEXIST		1




More information about the Bf-blender-cvs mailing list