[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