mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 09:15:21 +00:00
Update export_ifc.py
This commit is contained in:
@@ -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,13 +1623,14 @@ 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):
|
||||||
@@ -1634,8 +1638,8 @@ class IfcExporter():
|
|||||||
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):
|
||||||
|
|||||||
Reference in New Issue
Block a user