mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-11 02:02:22 +00:00
Add support for projection elements
This commit is contained in:
@@ -114,6 +114,7 @@ class IfcParser():
|
||||
self.rel_aggregates = {}
|
||||
self.rel_voids_elements = {}
|
||||
self.rel_fills_elements = {}
|
||||
self.rel_projects_elements = {}
|
||||
self.rel_connects_structural_member = {}
|
||||
self.rel_assigns_to_group = {}
|
||||
self.representations = {}
|
||||
@@ -318,18 +319,20 @@ class IfcParser():
|
||||
|
||||
def resolve_voids_and_fills(self, i, obj):
|
||||
for m in obj.modifiers:
|
||||
if m.type == 'BOOLEAN' and m.object is not None:
|
||||
void = self.get_product_index_from_raw_name(m.object.name)
|
||||
if void is not None:
|
||||
if i not in self.rel_voids_elements:
|
||||
self.rel_voids_elements[i] = []
|
||||
self.rel_voids_elements[i].append(void)
|
||||
if m.object.parent:
|
||||
fill = self.get_product_index_from_raw_name(m.object.parent.name)
|
||||
if fill is not None:
|
||||
if void not in self.rel_fills_elements:
|
||||
self.rel_fills_elements[void] = []
|
||||
self.rel_fills_elements[void].append(fill)
|
||||
if m.type != 'BOOLEAN' or m.object is None:
|
||||
continue
|
||||
void_or_projection = self.get_product_index_from_raw_name(m.object.name)
|
||||
if void_or_projection is None:
|
||||
continue
|
||||
if m.operation == 'DIFFERENCE':
|
||||
self.rel_voids_elements.setdefault(i, []).append(void_or_projection)
|
||||
if not m.object.parent:
|
||||
continue
|
||||
fill = self.get_product_index_from_raw_name(m.object.parent.name)
|
||||
if fill:
|
||||
self.rel_fills_elements.setdefault(void_or_projection, []).append(fill)
|
||||
elif m.operation == 'UNION':
|
||||
self.rel_projects_elements.setdefault(i, []).append(void_or_projection)
|
||||
|
||||
def get_axis(self, matrix, axis):
|
||||
return matrix.col[axis].to_3d().normalized()
|
||||
@@ -1081,6 +1084,7 @@ class IfcExporter():
|
||||
self.relate_objects_to_psets()
|
||||
self.relate_objects_to_opening_elements()
|
||||
self.relate_opening_elements_to_fillings()
|
||||
self.relate_objects_to_projection_elements()
|
||||
self.relate_objects_to_materials()
|
||||
for set_type in ['constituent', 'layer', 'profile']:
|
||||
self.relate_objects_to_material_sets(set_type)
|
||||
@@ -2196,6 +2200,15 @@ class IfcExporter():
|
||||
self.ifc_parser.products[related_building_element]['ifc']
|
||||
)
|
||||
|
||||
def relate_objects_to_projection_elements(self):
|
||||
for relating_building_element, related_projection_elements in self.ifc_parser.rel_projects_elements.items():
|
||||
for related_projection_element in related_projection_elements:
|
||||
self.file.createIfcRelProjectsElement(
|
||||
ifcopenshell.guid.new(), self.owner_history, None, None,
|
||||
self.ifc_parser.products[relating_building_element]['ifc'],
|
||||
self.ifc_parser.products[related_projection_element]['ifc']
|
||||
)
|
||||
|
||||
def relate_elements_to_spatial_structures(self):
|
||||
for relating_structure, related_elements in self.ifc_parser.rel_contained_in_spatial_structure.items():
|
||||
self.file.createIfcRelContainedInSpatialStructure(
|
||||
|
||||
Reference in New Issue
Block a user