[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27961] trunk/blender/source/blender/ blenkernel/intern: Set Scenes and Physics

Campbell Barton ideasman42 at gmail.com
Fri Apr 2 16:57:12 CEST 2010


Revision: 27961
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27961
Author:   campbellbarton
Date:     2010-04-02 16:57:12 +0200 (Fri, 02 Apr 2010)

Log Message:
-----------
Set Scenes and Physics
- objects in a set scene now are evaluated with the frame from the current scene.
- pointcache now loops over all set scene objects.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/pointcache.c
    trunk/blender/source/blender/blenkernel/intern/scene.c

Modified: trunk/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-04-02 14:49:47 UTC (rev 27960)
+++ trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-04-02 14:57:12 UTC (rev 27961)
@@ -560,7 +560,7 @@
 static int ptcache_totpoint_cloth(void *cloth_v, int cfra)
 {
 	ClothModifierData *clmd= cloth_v;
-	return clmd->clothObject->numverts;
+	return clmd->clothObject ? clmd->clothObject->numverts : 0;
 }
 
 /* Creating ID's */
@@ -2327,12 +2327,13 @@
 /* Baking */
 static int count_quick_cache(Scene *scene, int *quick_step)
 {
-	Base *base = scene->base.first;
+	Base *base;
 	PTCacheID *pid;
 	ListBase pidlist;
 	int autocache_count= 0;
+	Scene *sce; /* for macro only */
 
-	for(base = scene->base.first; base; base = base->next) {
+	for(SETLOOPER(scene, base)) {
 		if(base->object) {
 			BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
 
@@ -2401,6 +2402,7 @@
 void BKE_ptcache_make_cache(PTCacheBaker* baker)
 {
 	Scene *scene = baker->scene;
+	Scene *sce; /* SETLOOPER macro only */
 	Base *base;
 	ListBase pidlist;
 	PTCacheID *pid = baker->pid;
@@ -2465,7 +2467,7 @@
 			cache->flag &= ~PTCACHE_BAKED;
 		}
 	}
-	else for(base=scene->base.first; base; base= base->next) {
+	for(SETLOOPER(scene, base)) {
 		/* cache/bake everything in the scene */
 		BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
 
@@ -2548,7 +2550,7 @@
 				BKE_ptcache_write_cache(pid, 0);
 		}
 	}
-	else for(base=scene->base.first; base; base= base->next) {
+	else for(SETLOOPER(scene, base)) {
 		BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
 
 		for(pid=pidlist.first; pid; pid=pid->next) {

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2010-04-02 14:49:47 UTC (rev 27960)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2010-04-02 14:57:12 UTC (rev 27961)
@@ -891,10 +891,12 @@
 	return ctime;
 }
 
-static void scene_update_newframe(Scene *scene, unsigned int lay)
+static void scene_update_newframe(Scene *scene, int cfra, unsigned int lay)
 {
 	Base *base;
 	Object *ob;
+	int cfra_back= scene->r.cfra;
+	scene->r.cfra= cfra;
 	
 	for(base= scene->base.first; base; base= base->next) {
 		ob= base->object;
@@ -910,6 +912,8 @@
 		//	base->lay= ob->lay;
 		//}
 	}
+
+	scene->r.cfra= cfra_back;
 }
 
 /* this is called in main loop, doing tagged updates before redraw */
@@ -956,10 +960,6 @@
 	/* XXX - this is called far to often, should be made apart of the depgraph */
 	BKE_ptcache_quick_cache_all(scene);
 
-	sce= scene;
-	while((sce= sce->set))
-		BKE_ptcache_quick_cache_all(sce);
-
 	/* in the future this should handle updates for all datablocks, not
 	   only objects and scenes. - brecht */
 }
@@ -994,10 +994,14 @@
 
 
 	/* sets first, we allow per definition current scene to have dependencies on sets */
-	for(sce_iter= sce->set; sce_iter; sce_iter= sce_iter->set)
-		scene_update_newframe(sce_iter, lay);
+	for(sce_iter= sce->set; sce_iter; sce_iter= sce_iter->set) {
+		int cfra= sce_iter->r.cfra;
+		sce_iter->r.cfra= sce->r.cfra;
+		scene_update_newframe(sce_iter, sce->r.cfra, lay);
+		sce_iter->r.cfra= cfra;
+    }
 
-	scene_update_newframe(sce, lay);
+	scene_update_newframe(sce, sce->r.cfra, lay);
 }
 
 /* return default layer, also used to patch old files */





More information about the Bf-blender-cvs mailing list