[Bf-blender-cvs] [a89f829f12f] master: LibOverride: Add option to Hierarchy Creation to get all data user-editable by default.

Bastien Montagne noreply at git.blender.org
Fri May 20 12:02:58 CEST 2022


Commit: a89f829f12f56214b0e463b33f24edf27228db1f
Author: Bastien Montagne
Date:   Fri May 20 11:59:39 2022 +0200
Branches: master
https://developer.blender.org/rBa89f829f12f56214b0e463b33f24edf27228db1f

LibOverride: Add option to Hierarchy Creation to get all data user-editable by default.

Avoids having to manually enable data-blocks for user-edition when you
do not care about what should be edited by whom. Similar to default
behavior before introduction of system overrides (aka non-user-editable
overrides).

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenkernel/BKE_lib_override.h
M	source/blender/blenkernel/intern/lib_override.c
M	source/blender/blenkernel/intern/lib_override_proxy_conversion.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/space_outliner/outliner_tools.cc
M	source/blender/makesrna/intern/rna_ID.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index bcc5976fb59..ffada687868 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2295,6 +2295,8 @@ class VIEW3D_MT_object_relations(Menu):
         layout = self.layout
 
         layout.operator("object.make_override_library", text="Make Library Override...")
+        layout.operator("object.make_override_library",
+                        text="Make Library Override - Fully Editable...").do_fully_editable=True
 
         layout.operator("object.make_dupli_face")
 
diff --git a/source/blender/blenkernel/BKE_lib_override.h b/source/blender/blenkernel/BKE_lib_override.h
index dfb2b900b10..38de4bebdbd 100644
--- a/source/blender/blenkernel/BKE_lib_override.h
+++ b/source/blender/blenkernel/BKE_lib_override.h
@@ -116,6 +116,8 @@ struct ID *BKE_lib_override_library_create_from_id(struct Main *bmain,
  * \param do_no_main: Create the new override data outside of Main database.
  * Used for resyncing of linked overrides.
  *
+ * \param do_fully_editable: if true, tag all created overrides as user-editable by default.
+ *
  * \return \a true on success, \a false otherwise.
  */
 bool BKE_lib_override_library_create_from_tag(struct Main *bmain,
@@ -123,7 +125,8 @@ bool BKE_lib_override_library_create_from_tag(struct Main *bmain,
                                               const struct ID *id_root_reference,
                                               struct ID *id_hierarchy_root,
                                               const struct ID *id_hierarchy_root_reference,
-                                              bool do_no_main);
+                                              bool do_no_main,
+                                              const bool do_fully_editable);
 /**
  * Advanced 'smart' function to create fully functional overrides.
  *
@@ -154,6 +157,8 @@ bool BKE_lib_override_library_create_from_tag(struct Main *bmain,
  *
  * \param r_id_root_override: if not NULL, the override generated for the given \a id_root.
  *
+ * \param do_fully_editable: if true, tag all created overrides as user-editable by default.
+ *
  * \return true if override was successfully created.
  */
 bool BKE_lib_override_library_create(struct Main *bmain,
@@ -163,7 +168,8 @@ bool BKE_lib_override_library_create(struct Main *bmain,
                                      struct ID *id_root_reference,
                                      struct ID *id_hierarchy_root_reference,
                                      struct ID *id_instance_hint,
-                                     struct ID **r_id_root_override);
+                                     struct ID **r_id_root_override,
+                                     const bool do_fully_editable);
 /**
  * Create a library override template.
  */
diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 6dd13952413..50c9514e810 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -398,7 +398,8 @@ bool BKE_lib_override_library_create_from_tag(Main *bmain,
                                               const ID *id_root_reference,
                                               ID *id_hierarchy_root,
                                               const ID *id_hierarchy_root_reference,
-                                              const bool do_no_main)
+                                              const bool do_no_main,
+                                              const bool do_fully_editable)
 {
   BLI_assert(id_root_reference != NULL && ID_IS_LINKED(id_root_reference));
   /* If we do not have any hierarchy root given, then the root reference must be tagged for
@@ -464,6 +465,9 @@ bool BKE_lib_override_library_create_from_tag(Main *bmain,
         success = false;
         break;
       }
+      if (do_fully_editable) {
+        reference_id->newid->override_library->flag &= ~IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED;
+      }
     }
     /* We also tag the new IDs so that in next step we can remap their pointers too. */
     reference_id->newid->tag |= LIB_TAG_DOIT;
@@ -993,7 +997,8 @@ static bool lib_override_library_create_do(Main *bmain,
                                            Scene *scene,
                                            Library *owner_library,
                                            ID *id_root_reference,
-                                           ID *id_hierarchy_root_reference)
+                                           ID *id_hierarchy_root_reference,
+                                           const bool do_fully_editable)
 {
   BKE_main_relations_create(bmain, 0);
   LibOverrideGroupTagData data = {.bmain = bmain,
@@ -1017,12 +1022,22 @@ static bool lib_override_library_create_do(Main *bmain,
     BLI_assert(ID_IS_OVERRIDE_LIBRARY_REAL(id_hierarchy_root_reference));
     BLI_assert(id_hierarchy_root_reference->override_library->reference->lib ==
                id_root_reference->lib);
-    success = BKE_lib_override_library_create_from_tag(
-        bmain, owner_library, id_root_reference, id_hierarchy_root_reference, NULL, false);
+    success = BKE_lib_override_library_create_from_tag(bmain,
+                                                       owner_library,
+                                                       id_root_reference,
+                                                       id_hierarchy_root_reference,
+                                                       NULL,
+                                                       false,
+                                                       do_fully_editable);
   }
   else {
-    success = BKE_lib_override_library_create_from_tag(
-        bmain, owner_library, id_root_reference, NULL, id_hierarchy_root_reference, false);
+    success = BKE_lib_override_library_create_from_tag(bmain,
+                                                       owner_library,
+                                                       id_root_reference,
+                                                       NULL,
+                                                       id_hierarchy_root_reference,
+                                                       false,
+                                                       do_fully_editable);
   }
 
   return success;
@@ -1180,7 +1195,8 @@ bool BKE_lib_override_library_create(Main *bmain,
                                      ID *id_root_reference,
                                      ID *id_hierarchy_root_reference,
                                      ID *id_instance_hint,
-                                     ID **r_id_root_override)
+                                     ID **r_id_root_override,
+                                     const bool do_fully_editable)
 {
   if (r_id_root_override != NULL) {
     *r_id_root_override = NULL;
@@ -1190,8 +1206,12 @@ bool BKE_lib_override_library_create(Main *bmain,
     id_hierarchy_root_reference = id_root_reference;
   }
 
-  const bool success = lib_override_library_create_do(
-      bmain, scene, owner_library, id_root_reference, id_hierarchy_root_reference);
+  const bool success = lib_override_library_create_do(bmain,
+                                                      scene,
+                                                      owner_library,
+                                                      id_root_reference,
+                                                      id_hierarchy_root_reference,
+                                                      do_fully_editable);
 
   if (!success) {
     return success;
@@ -1680,7 +1700,13 @@ static bool lib_override_library_resync(Main *bmain,
    * override IDs (including within the old overrides themselves, since those are tagged too
    * above). */
   const bool success = BKE_lib_override_library_create_from_tag(
-      bmain, NULL, id_root_reference, id_root->override_library->hierarchy_root, NULL, true);
+      bmain,
+      NULL,
+      id_root_reference,
+      id_root->override_library->hierarchy_root,
+      NULL,
+      true,
+      false);
 
   if (!success) {
     BLI_ghash_free(linkedref_to_old_override, NULL, NULL);
diff --git a/source/blender/blenkernel/intern/lib_override_proxy_conversion.c b/source/blender/blenkernel/intern/lib_override_proxy_conversion.c
index 5e9d8e8c4d0..3d4ccf5f426 100644
--- a/source/blender/blenkernel/intern/lib_override_proxy_conversion.c
+++ b/source/blender/blenkernel/intern/lib_override_proxy_conversion.c
@@ -82,7 +82,7 @@ bool BKE_lib_override_library_proxy_convert(Main *bmain,
   FOREACH_MAIN_ID_END;
 
   return BKE_lib_override_library_create(
-      bmain, scene, view_layer, ob_proxy->id.lib, id_root, id_root, id_instance_hint, NULL);
+      bmain, scene, view_layer, ob_proxy->id.lib, id_root, id_root, id_instance_hint, NULL, false);
 }
 
 static void lib_override_library_proxy_convert_do(Main *bmain,
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 4e6437e043a..cafc87e9c7f 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -742,7 +742,7 @@ static void template_id_liboverride_hierarchy_create(bContext *C,
           object_active->id.tag |= LIB_TAG_DOIT;
         }
         BKE_lib_override_library_create(
-            bmain, scene, view_layer, NULL, id, &collection_active->id, NULL, &id_override);
+            bmain, scene, view_layer, NULL, id, &collection_active->id, NULL, &id_override, false);
       }
       else if (object_active != NULL && !ID_IS_LINKED(object_active) &&
                &object_active->instance_collection->id == id) {
@@ -754,7 +754,8 @@ static void template_id_liboverride_hierarchy_create(bContext *C,
                                         id,
                                         &object_active->id,
                                         &object_active->id,
-                                        &id_override);
+                                        &id_override,
+       

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list