[Bf-blender-cvs] [4a60c4746dd] master: Fix T101272: Missing view layer updates handling collections via python.

Jeroen Bakker noreply at git.blender.org
Tue Sep 27 11:59:25 CEST 2022


Commit: 4a60c4746ddf3ebd3bc236ddb678aae5a7fdad6a
Author: Jeroen Bakker
Date:   Tue Sep 27 11:57:34 2022 +0200
Branches: master
https://developer.blender.org/rB4a60c4746ddf3ebd3bc236ddb678aae5a7fdad6a

Fix T101272: Missing view layer updates handling collections via python.

Fixed by ensuring the view layer is up to date.

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

M	source/blender/makesrna/intern/rna_layer.c

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

diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index ae0366bebad..427a38094be 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -369,6 +369,41 @@ static bool rna_LayerCollection_has_selected_objects(LayerCollection *lc,
   return false;
 }
 
+static bool rna_LayerCollection_children_lookupint(struct PointerRNA *ptr,
+                                                   int key,
+                                                   struct PointerRNA *r_ptr)
+{
+  Scene *scene = (Scene *)ptr->owner_id;
+  LayerCollection *lc = (LayerCollection *)ptr->data;
+  ViewLayer *view_layer = BKE_view_layer_find_from_collection(scene, lc);
+  BKE_view_layer_synced_ensure(scene, view_layer);
+
+  LayerCollection *child = BLI_findlink(&lc->layer_collections, key);
+  if (!child) {
+    return false;
+  }
+  RNA_pointer_create(ptr->owner_id, &RNA_LayerCollection, child, r_ptr);
+  return true;
+}
+
+static bool rna_LayerCollection_children_lookupstring(struct PointerRNA *ptr,
+                                                      const char *key,
+                                                      struct PointerRNA *r_ptr)
+{
+  Scene *scene = (Scene *)ptr->owner_id;
+  LayerCollection *lc = (LayerCollection *)ptr->data;
+  ViewLayer *view_layer = BKE_view_layer_find_from_collection(scene, lc);
+  BKE_view_layer_synced_ensure(scene, view_layer);
+
+  LISTBASE_FOREACH (LayerCollection *, child, &lc->layer_collections) {
+    if (STREQ(child->collection->id.name + 2, key)) {
+      RNA_pointer_create(ptr->owner_id, &RNA_LayerCollection, child, r_ptr);
+      return true;
+    }
+  }
+  return false;
+}
+
 #else
 
 static void rna_def_layer_collection(BlenderRNA *brna)
@@ -399,6 +434,15 @@ static void rna_def_layer_collection(BlenderRNA *brna)
   RNA_def_property_collection_sdna(prop, NULL, "layer_collections", NULL);
   RNA_def_property_struct_type(prop, "LayerCollection");
   RNA_def_property_ui_text(prop, "Children", "Child layer collections");
+  RNA_def_property_collection_funcs(prop,
+                                    NULL,
+                                    NULL,
+                                    NULL,
+                                    NULL,
+                                    NULL,
+                                    "rna_LayerCollection_children_lookupint",
+                                    "rna_LayerCollection_children_lookupstring",
+                                    NULL);
 
   /* Restriction flags. */
   prop = RNA_def_property(srna, "exclude", PROP_BOOLEAN, PROP_NONE);



More information about the Bf-blender-cvs mailing list