mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 13:46:54 +00:00
Fix not being able to apply or hide specific openings
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user