Skip to content

Commit

Permalink
fix(loader): Preserves collection hierarchies when importing them fro…
Browse files Browse the repository at this point in the history
…m blend file
  • Loading branch information
cornerfarmer committed Sep 27, 2024
1 parent ee197a9 commit 94b35bf
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions blenderproc/python/loader/BlendLoader.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ def load_blend(path: str, obj_types: Optional[Union[List[str], str]] = None, nam
for obj in getattr(data_to, data_block):
# Check that the object type is desired
if obj.type.lower() in obj_types:
# Link objects to the scene
bpy.context.collection.objects.link(obj)
# If object does not yet belong to a imported collection
if len(obj.users_collection) == 0:
# Link objects to the scene collection
bpy.context.collection.objects.link(obj)
loaded_objects.append(convert_to_entity_subclass(obj))

# If a camera was imported
Expand All @@ -89,6 +91,17 @@ def load_blend(path: str, obj_types: Optional[Union[List[str], str]] = None, nam
# Remove object again if its type is not desired
bpy.data.objects.remove(obj, do_unlink=True)
print("Selected " + str(len(loaded_objects)) + " of the loaded objects by type")
elif data_block == "collections":
# Build up mapping of possible parent-child collection relationships
collection_parents = {}
for collection in getattr(data_to, data_block):
for child in collection.children:
collection_parents[child.name] = collection

# Add all collections to scene collection which do not yet belong to any other collection
for collection in getattr(data_to, data_block):
if collection.name not in collection_parents:
bpy.context.collection.children.link(collection)
else:
loaded_objects.extend(getattr(data_to, data_block))

Expand Down

0 comments on commit 94b35bf

Please sign in to comment.