diff --git a/io_scene_3ds/__init__.py b/io_scene_3ds/__init__.py index 61ee5a3da..2e7f4102c 100644 --- a/io_scene_3ds/__init__.py +++ b/io_scene_3ds/__init__.py @@ -107,6 +107,12 @@ class Import3DS(bpy.types.Operator, ImportHelper): description="Read the 3D cursor location", default=False, ) + use_collection: BoolProperty( + name="Collection", + description="Create a new collection", + default=False, + ) + def execute(self, context): from . import import_3ds @@ -166,6 +172,9 @@ class MAX3DS_PT_import_include(bpy.types.Panel): layrow.prop(operator, "use_keyframes") layrow.label(text="", icon='ANIM' if operator.use_keyframes else 'DECORATE_DRIVER') layrow = layout.row(align=True) + layrow.prop(operator, "use_collection") + layrow.label(text="", icon='OUTLINER_COLLECTION' if operator.use_collection else 'GROUP') + layrow = layout.row(align=True) layrow.prop(operator, "use_cursor") layrow.label(text="", icon='PIVOT_CURSOR' if operator.use_cursor else 'CURSOR') diff --git a/io_scene_3ds/import_3ds.py b/io_scene_3ds/import_3ds.py index fbbd1dead..a4073c138 100644 --- a/io_scene_3ds/import_3ds.py +++ b/io_scene_3ds/import_3ds.py @@ -10,6 +10,7 @@ import struct import mathutils from bpy_extras.image_utils import load_image from bpy_extras.node_shader_utils import PrincipledBSDFWrapper +from pathlib import Path BOUNDS_3DS = [] @@ -1772,11 +1773,23 @@ def load_3ds(filepath, context, CONSTRAIN=10.0, UNITS=False, IMAGE_SEARCH=True, def load(operator, context, files=None, directory="", filepath="", constrain_size=0.0, use_scene_unit=False, use_image_search=True, object_filter=None, use_world_matrix=False, use_keyframes=True, - use_apply_transform=True, global_matrix=None, use_cursor=False, use_center_pivot=False): + use_apply_transform=True, global_matrix=None, use_cursor=False, use_center_pivot=False, use_collection=False): - for f in files: - load_3ds(os.path.join(directory, f.name), context, CONSTRAIN=constrain_size, UNITS=use_scene_unit, + # Get the active collection + collection_init = bpy.context.view_layer.active_layer_collection.collection + + # Load each selected file + for file in files: + # Create new collections if activated (collection name = 3ds file name) + if use_collection: + collection = bpy.data.collections.new(Path(file.name).stem) + bpy.context.scene.collection.children.link(collection) + bpy.context.view_layer.active_layer_collection = bpy.context.view_layer.layer_collection.children[collection.name] + load_3ds(Path(directory, file.name), context, CONSTRAIN=constrain_size, UNITS=use_scene_unit, IMAGE_SEARCH=use_image_search, FILTER=object_filter, WORLD_MATRIX=use_world_matrix, KEYFRAME=use_keyframes, APPLY_MATRIX=use_apply_transform, CONVERSE=global_matrix, CURSOR=use_cursor, PIVOT=use_center_pivot,) + # Retrive the initial collection as active + bpy.context.view_layer.active_layer_collection = bpy.context.view_layer.layer_collection.children[collection_init.name] + return {'FINISHED'}