mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
Relate objects to psets
This commit is contained in:
@@ -92,7 +92,7 @@ class IfcParser():
|
|||||||
|
|
||||||
self.product_index = 0
|
self.product_index = 0
|
||||||
|
|
||||||
self.psets = []
|
self.psets = {}
|
||||||
self.qtos = {}
|
self.qtos = {}
|
||||||
self.aggregates = {}
|
self.aggregates = {}
|
||||||
self.spatial_structure_elements = []
|
self.spatial_structure_elements = []
|
||||||
@@ -100,6 +100,7 @@ class IfcParser():
|
|||||||
self.rel_contained_in_spatial_structure = {}
|
self.rel_contained_in_spatial_structure = {}
|
||||||
self.rel_defines_by_type = {}
|
self.rel_defines_by_type = {}
|
||||||
self.rel_defines_by_qto = {}
|
self.rel_defines_by_qto = {}
|
||||||
|
self.rel_defines_by_pset = {}
|
||||||
self.rel_aggregates = {}
|
self.rel_aggregates = {}
|
||||||
self.representations = {}
|
self.representations = {}
|
||||||
self.type_products = []
|
self.type_products = []
|
||||||
@@ -189,6 +190,11 @@ class IfcParser():
|
|||||||
if object.name in self.qtos:
|
if object.name in self.qtos:
|
||||||
self.rel_defines_by_qto.setdefault(object.name, []).append(product)
|
self.rel_defines_by_qto.setdefault(object.name, []).append(product)
|
||||||
|
|
||||||
|
for key in object.keys():
|
||||||
|
if key[0:5] == 'Pset_':
|
||||||
|
self.rel_defines_by_pset.setdefault(
|
||||||
|
'{}/{}'.format(key, object[key]), []).append(product)
|
||||||
|
|
||||||
if object.parent \
|
if object.parent \
|
||||||
and self.is_a_type(self.get_ifc_class(object.parent.name)):
|
and self.is_a_type(self.get_ifc_class(object.parent.name)):
|
||||||
reference = self.get_type_product_reference(object.parent.name)
|
reference = self.get_type_product_reference(object.parent.name)
|
||||||
@@ -239,16 +245,18 @@ class IfcParser():
|
|||||||
{'rel_aggregates_relating_object': object})
|
{'rel_aggregates_relating_object': object})
|
||||||
|
|
||||||
def get_psets(self):
|
def get_psets(self):
|
||||||
psets = []
|
psets = {}
|
||||||
for filename in Path(self.data_dir).glob('**/*.csv'):
|
for filename in Path(self.data_dir).glob('**/*.csv'):
|
||||||
with open(filename, 'r') as f:
|
with open(filename, 'r') as f:
|
||||||
psets.append({
|
name = filename.parts[-2]
|
||||||
|
description = filename.stem
|
||||||
|
psets['{}/{}'.format(name, description)] = {
|
||||||
'ifc': None,
|
'ifc': None,
|
||||||
'raw': { x[0]: x[1] for x in list(csv.reader(f)) },
|
'raw': { x[0]: x[1] for x in list(csv.reader(f)) },
|
||||||
'attributes': {
|
'attributes': {
|
||||||
'Name': filename.parts[-2],
|
'Name': name,
|
||||||
'Description': filename.stem }
|
'Description': description }
|
||||||
})
|
}
|
||||||
return psets
|
return psets
|
||||||
|
|
||||||
def get_project(self):
|
def get_project(self):
|
||||||
@@ -489,6 +497,7 @@ class IfcExporter():
|
|||||||
self.relate_elements_to_spatial_structures()
|
self.relate_elements_to_spatial_structures()
|
||||||
self.relate_objects_to_types()
|
self.relate_objects_to_types()
|
||||||
self.relate_objects_to_qtos()
|
self.relate_objects_to_qtos()
|
||||||
|
self.relate_objects_to_psets()
|
||||||
self.file.write(self.output_file)
|
self.file.write(self.output_file)
|
||||||
|
|
||||||
def set_common_definitions(self):
|
def set_common_definitions(self):
|
||||||
@@ -502,7 +511,7 @@ class IfcExporter():
|
|||||||
self.volume_unit = units[2]
|
self.volume_unit = units[2]
|
||||||
|
|
||||||
def create_psets(self):
|
def create_psets(self):
|
||||||
for pset in self.ifc_parser.psets:
|
for pset in self.ifc_parser.psets.values():
|
||||||
properties = self.create_pset_properties(pset)
|
properties = self.create_pset_properties(pset)
|
||||||
if not properties:
|
if not properties:
|
||||||
continue
|
continue
|
||||||
@@ -771,6 +780,14 @@ class IfcExporter():
|
|||||||
[o['ifc'] for o in related_objects],
|
[o['ifc'] for o in related_objects],
|
||||||
relating_property)
|
relating_property)
|
||||||
|
|
||||||
|
def relate_objects_to_psets(self):
|
||||||
|
for relating_property_key, related_objects in self.ifc_parser.rel_defines_by_pset.items():
|
||||||
|
relating_property = self.ifc_parser.psets[relating_property_key]['ifc']
|
||||||
|
self.file.createIfcRelDefinesByProperties(
|
||||||
|
ifcopenshell.guid.new(), self.owner_history, None, None,
|
||||||
|
[o['ifc'] for o in related_objects],
|
||||||
|
relating_property)
|
||||||
|
|
||||||
class IfcExportSettings:
|
class IfcExportSettings:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.has_representations = True
|
self.has_representations = True
|
||||||
|
|||||||
Reference in New Issue
Block a user