mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 13:43:40 +00:00
Small refactor clone opening operator in order to better understand and reuse it rebase
This commit is contained in:
@@ -762,8 +762,6 @@ class EditOpenings(Operator, tool.Ifc.Operator):
|
|||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
props = bpy.context.scene.BIMModelProperties
|
props = bpy.context.scene.BIMModelProperties
|
||||||
building_objs = set()
|
building_objs = set()
|
||||||
model = tool.Ifc.get()
|
|
||||||
all_openings = model.by_type("IfcOpeningElement")
|
|
||||||
|
|
||||||
for obj in context.selected_objects:
|
for obj in context.selected_objects:
|
||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
@@ -774,9 +772,13 @@ class EditOpenings(Operator, tool.Ifc.Operator):
|
|||||||
obj = tool.Ifc.get_object(element)
|
obj = tool.Ifc.get_object(element)
|
||||||
openings = [r.RelatedOpeningElement for r in element.HasOpenings]
|
openings = [r.RelatedOpeningElement for r in element.HasOpenings]
|
||||||
for opening in openings:
|
for opening in openings:
|
||||||
similar_openings = [o for o in all_openings if o.ObjectPlacement == opening.ObjectPlacement]
|
|
||||||
opening_obj = tool.Ifc.get_object(opening)
|
opening_obj = tool.Ifc.get_object(opening)
|
||||||
building_objs.add(obj)
|
building_objs.add(obj)
|
||||||
|
|
||||||
|
similar_openings = blenderbim.core.geometry.get_similar_openings(tool.Ifc, opening)
|
||||||
|
similar_openings_building_objs = blenderbim.core.geometry.get_similar_openings_building_objs(tool.Ifc, similar_openings)
|
||||||
|
building_objs.update(similar_openings_building_objs)
|
||||||
|
|
||||||
if opening_obj:
|
if opening_obj:
|
||||||
if tool.Ifc.is_edited(opening_obj):
|
if tool.Ifc.is_edited(opening_obj):
|
||||||
tool.Geometry.run_geometry_update_representation(obj=opening_obj)
|
tool.Geometry.run_geometry_update_representation(obj=opening_obj)
|
||||||
@@ -784,13 +786,11 @@ class EditOpenings(Operator, tool.Ifc.Operator):
|
|||||||
blenderbim.core.geometry.edit_object_placement(
|
blenderbim.core.geometry.edit_object_placement(
|
||||||
tool.Ifc, tool.Geometry, tool.Surveyor, obj=opening_obj
|
tool.Ifc, tool.Geometry, tool.Surveyor, obj=opening_obj
|
||||||
)
|
)
|
||||||
for similar_opening in similar_openings:
|
|
||||||
similar_opening.ObjectPlacement = opening.ObjectPlacement
|
|
||||||
element = similar_opening.VoidsElements[0].RelatingBuildingElement
|
|
||||||
obj = tool.Ifc.get_object(element)
|
|
||||||
building_objs.add(obj)
|
|
||||||
|
|
||||||
building_objs.update(self.get_all_building_objects_of_similar_openings(opening))
|
blenderbim.core.geometry.edit_similar_opening_placement(opening, similar_openings)
|
||||||
|
#TODO delete also the old placement
|
||||||
|
|
||||||
|
building_objs.update(self.get_all_building_objects_of_similar_openings(opening)) #NB this has nothing to do with clone similar_opening
|
||||||
tool.Ifc.unlink(element=opening, obj=opening_obj)
|
tool.Ifc.unlink(element=opening, obj=opening_obj)
|
||||||
bpy.data.objects.remove(opening_obj)
|
bpy.data.objects.remove(opening_obj)
|
||||||
|
|
||||||
|
|||||||
@@ -191,3 +191,23 @@ def select_connection(geometry, connection=None):
|
|||||||
|
|
||||||
def remove_connection(geometry, connection=None):
|
def remove_connection(geometry, connection=None):
|
||||||
geometry.remove_connection(connection)
|
geometry.remove_connection(connection)
|
||||||
|
|
||||||
|
def get_similar_openings(ifc, opening):
|
||||||
|
model = ifc.get()
|
||||||
|
all_openings = model.by_type("IfcOpeningElement")
|
||||||
|
similar_openings = [o for o in all_openings if o.ObjectPlacement == opening.ObjectPlacement and o != opening]
|
||||||
|
return similar_openings
|
||||||
|
|
||||||
|
def get_similar_openings_building_objs(ifc, similar_openings):
|
||||||
|
building_objs = []
|
||||||
|
for similar_opening in similar_openings:
|
||||||
|
building_objs.append(ifc.get_object(similar_opening.VoidsElements[0].RelatingBuildingElement))
|
||||||
|
return building_objs
|
||||||
|
|
||||||
|
def edit_similar_opening_placement(opening = None, similar_openings = None):
|
||||||
|
if not opening or not similar_openings:
|
||||||
|
return
|
||||||
|
for similar_opening in similar_openings:
|
||||||
|
similar_opening.ObjectPlacement = opening.ObjectPlacement
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user