diff --git a/src/bonsai/bonsai/core/root.py b/src/bonsai/bonsai/core/root.py index 4fc6806194..f124951d53 100644 --- a/src/bonsai/bonsai/core/root.py +++ b/src/bonsai/bonsai/core/root.py @@ -50,6 +50,7 @@ def copy_class( geometry.change_object_data(obj, data, is_global=True) geometry.rename_object(data, geometry.get_representation_name(new_representation)) geometry.link(new_representation, data) + geometry.reload_representation_item_ids(new_representation, data) root.assign_body_styles(new, obj) collector.assign(obj) if root.is_element_a(new, "IfcOpeningElement"): diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 4b3f3f7fe7..d984c65dd6 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -391,6 +391,8 @@ class Geometry: def does_representation_id_exist(cls, representation_id): pass def duplicate_object_data(cls, obj): pass def get_cartesian_point_offset(cls, obj): pass + def delete_opening_object_placement(cls, opening): pass + def get_blender_offset_type(cls, obj): pass def get_element_type(cls, element): pass def get_elements_of_type(cls, type): pass def get_ifc_representation_class(cls, element, representation): pass @@ -403,6 +405,7 @@ class Geometry: def get_styles(cls, obj): pass def get_total_representation_items(cls, obj): pass def has_data_users(cls, data): pass + def has_material_style_override(cls, obj): pass def import_representation(cls, obj, representation, apply_openings=True): pass def import_representation_parameters(cls, data): pass def is_body_representation(cls, representation): pass @@ -414,9 +417,10 @@ class Geometry: def link(cls, element, obj): pass def record_object_materials(cls, obj): pass def record_object_position(cls, obj): pass + def recreate_object_with_data(cls, obj, data): pass + def reload_representation_item_ids(cls, representation, data) -> None: pass def remove_connection(cls, connection): pass def rename_object(cls, obj, name): pass - def recreate_object_with_data(cls, obj, data): pass def replace_object_data_globally(cls, old_data, new_data): pass def resolve_mapped_representation(cls, representation): pass def run_geometry_update_representation(cls, obj=None): pass @@ -425,13 +429,10 @@ class Geometry: def should_force_faceted_brep(cls): pass def should_force_triangulation(cls): pass def should_generate_uvs(cls, obj): pass - def should_use_presentation_style_assignment(cls): pass - def unresolve_type_representation(cls, representation, element): pass - def delete_opening_object_placement(cls, opening): pass - def switch_from_representation(cls, obj, representation): pass - def get_blender_offset_type(cls, obj): pass - def has_material_style_override(cls, obj): pass def should_use_immediate_representation(cls, entity, apply_openings): pass + def should_use_presentation_style_assignment(cls): pass + def switch_from_representation(cls, obj, representation): pass + def unresolve_type_representation(cls, representation, element): pass @interface diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 3630895c43..415eb920dd 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1585,3 +1585,7 @@ class Geometry(bonsai.core.tool.Geometry): bpy.data.objects.remove(obj) return results + + @classmethod + def reload_representation_item_ids(cls, representation: ifcopenshell.entity_instance, data: bpy.types.Mesh) -> None: + data["ios_item_ids"] = [i["item"].id() for i in ifcopenshell.util.representation.resolve_items(representation)]