FBX: Enable the Collection exporter feature #105273
@ -315,6 +315,11 @@ class ExportFBX(bpy.types.Operator, ExportHelper):
|
||||
description="Export only objects from the active collection (and its children)",
|
||||
default=False,
|
||||
)
|
||||
collection: StringProperty(
|
||||
name="Source Collection",
|
||||
description="Export only objects from this collection (and its children)",
|
||||
default="",
|
||||
)
|
||||
global_scale: FloatProperty(
|
||||
name="Scale",
|
||||
description="Scale all data (Some importers do not support scaled armatures!)",
|
||||
@ -681,6 +686,7 @@ class IO_FH_fbx(bpy.types.FileHandler):
|
||||
bl_idname = "IO_FH_fbx"
|
||||
bl_label = "FBX"
|
||||
bl_import_operator = "import_scene.fbx"
|
||||
bl_export_operator = "export_scene.fbx"
|
||||
bl_file_extensions = ".fbx"
|
||||
|
||||
@classmethod
|
||||
|
@ -3586,6 +3586,7 @@ def save(operator, context,
|
||||
use_selection=False,
|
||||
use_visible=False,
|
||||
use_active_collection=False,
|
||||
collection="",
|
||||
batch_mode='OFF',
|
||||
use_batch_own_dir=False,
|
||||
**kwargs
|
||||
@ -3606,13 +3607,22 @@ def save(operator, context,
|
||||
|
||||
if batch_mode == 'OFF':
|
||||
kwargs_mod = kwargs.copy()
|
||||
|
||||
source_collection = None
|
||||
if use_active_collection:
|
||||
if use_selection:
|
||||
ctx_objects = tuple(obj
|
||||
for obj in context.view_layer.active_layer_collection.collection.all_objects
|
||||
if obj.select_get())
|
||||
source_collection = context.view_layer.active_layer_collection.collection
|
||||
elif collection:
|
||||
if collection in bpy.data.collections:
|
||||
source_collection = bpy.data.collections[collection]
|
||||
|
||||
else:
|
||||
ctx_objects = context.view_layer.active_layer_collection.collection.all_objects
|
||||
operator.report({'ERROR'}, "Collection %s was not found" % collection)
|
||||
return {'CANCELLED'}
|
||||
|
||||
if source_collection:
|
||||
if use_selection:
|
||||
ctx_objects = tuple(obj for obj in source_collection.all_objects if obj.select_get())
|
||||
else:
|
||||
ctx_objects = source_collection.all_objects
|
||||
else:
|
||||
if use_selection:
|
||||
ctx_objects = context.selected_objects
|
||||
|
Loading…
Reference in New Issue
Block a user
Might want to consider whether performing a Collection export from a Collection linked from another file should be supported because a linked Collection can have the same name as a Collection local to the current file (or presumably another Collection linked from another different file).
Currently, exporting from a linked Collection appears to work, but doesn't seem too useful because the Collection's children, export settings and export file path cannot be changed due to being linked from another file.
I don't know if there is a guarantee that
bpy.data.collections[collection]
will always return a Collection from the current file in preference to a linked Collection with the same name, but it seems like that might be the case from a quick test using the Python Console. So, exporting from a linked Collection with the same name as a local Collection would export the local Collection instead.If exporting from a linked Collection should not be supported,
bpy.data.collections[(collection, None)]
can be used to only get a Collection local to the current file.Otherwise, to get specific Collections, which could have the same name, linked from different libraries would require
bpy.data.collections[(collection, library_filepath)]
wherelibrary_filepath
is the value ofmy_collection.library.filepath
orNone
(whenmy_collection.library is None
due to the Collection being local to the current file).I don't know enough about how library linked data-blocks are used and supported by different parts of Blender to say if any changes are needed here.
Hmm, how did you arrive in this state? If you link in a Collection from foo.blend which has an exporter set you shouldn't see anything in the UI as it's not intended to be exportable in the current file. Are you seeing otherwise?
I'll make the change to use the
None
argument to make it more explicit.