[Bf-blender-cvs] [f5499f8] layers: Fix nested collection write/read

Dalai Felinto noreply at git.blender.org
Wed Nov 23 14:08:27 CET 2016


Commit: f5499f8092f5d35686f2f5f3768096eccd5ec303
Author: Dalai Felinto
Date:   Wed Nov 23 12:27:30 2016 +0100
Branches: layers
https://developer.blender.org/rBf5499f8092f5d35686f2f5f3768096eccd5ec303

Fix nested collection write/read

===================================================================

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3831bf9..0deab3d 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5497,6 +5497,18 @@ static void direct_link_view_settings(FileData *fd, ColorManagedViewSettings *vi
 		direct_link_curvemapping(fd, view_settings->curve_mapping);
 }
 
+/* recursively direct link the layer collections */
+static void direct_link_layer_collections(FileData *fd , ListBase *lb)
+{
+	link_list(fd, lb);
+
+	for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+		link_list(fd, &(lc->elements));
+		link_list(fd, &(lc->overrides));
+		direct_link_layer_collections(fd, &lc->collections);
+	}
+}
+
 static void direct_link_scene(FileData *fd, Scene *sce)
 {
 	Editing *ed;
@@ -5744,12 +5756,9 @@ static void direct_link_scene(FileData *fd, Scene *sce)
 		sl->obedit = NULL;
 		link_list(fd, &(sl->base));
 		sl->basact = newdataadr(fd, sl->basact);
-		link_list(fd, &(sl->collections));
 
-		for (LayerCollection *lc = sl->collections.first; lc; lc = lc->next) {
-			link_list(fd, &(lc->elements));
-			link_list(fd, &(lc->overrides));
-		}
+		/* recursively direct link the layer collections */
+		direct_link_layer_collections(fd, &(sl->collections));
 	}
 }
 
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 31e8135..51fa3d9 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2401,13 +2401,30 @@ static void write_paint(WriteData *wd, Paint *p)
 	}
 }
 
+/* recursively write the layer collections structs */
+static void write_layer_collections(WriteData *wd, ListBase *lb)
+{
+	for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+		writestruct(wd, DATA, LayerCollection, 1, lc);
+
+		for (LinkData *link = lc->elements.first; link; link = link->next) {
+			writestruct(wd, DATA, LinkData, 1, link);
+		}
+
+		for (CollectionOverride *ov = lc->overrides.first; ov; ov = ov->next) {
+			writestruct(wd, DATA, CollectionOverride, 1, ov);
+		}
+
+		write_layer_collections(wd, &(lc->collections));
+	}
+}
+
 static void write_scenes(WriteData *wd, ListBase *scebase)
 {
 	Scene *sce;
 	Base *base;
 	Editing *ed;
 	Sequence *seq;
-	LayerCollection *lc;
 	MetaStack *ms;
 	Strip *strip;
 	TimeMarker *marker;
@@ -2597,17 +2614,8 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
 				base = base->next;
 			}
 
-			for (lc = sl->collections.first; lc; lc = lc->next) {
-				writestruct(wd, DATA, LayerCollection, 1, lc);
-
-				for (LinkData *link = lc->elements.first; link; link = link->next) {
-					writestruct(wd, DATA, LinkData, 1, link);
-				}
-
-				for (CollectionOverride *ov = lc->overrides.first; ov; ov = ov->next) {
-					writestruct(wd, DATA, CollectionOverride, 1, ov);
-				}
-			}
+			/* recursively write the layer collections structs */
+			write_layer_collections(wd, &sl->collections);
 		}
 
 		for (srl = sce->r.layers.first; srl; srl = srl->next) {




More information about the Bf-blender-cvs mailing list