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)",
|
description="Export only objects from the active collection (and its children)",
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
|
collection: StringProperty(
|
||||||
|
name="Source Collection",
|
||||||
|
description="Export only objects from this collection (and its children)",
|
||||||
|
default="",
|
||||||
|
)
|
||||||
global_scale: FloatProperty(
|
global_scale: FloatProperty(
|
||||||
name="Scale",
|
name="Scale",
|
||||||
description="Scale all data (Some importers do not support scaled armatures!)",
|
description="Scale all data (Some importers do not support scaled armatures!)",
|
||||||
@ -557,8 +562,11 @@ class ExportFBX(bpy.types.Operator, ExportHelper):
|
|||||||
layout.use_property_split = True
|
layout.use_property_split = True
|
||||||
layout.use_property_decorate = False # No animation.
|
layout.use_property_decorate = False # No animation.
|
||||||
|
|
||||||
export_main(layout, self)
|
# Are we inside the File browser
|
||||||
export_panel_include(layout, self)
|
is_file_browser = context.space_data.type == 'FILE_BROWSER'
|
||||||
|
|
||||||
|
export_main(layout, self, is_file_browser)
|
||||||
|
export_panel_include(layout, self, is_file_browser)
|
||||||
export_panel_transform(layout, self)
|
export_panel_transform(layout, self)
|
||||||
export_panel_geometry(layout, self)
|
export_panel_geometry(layout, self)
|
||||||
export_panel_armature(layout, self)
|
export_panel_armature(layout, self)
|
||||||
@ -589,24 +597,26 @@ class ExportFBX(bpy.types.Operator, ExportHelper):
|
|||||||
return export_fbx_bin.save(self, context, **keywords)
|
return export_fbx_bin.save(self, context, **keywords)
|
||||||
|
|
||||||
|
|
||||||
def export_main(layout, operator):
|
def export_main(layout, operator, is_file_browser):
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
row.prop(operator, "path_mode")
|
row.prop(operator, "path_mode")
|
||||||
sub = row.row(align=True)
|
sub = row.row(align=True)
|
||||||
sub.enabled = (operator.path_mode == 'COPY')
|
sub.enabled = (operator.path_mode == 'COPY')
|
||||||
sub.prop(operator, "embed_textures", text="", icon='PACKAGE' if operator.embed_textures else 'UGLYPACKAGE')
|
sub.prop(operator, "embed_textures", text="", icon='PACKAGE' if operator.embed_textures else 'UGLYPACKAGE')
|
||||||
|
if is_file_browser:
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
row.prop(operator, "batch_mode")
|
row.prop(operator, "batch_mode")
|
||||||
sub = row.row(align=True)
|
sub = row.row(align=True)
|
||||||
sub.prop(operator, "use_batch_own_dir", text="", icon='NEWFOLDER')
|
sub.prop(operator, "use_batch_own_dir", text="", icon='NEWFOLDER')
|
||||||
|
|
||||||
|
|
||||||
def export_panel_include(layout, operator):
|
def export_panel_include(layout, operator, is_file_browser):
|
||||||
header, body = layout.panel("FBX_export_include", default_closed=False)
|
header, body = layout.panel("FBX_export_include", default_closed=False)
|
||||||
header.label(text="Include")
|
header.label(text="Include")
|
||||||
if body:
|
if body:
|
||||||
sublayout = body.column(heading="Limit to")
|
sublayout = body.column(heading="Limit to")
|
||||||
sublayout.enabled = (operator.batch_mode == 'OFF')
|
sublayout.enabled = (operator.batch_mode == 'OFF')
|
||||||
|
if is_file_browser:
|
||||||
sublayout.prop(operator, "use_selection")
|
sublayout.prop(operator, "use_selection")
|
||||||
sublayout.prop(operator, "use_visible")
|
sublayout.prop(operator, "use_visible")
|
||||||
sublayout.prop(operator, "use_active_collection")
|
sublayout.prop(operator, "use_active_collection")
|
||||||
@ -681,6 +691,7 @@ class IO_FH_fbx(bpy.types.FileHandler):
|
|||||||
bl_idname = "IO_FH_fbx"
|
bl_idname = "IO_FH_fbx"
|
||||||
bl_label = "FBX"
|
bl_label = "FBX"
|
||||||
bl_import_operator = "import_scene.fbx"
|
bl_import_operator = "import_scene.fbx"
|
||||||
|
bl_export_operator = "export_scene.fbx"
|
||||||
bl_file_extensions = ".fbx"
|
bl_file_extensions = ".fbx"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -3586,6 +3586,7 @@ def save(operator, context,
|
|||||||
use_selection=False,
|
use_selection=False,
|
||||||
use_visible=False,
|
use_visible=False,
|
||||||
use_active_collection=False,
|
use_active_collection=False,
|
||||||
|
collection="",
|
||||||
batch_mode='OFF',
|
batch_mode='OFF',
|
||||||
use_batch_own_dir=False,
|
use_batch_own_dir=False,
|
||||||
**kwargs
|
**kwargs
|
||||||
@ -3606,13 +3607,23 @@ def save(operator, context,
|
|||||||
|
|
||||||
if batch_mode == 'OFF':
|
if batch_mode == 'OFF':
|
||||||
kwargs_mod = kwargs.copy()
|
kwargs_mod = kwargs.copy()
|
||||||
|
|
||||||
|
source_collection = None
|
||||||
if use_active_collection:
|
if use_active_collection:
|
||||||
if use_selection:
|
source_collection = context.view_layer.active_layer_collection.collection
|
||||||
ctx_objects = tuple(obj
|
elif collection:
|
||||||
for obj in context.view_layer.active_layer_collection.collection.all_objects
|
local_collection = bpy.data.collections.get((collection, None))
|
||||||
if obj.select_get())
|
if local_collection:
|
||||||
|
source_collection = local_collection
|
||||||
else:
|
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:
|
else:
|
||||||
if use_selection:
|
if use_selection:
|
||||||
ctx_objects = context.selected_objects
|
ctx_objects = context.selected_objects
|
||||||
|
Loading…
Reference in New Issue
Block a user