[Bf-blender-cvs] [83e068f5df3] temp-dynamic-overrides: New Affected Collection struct

Dalai Felinto noreply at git.blender.org
Mon May 28 01:38:28 CEST 2018


Commit: 83e068f5df3eb1e0b95fbab188ab355023252780
Author: Dalai Felinto
Date:   Mon May 28 00:42:17 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB83e068f5df3eb1e0b95fbab188ab355023252780

New Affected Collection struct

No point in using anonymous LinkData structs.

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

M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/scene/scene_edit.c
M	source/blender/makesdna/DNA_layer_types.h

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

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 586a8767b21..3e4e7af82ba 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1060,11 +1060,13 @@ bool BKE_view_layer_override_set_remove(struct ViewLayer *view_layer, struct Ove
 bool BKE_view_layer_override_set_collection_link(OverrideSet *override_set, Collection *collection)
 {
 	/* We don't support duplicated collections in the override set. */
-	if (BLI_findptr(&override_set->affected_collections, collection, offsetof(LinkData, data)) != NULL) {
+	if (BLI_findptr(&override_set->affected_collections, collection, offsetof(AffectedCollection, collection)) != NULL) {
 		return false;
 	};
 
-	BLI_addtail(&override_set->affected_collections, BLI_genericNodeN(collection));
+	AffectedCollection *affected = MEM_callocN(sizeof(AffectedCollection), __func__);
+	affected->collection = collection;
+	BLI_addtail(&override_set->affected_collections, affected);
 	return true;
 }
 
@@ -1074,15 +1076,15 @@ bool BKE_view_layer_override_set_collection_link(OverrideSet *override_set, Coll
  */
 bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet *override_set, struct Collection *collection)
 {
-	LinkData *link = BLI_findptr(&override_set->affected_collections, collection, offsetof(LinkData, data));
-	if (link == NULL) {
+	AffectedCollection *affected = BLI_findptr(&override_set->affected_collections, collection, offsetof(AffectedCollection, collection));
+	if (affected == NULL) {
 		return false;
 	}
 
-	const int collection_index = BLI_findindex(&override_set->affected_collections, link);
+	const int collection_index = BLI_findindex(&override_set->affected_collections, affected);
 
-	BLI_remlink(&override_set->affected_collections, link);
-	MEM_freeN(link);
+	BLI_remlink(&override_set->affected_collections, affected);
+	MEM_freeN(affected);
 
 	if (override_set->active_affected_collection > collection_index) {
 		override_set->active_affected_collection -= 1;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index bf9d7a131c5..7763234b850 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5609,8 +5609,11 @@ static void direct_link_view_layer(FileData *fd, ViewLayer *view_layer)
 	link_list(fd, &(view_layer->override_sets));
 	for (OverrideSet *override_set = view_layer->override_sets.first; override_set; override_set = override_set->next) {
 		link_list(fd, &override_set->affected_collections);
-		for (LinkData *link = override_set->affected_collections.first; link; link = link->next) {
-			link->data = newdataadr(fd, link->data);
+		for (AffectedCollection *affected = override_set->affected_collections.first;
+		     affected != NULL;
+		     affected = affected->next)
+		{
+			affected->collection = newdataadr(fd, affected->collection);
 		}
 		link_list(fd, &override_set->scene_properties);
 		direct_link_dynamic_properties(fd, &override_set->scene_properties);
@@ -9688,6 +9691,18 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
 			}
 			expand_doit(fd, mainvar, lineset->linestyle);
 		}
+
+		for (OverrideSet *override_set = view_layer->override_sets.first;
+		     override_set != NULL;
+		     override_set = override_set->next)
+		{
+			for (AffectedCollection *affected = override_set->affected_collections.first;
+			     affected != NULL;
+			     affected = affected->next)
+			{
+				expand_doit(fd, mainvar, affected->collection);
+			}
+		}
 	}
 
 	if (sce->gpd)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index d827ad336dc..92dbdda20ef 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2461,7 +2461,7 @@ static void write_view_layer(WriteData *wd, ViewLayer *view_layer)
 
 	writelist(wd, DATA, OverrideSet, &view_layer->override_sets);
 	for (OverrideSet *override_set = view_layer->override_sets.first; override_set; override_set = override_set->next) {
-		writelist(wd, DATA, LinkData, &override_set->affected_collections);
+		writelist(wd, DATA, AffectedCollection, &override_set->affected_collections);
 		writelist(wd, DATA, DynamicOverrideProperty, &override_set->scene_properties);
 		write_dynamic_properties(wd, &override_set->scene_properties);
 		writelist(wd, DATA, DynamicOverrideProperty, &override_set->collection_properties);
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index afc04b45cb7..07fd18313b3 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -565,8 +565,8 @@ static int view_layer_override_set_collection_unlink_exec(bContext *C, wmOperato
 	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
-	LinkData *link = BLI_findlink(&override_set->affected_collections, override_set->active_affected_collection);
-	Collection *collection = link->data;
+	AffectedCollection *affected_collection = BLI_findlink(&override_set->affected_collections, override_set->active_affected_collection);
+	Collection *collection = affected_collection->collection;
 
 	BKE_view_layer_override_set_collection_unlink(override_set, collection);
 
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index ee6549f3f53..dda6eee04d8 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -60,6 +60,11 @@ typedef struct LayerCollection {
 	ListBase layer_collections; /* synced with collection->children */
 } LayerCollection;
 
+typedef struct AffectedCollection {
+	struct AffectedCollection *next, *prev;
+	struct Collection *collection;
+} AffectedCollection;
+
 typedef struct DynamicOverridePropertyData {
 	int i[4];
 	float f[4];  /*TODO 16 to support 4x4 matrices? Not sure we actually need that though... */
@@ -87,7 +92,7 @@ typedef struct OverrideSet {
 	short flag;
 	short pad[2];
 	short active_affected_collection;
-	ListBase affected_collections; /* (Collection *)LinkData->data */
+	ListBase affected_collections; /* AffectedCollection */
 	ListBase scene_properties;
 	ListBase collection_properties;
 } OverrideSet;



More information about the Bf-blender-cvs mailing list