mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 21:42:19 +00:00
Implement associations to qualitative objective constraints
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
Name,Description,ConstraintGrade,ObjectiveQualifier
|
||||||
|
Beauty,The built form should be beautiful,HARD,DESIGNINTENT
|
||||||
|
Safety,No facilities exist to generate killer artificial intelligence,HARD,HEALTHANDSAFETY
|
||||||
|
@@ -97,6 +97,7 @@ class IfcParser():
|
|||||||
self.documents = {}
|
self.documents = {}
|
||||||
self.classifications = []
|
self.classifications = []
|
||||||
self.classification_references = {}
|
self.classification_references = {}
|
||||||
|
self.objectives = {}
|
||||||
self.qtos = {}
|
self.qtos = {}
|
||||||
self.aggregates = {}
|
self.aggregates = {}
|
||||||
self.spatial_structure_elements = []
|
self.spatial_structure_elements = []
|
||||||
@@ -110,6 +111,8 @@ class IfcParser():
|
|||||||
self.rel_associates_classification_object = {}
|
self.rel_associates_classification_object = {}
|
||||||
self.rel_associates_classification_type = {}
|
self.rel_associates_classification_type = {}
|
||||||
self.rel_associates_material = {}
|
self.rel_associates_material = {}
|
||||||
|
self.rel_associates_constraint_objective_object = {}
|
||||||
|
self.rel_associates_constraint_objective_type = {}
|
||||||
self.rel_aggregates = {}
|
self.rel_aggregates = {}
|
||||||
self.representations = {}
|
self.representations = {}
|
||||||
self.type_products = []
|
self.type_products = []
|
||||||
@@ -124,6 +127,7 @@ class IfcParser():
|
|||||||
self.documents = self.get_documents()
|
self.documents = self.get_documents()
|
||||||
self.classifications = self.get_classifications()
|
self.classifications = self.get_classifications()
|
||||||
self.classification_references = self.get_classification_references()
|
self.classification_references = self.get_classification_references()
|
||||||
|
self.objectives = self.get_objectives()
|
||||||
self.representations = self.get_representations()
|
self.representations = self.get_representations()
|
||||||
self.materials = self.get_materials()
|
self.materials = self.get_materials()
|
||||||
self.qtos = self.get_qtos()
|
self.qtos = self.get_qtos()
|
||||||
@@ -232,6 +236,9 @@ class IfcParser():
|
|||||||
elif key[0:5] == 'Class':
|
elif key[0:5] == 'Class':
|
||||||
self.rel_associates_classification_object.setdefault(
|
self.rel_associates_classification_object.setdefault(
|
||||||
object[key], []).append(product)
|
object[key], []).append(product)
|
||||||
|
elif key[0:9] == 'Objective':
|
||||||
|
self.rel_associates_constraint_objective_object.setdefault(
|
||||||
|
object[key], []).append(product)
|
||||||
|
|
||||||
for slot in object.material_slots:
|
for slot in object.material_slots:
|
||||||
self.rel_associates_material.setdefault( slot.material.name, []).append(product)
|
self.rel_associates_material.setdefault( slot.material.name, []).append(product)
|
||||||
@@ -330,6 +337,20 @@ class IfcParser():
|
|||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_objectives(self):
|
||||||
|
results = {}
|
||||||
|
class_path = self.data_dir + 'constraint/'
|
||||||
|
with open(class_path + 'objectives.csv', 'r') as f:
|
||||||
|
data = list(csv.reader(f))
|
||||||
|
keys = data.pop(0)
|
||||||
|
for row in data:
|
||||||
|
results[row[0]] = {
|
||||||
|
'ifc': None,
|
||||||
|
'raw': row,
|
||||||
|
'attributes': dict(zip(keys, row))
|
||||||
|
}
|
||||||
|
return results
|
||||||
|
|
||||||
def get_documents(self):
|
def get_documents(self):
|
||||||
documents = {}
|
documents = {}
|
||||||
doc_path = self.data_dir + 'doc/'
|
doc_path = self.data_dir + 'doc/'
|
||||||
@@ -500,6 +521,9 @@ class IfcParser():
|
|||||||
elif key[0:5] == 'Class':
|
elif key[0:5] == 'Class':
|
||||||
self.rel_associates_classification_type.setdefault(
|
self.rel_associates_classification_type.setdefault(
|
||||||
object[key], []).append(type)
|
object[key], []).append(type)
|
||||||
|
elif key[0:9] == 'Objective':
|
||||||
|
self.rel_associates_constraint_objective_type.setdefault(
|
||||||
|
object[key], []).append(type)
|
||||||
|
|
||||||
index += 1
|
index += 1
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -601,6 +625,7 @@ class IfcExporter():
|
|||||||
self.create_documents()
|
self.create_documents()
|
||||||
self.create_classifications()
|
self.create_classifications()
|
||||||
self.create_classification_references()
|
self.create_classification_references()
|
||||||
|
self.create_objectives()
|
||||||
self.create_psets()
|
self.create_psets()
|
||||||
self.create_rep_context()
|
self.create_rep_context()
|
||||||
self.create_project()
|
self.create_project()
|
||||||
@@ -623,6 +648,8 @@ class IfcExporter():
|
|||||||
self.relate_to_documents(self.ifc_parser.rel_associates_document_type)
|
self.relate_to_documents(self.ifc_parser.rel_associates_document_type)
|
||||||
self.relate_to_classifications(self.ifc_parser.rel_associates_classification_object)
|
self.relate_to_classifications(self.ifc_parser.rel_associates_classification_object)
|
||||||
self.relate_to_classifications(self.ifc_parser.rel_associates_classification_type)
|
self.relate_to_classifications(self.ifc_parser.rel_associates_classification_type)
|
||||||
|
self.relate_to_objectives(self.ifc_parser.rel_associates_constraint_objective_object)
|
||||||
|
self.relate_to_objectives(self.ifc_parser.rel_associates_constraint_objective_type)
|
||||||
self.file.write(self.output_file)
|
self.file.write(self.output_file)
|
||||||
|
|
||||||
def set_common_definitions(self):
|
def set_common_definitions(self):
|
||||||
@@ -665,6 +692,11 @@ class IfcExporter():
|
|||||||
reference['ifc'] = self.file.create_entity(
|
reference['ifc'] = self.file.create_entity(
|
||||||
'IfcClassificationReference', **reference['attributes'])
|
'IfcClassificationReference', **reference['attributes'])
|
||||||
|
|
||||||
|
def create_objectives(self):
|
||||||
|
for objective in self.ifc_parser.objectives.values():
|
||||||
|
objective['ifc'] = self.file.create_entity(
|
||||||
|
'IfcObjective', **objective['attributes'])
|
||||||
|
|
||||||
def create_psets(self):
|
def create_psets(self):
|
||||||
for pset in self.ifc_parser.psets.values():
|
for pset in self.ifc_parser.psets.values():
|
||||||
properties = self.create_pset_properties(pset)
|
properties = self.create_pset_properties(pset)
|
||||||
@@ -1005,6 +1037,13 @@ class IfcExporter():
|
|||||||
[o['ifc'] for o in related_objects],
|
[o['ifc'] for o in related_objects],
|
||||||
self.ifc_parser.classification_references[relating_key]['ifc'])
|
self.ifc_parser.classification_references[relating_key]['ifc'])
|
||||||
|
|
||||||
|
def relate_to_objectives(self, relationships):
|
||||||
|
for relating_key, related_objects in relationships.items():
|
||||||
|
self.file.createIfcRelAssociatesConstraint(
|
||||||
|
ifcopenshell.guid.new(), self.owner_history, None, None,
|
||||||
|
[o['ifc'] for o in related_objects], None,
|
||||||
|
self.ifc_parser.objectives[relating_key]['ifc'])
|
||||||
|
|
||||||
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