IO: Option to import each 3DS file on a new collection #105232

Merged
Sebastian Sille merged 6 commits from :roblop-patch-new-collection into main 2024-03-13 13:34:08 +01:00
2 changed files with 25 additions and 3 deletions

View File

@ -107,6 +107,12 @@ class Import3DS(bpy.types.Operator, ImportHelper):
description="Read the 3D cursor location", description="Read the 3D cursor location",
default=False, default=False,
) )
use_collection: BoolProperty(
name="Collection",
description="Create a new collection",
default=False,
)
def execute(self, context): def execute(self, context):
from . import import_3ds from . import import_3ds
@ -166,6 +172,9 @@ class MAX3DS_PT_import_include(bpy.types.Panel):
layrow.prop(operator, "use_keyframes") layrow.prop(operator, "use_keyframes")
layrow.label(text="", icon='ANIM' if operator.use_keyframes else 'DECORATE_DRIVER') layrow.label(text="", icon='ANIM' if operator.use_keyframes else 'DECORATE_DRIVER')
layrow = layout.row(align=True) 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.prop(operator, "use_cursor")
layrow.label(text="", icon='PIVOT_CURSOR' if operator.use_cursor else 'CURSOR') layrow.label(text="", icon='PIVOT_CURSOR' if operator.use_cursor else 'CURSOR')

View File

@ -10,6 +10,7 @@ import struct
import mathutils import mathutils
from bpy_extras.image_utils import load_image from bpy_extras.image_utils import load_image
from bpy_extras.node_shader_utils import PrincipledBSDFWrapper from bpy_extras.node_shader_utils import PrincipledBSDFWrapper
from pathlib import Path
BOUNDS_3DS = [] 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, 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_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: # Get the active collection
load_3ds(os.path.join(directory, f.name), context, CONSTRAIN=constrain_size, UNITS=use_scene_unit, 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)
NRGSille marked this conversation as resolved
Review

found a little error in line 1784 (below) must be replaced with if use_collection:

found a little error in line 1784 (below) must be replaced with `if use_collection:`
Review

Yes, I forgot this fix.

Yes, I forgot this fix.
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, 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,) 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'} return {'FINISHED'}