Update export_ifc.py

This commit is contained in:
s-leger
2019-11-17 13:12:22 +01:00
committed by GitHub
parent 9e4092a050
commit a6128f118a
+23 -19
View File
@@ -161,6 +161,7 @@ class IfcParser():
self.window_attributes = self.get_window_attributes() self.window_attributes = self.get_window_attributes()
self.type_products = self.get_type_products() self.type_products = self.get_type_products()
self.get_products() self.get_products()
self.resolve_boolean_modifiers()
self.map_conversion = self.get_map_conversion() self.map_conversion = self.get_map_conversion()
self.target_crs = self.get_target_crs() self.target_crs = self.get_target_crs()
self.spatial_structure_elements_tree = self.get_spatial_structure_elements_tree( self.spatial_structure_elements_tree = self.get_spatial_structure_elements_tree(
@@ -214,7 +215,6 @@ class IfcParser():
object = product['raw'] object = product['raw']
self.add_product(self.get_product(product)) self.add_product(self.get_product(product))
self.resolve_array_modifier(product) self.resolve_array_modifier(product)
self.resolve_boolean_modifier(product)
def resolve_array_modifier(self, product): def resolve_array_modifier(self, product):
object = product['raw'] object = product['raw']
@@ -230,19 +230,22 @@ class IfcParser():
created_instances.append((o[0], location)) created_instances.append((o[0], location))
instance_objects.extend(created_instances) instance_objects.extend(created_instances)
def resolve_boolean_modifier(self, product): def resolve_boolean_modifiers(self):
obj = product['raw'] for product in self.products:
for m in obj.modifiers: obj = product['raw']
if m.type == 'BOOLEAN' and m.object is not None: for m in obj.modifiers:
void = m.object if m.type == 'BOOLEAN' and m.object is not None:
if obj not in self.rel_voids_elements: void = self.get_product_from_raw_name(m.object.name)
self.rel_voids_elements[obj] = [] if void is not None:
self.rel_voids_elements[obj].append(void) if product['ifc'] not in self.rel_voids_elements:
fill = void.parent self.rel_voids_elements[product['ifc']] = []
if fill: self.rel_voids_elements[product['ifc']].append(void['ifc'])
if void not in self.rel_fills_elements: if m.object.parent:
self.rel_fills_elements[void] = [] fill = self.get_product_from_raw_name(m.object.parent.name)
self.rel_fills_elements[void].append(fill) if fill is not None:
if void['ifc'] not in self.rel_fills_elements:
self.rel_fills_elements[void['ifc']] = []
self.rel_fills_elements[void['ifc']].append(fill['ifc'])
def get_parametric_global_id(self, object, index): def get_parametric_global_id(self, object, index):
global_ids = object.BIMObjectProperties.global_ids global_ids = object.BIMObjectProperties.global_ids
@@ -1620,22 +1623,23 @@ class IfcExporter():
z = self.convert_si_to_unit(z) z = self.convert_si_to_unit(z)
return self.file.createIfcCartesianPoint((x, y, z)) return self.file.createIfcCartesianPoint((x, y, z))
def relate_voids_elements(self): def relate_voids_elements(self):
for relate_object, related_voids in self.ifc_parser.rel_voids_elements.items(): for relate_object, related_voids in self.ifc_parser.rel_voids_elements.items():
for related_void in related_voids: for related_void in related_voids:
self.file.createIfcRelVoidsElement( self.file.createIfcRelVoidsElement(
ifcopenshell.guid.new(), self.owner_history, None, None, ifcopenshell.guid.new(), self.owner_history, None, None,
self.ifc_parser.get_product_from_raw_name(relate_object.name)['ifc'], relate_object,
self.ifc_parser.get_product_from_raw_name(related_void.name)['ifc'] related_void
) )
def relate_fills_elements(self): def relate_fills_elements(self):
for relate_object, related_fills in self.ifc_parser.rel_fills_elements.items(): for relate_object, related_fills in self.ifc_parser.rel_fills_elements.items():
for related_fill in related_fills: for related_fill in related_fills:
self.file.createIfcRelFillsElement( self.file.createIfcRelFillsElement(
ifcopenshell.guid.new(), self.owner_history, None, None, ifcopenshell.guid.new(), self.owner_history, None, None,
self.ifc_parser.get_product_from_raw_name(relate_object.name)['ifc'], relate_object,
self.ifc_parser.get_product_from_raw_name(related_fill.name)['ifc'] related_fill
) )
def relate_elements_to_spatial_structures(self): def relate_elements_to_spatial_structures(self):