Fix not being able to apply or hide specific openings

This commit is contained in:
Gorgious56
2025-01-03 10:54:54 +01:00
parent 57dbea2974
commit 5b3e3fc646
+19 -10
View File
@@ -902,7 +902,7 @@ def hide_openings(context, objects):
if opening_obj: if opening_obj:
opening_element = tool.Ifc.get_entity(opening_obj) opening_element = tool.Ifc.get_entity(opening_obj)
if opening_element: if opening_element:
if not hasattr(opening_element, "VoidsElements"): if not opening_element.is_a("IfcOpeningElement"):
# This opening has been assigned to another ifc class. Remove it from the openings pool. See #3854 # This opening has been assigned to another ifc class. Remove it from the openings pool. See #3854
opening_prop.obj = None opening_prop.obj = None
continue continue
@@ -912,7 +912,7 @@ def hide_openings(context, objects):
if building_obj in objects: if building_obj in objects:
tool.Ifc.unlink(element=opening_element) tool.Ifc.unlink(element=opening_element)
bpy.data.objects.remove(opening_obj) bpy.data.objects.remove(opening_obj)
elif opening_obj in objects: # Hide openings that do not fill a BuildingElement if opening_obj in objects:
bpy.data.objects.remove(opening_obj) bpy.data.objects.remove(opening_obj)
tool.Model.clear_scene_openings() tool.Model.clear_scene_openings()
@@ -976,14 +976,23 @@ class EditOpenings(Operator, tool.Ifc.Operator):
building_objs.add(tool.Ifc.get_object(building_element)) building_objs.add(tool.Ifc.get_object(building_element))
else: else:
for obj in context.selected_objects: for obj in context.selected_objects:
building_element = tool.Ifc.get_entity(obj) element = tool.Ifc.get_entity(obj)
if not hasattr(building_element, "HasOpenings"): if element.is_a("IfcOpeningElement"):
continue opening_element = element
for relation in building_element.HasOpenings: opening_elements.add(opening_element)
opening_element = relation.RelatedOpeningElement if opening_element.VoidsElements:
if tool.Ifc.get_object(opening_element): building_element = opening_element.VoidsElements[0].RelatingBuildingElement
opening_elements.add(opening_element) building_obj = tool.Ifc.get_object(building_element)
building_objs.add(obj) if building_obj:
building_objs.add(building_obj)
elif hasattr(element, "HasOpenings"):
building_element = element
for relation in building_element.HasOpenings:
opening_element = relation.RelatedOpeningElement
if tool.Ifc.get_object(opening_element):
opening_elements.add(opening_element)
building_objs.add(obj)
return building_objs, opening_elements return building_objs, opening_elements
def edit_opening(self, building_objs, opening_element): def edit_opening(self, building_objs, opening_element):