mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 22:33:33 +00:00
Prevent unnecessary duplicate creation of the same representation
This commit is contained in:
@@ -85,7 +85,7 @@ class IfcParser():
|
|||||||
self.rel_defines_by_type = {}
|
self.rel_defines_by_type = {}
|
||||||
self.rel_defines_by_qto = {}
|
self.rel_defines_by_qto = {}
|
||||||
self.rel_aggregates = {}
|
self.rel_aggregates = {}
|
||||||
self.representations = []
|
self.representations = {}
|
||||||
self.type_products = []
|
self.type_products = []
|
||||||
self.project = {}
|
self.project = {}
|
||||||
self.libraries = []
|
self.libraries = []
|
||||||
@@ -99,11 +99,11 @@ class IfcParser():
|
|||||||
self.spatial_structure_elements = self.get_spatial_structure_elements()
|
self.spatial_structure_elements = self.get_spatial_structure_elements()
|
||||||
|
|
||||||
self.collection_name_filter = []
|
self.collection_name_filter = []
|
||||||
self.get_products()
|
|
||||||
|
|
||||||
self.project = self.get_project()
|
self.project = self.get_project()
|
||||||
self.libraries = self.get_libraries()
|
self.libraries = self.get_libraries()
|
||||||
self.type_products = self.get_type_products()
|
self.type_products = self.get_type_products()
|
||||||
|
self.get_products()
|
||||||
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(
|
||||||
@@ -150,7 +150,7 @@ class IfcParser():
|
|||||||
'class': self.get_ifc_class(object.name),
|
'class': self.get_ifc_class(object.name),
|
||||||
'relating_structure': None,
|
'relating_structure': None,
|
||||||
'relating_qtos_key': None,
|
'relating_qtos_key': None,
|
||||||
'representation': self.get_representation_reference_from_object(object),
|
'representation': self.get_object_representation_name(object),
|
||||||
'attributes': self.get_object_attributes(object)
|
'attributes': self.get_object_attributes(object)
|
||||||
}
|
}
|
||||||
product['attributes'].update(attribute_override)
|
product['attributes'].update(attribute_override)
|
||||||
@@ -304,19 +304,20 @@ class IfcParser():
|
|||||||
return elements
|
return elements
|
||||||
|
|
||||||
def get_representations(self):
|
def get_representations(self):
|
||||||
results = []
|
results = {}
|
||||||
if not self.ifc_export_settings.has_representations:
|
if not self.ifc_export_settings.has_representations:
|
||||||
return results
|
return results
|
||||||
for product in self.selected_products + self.type_products:
|
for product in self.selected_products + self.type_products:
|
||||||
object = product['raw']
|
object = product['raw']
|
||||||
if not object.data:
|
if not object.data \
|
||||||
|
or object.data.name in results:
|
||||||
continue
|
continue
|
||||||
results.append({
|
results[object.data.name] = {
|
||||||
'ifc': None,
|
'ifc': None,
|
||||||
'raw': object.data,
|
'raw': object.data,
|
||||||
'is_wireframe': True if 'IsWireframe' in object.data else False,
|
'is_wireframe': True if 'IsWireframe' in object.data else False,
|
||||||
'attributes': { 'Name': object.data.name }
|
'attributes': { 'Name': object.data.name }
|
||||||
})
|
}
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_qtos(self):
|
def get_qtos(self):
|
||||||
@@ -355,21 +356,17 @@ class IfcParser():
|
|||||||
'up_axis': object.matrix_world.to_quaternion() @ Vector((0, 0, 1)),
|
'up_axis': object.matrix_world.to_quaternion() @ Vector((0, 0, 1)),
|
||||||
'forward_axis': object.matrix_world.to_quaternion() @ Vector((1, 0, 0)),
|
'forward_axis': object.matrix_world.to_quaternion() @ Vector((1, 0, 0)),
|
||||||
'class': self.get_ifc_class(object.name),
|
'class': self.get_ifc_class(object.name),
|
||||||
'representation': self.get_representation_reference_from_object(object),
|
'representation': self.get_object_representation_name(object),
|
||||||
'attributes': self.get_object_attributes(object)
|
'attributes': self.get_object_attributes(object)
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('The type product "{}" could not be parsed: {}'.format(object.name, e.args))
|
print('The type product "{}" could not be parsed: {}'.format(object.name, e.args))
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_representation_reference_from_object(self, object):
|
def get_object_representation_name(self, object):
|
||||||
if not self.ifc_export_settings.has_representations \
|
if object.data:
|
||||||
or not object.data:
|
return object.data.name
|
||||||
return None
|
return None
|
||||||
return self.get_representation_reference(object.data.name)
|
|
||||||
|
|
||||||
def get_representation_reference(self, name):
|
|
||||||
return [ r['attributes']['Name'] for r in self.representations ].index(name)
|
|
||||||
|
|
||||||
def get_spatial_structure_elements_tree(self, collections, name_filter):
|
def get_spatial_structure_elements_tree(self, collections, name_filter):
|
||||||
collection_tree = []
|
collection_tree = []
|
||||||
@@ -604,7 +601,7 @@ class IfcExporter():
|
|||||||
self.owner_history, None, None, relating_object, related_objects)
|
self.owner_history, None, None, relating_object, related_objects)
|
||||||
|
|
||||||
def create_representations(self):
|
def create_representations(self):
|
||||||
for representation in self.ifc_parser.representations:
|
for representation in self.ifc_parser.representations.values():
|
||||||
representation['ifc'] = self.create_representation(representation)
|
representation['ifc'] = self.create_representation(representation)
|
||||||
|
|
||||||
def create_products(self):
|
def create_products(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user