We got together to assess the current status of library overrides, and identify what can be improved when it comes to usability, before we start with the “cherry-picked” properties project.
There are three places a user can create an override from:
Viewport
Properties Editor
Outliner
For the user the result is supposed to be the same. In some rare cases where the context leads to ambiguity (e.g., an object is linked into multiple collections), the operation should fail.
There is one main “operator” (currently named “Make Override Hierarchy”). At the moment there is another one (Make Library Override - Fully Editable), which will be removed once we have the “cherry-pick” options.
Outliner:
Outliner Hierarchies revert order.
Follow the “View Layer” hierarchy (collection > objects > children).
Use warning for actual warnings
Right now the “re-sync for better performance” should be an Info instead.
Remove “Single” options
Double-check with Andy Goralczyk.
Fix System Overrides filter check (e.g., for Project Heist).
Fix “double-click” on Outliner Properties throwing an error.
Other topics:
Consider to have only " Make Library Override Hierarchy Full Editable"
Check with Andy, the idea is to do this even before we have the cherry-pick implemented.
Fix: Make Library override from data-block widget in the properties editor.
Replace the collection by the overridden collection.
Instance Collection disable by default.
Check with Andy Goralczyk (he advocated for the current option in one of his early feedback sessions).
“Make Instance Face” should be removed or documented.
Hello all, I don’t think we’ve met before. This thread is my cuppa tea especially as I’m attempting to add characters via python in 3.2. I’ve had some experience setting up pipelines before and replying so I can track this conversation. Excited to see this part of blender getting thought through so well.
anyway, the error that brought me here:
bpy.ops.outliner.id_operation(override, type='OVERRIDE_LIBRARY_CREATE_HIERARCHY')
File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\modules\bpy\ops.py", line 113, in __call__
ret = _op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
TypeError: Converting py args to operator properties: enum "OVERRIDE_LIBRARY_CREATE_HIERARCHY" not found in ('UNLINK', 'LOCAL', 'SINGLE', 'DELETE', 'REMAP', 'COPY', 'PASTE', 'ADD_FAKE', 'CLEAR_FAKE', 'RENAME', 'SELECT_LINKED')
Those enum entries are enabled/disabled at runtime, depending on the data in the context… So i’d suspect here that your active outliner entry is not a linked one?
Also note that making an override completely ‘trash’ the Outliner tree and rebuilds it, so don’t think your second operator call would work.
Hey, thanks for the response. I think I understand. Doing it directly with types is far fewer shennanigans. Here’s my working code in case anyone is looking for how to how to add a linked collection with armatures and editable overrides (i.e. linked characters).
new_coll.override_hierarchy_create(scene=scene, view_layer=view_layer)
active_collection = bpy.context.view_layer.active_layer_collection.collection
for lobj in active_collection.all_objects:
if lobj.type == 'ARMATURE':
lobj_name = lobj.name
bpy.data.objects[lobj_name].override_library.is_system_override = False
# remove the original collection
# since creating the collection override hieratchy will create a duplicate instance.
# the linked data will still have a user so nothing will be lost. not necessary just feels cleaner.
try:
bpy.data.collections.remove(new_coll)
except:
pass