[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