[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27958] trunk/blender/source: bugfix [ #21230] set-scene animation updates not working
Campbell Barton
ideasman42 at gmail.com
Fri Apr 2 15:43:56 CEST 2010
Revision: 27958
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27958
Author: campbellbarton
Date: 2010-04-02 15:43:56 +0200 (Fri, 02 Apr 2010)
Log Message:
-----------
bugfix [#21230] set-scene animation updates not working
fix for empty scenes with SETLOOPER macro.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_scene.h
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h 2010-04-02 12:18:01 UTC (rev 27957)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h 2010-04-02 13:43:56 UTC (rev 27958)
@@ -47,10 +47,9 @@
#define SCE_COPY_LINK_DATA 2
#define SCE_COPY_FULL 3
-/* note; doesn't work when scene is empty */
-#define SETLOOPER(s, b) sce= s, b= (Base*)sce->base.first; b; b= (Base*)(b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
+#define SETLOOPER(s, b) sce= s, b= _setlooper_base_step(&sce, NULL); b; b= _setlooper_base_step(&sce, b)
+struct Base *_setlooper_base_step(struct Scene **sce, struct Base *base);
-
void free_avicodecdata(struct AviCodecData *acd);
void free_qtcodecdata(struct QuicktimeCodecData *acd);
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2010-04-02 12:18:01 UTC (rev 27957)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2010-04-02 13:43:56 UTC (rev 27958)
@@ -1051,3 +1051,26 @@
return error;
}
+/* helper function for the SETLOOPER macro */
+Base *_setlooper_base_step(Scene **sce, Base *base)
+{
+ if(base && base->next) {
+ /* common case, step to the next */
+ return base->next;
+ }
+ else if(base==NULL && (*sce)->base.first) {
+ /* first time looping, return the scenes first base */
+ return (Base *)(*sce)->base.first;
+ }
+ else {
+ /* reached the end, get the next base in the set */
+ while((*sce= (*sce)->set)) {
+ base= (Base *)(*sce)->base.first;
+ if(base) {
+ return base;
+ }
+ }
+ }
+
+ return NULL;
+}
Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2010-04-02 12:18:01 UTC (rev 27957)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2010-04-02 13:43:56 UTC (rev 27958)
@@ -88,7 +88,6 @@
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_object.h"
-#include "BKE_scene.h"
#include "BL_ModifierDeformer.h"
#include "BL_ShapeDeformer.h"
#include "BL_SkinDeformer.h"
@@ -138,6 +137,7 @@
#include "BLI_math.h"
extern "C" {
+#include "BKE_scene.h"
#include "BKE_customdata.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_DerivedMesh.h"
More information about the Bf-blender-cvs
mailing list