@@ -7,50 +7,37 @@ def __init__(self, file, **settings):
77 self .file = file
88 self .settings = {
99 "relating_product" : None ,
10- "related_process " : None ,
10+ "related_object " : None ,
1111 }
1212 for key , value in settings .items ():
1313 self .settings [key ] = value
1414
1515 def execute (self ):
16- referenced_by = None
16+ if self .settings ["related_object" ].HasAssignments :
17+ for assignment in self .settings ["related_object" ].HasAssignments :
18+ if (
19+ assignment .is_a ("IfclRelAssignsToProduct" )
20+ and assignment .RelatingProduct == self .settings ["relating_product" ]
21+ ):
22+ return
1723
24+ referenced_by = None
1825 if self .settings ["relating_product" ].ReferencedBy :
19- for rel in self .settings ["relating_product" ].ReferencedBy :
20- if rel .is_a ("IfcRelAssignsToProduct" ):
21- referenced_by = rel
22-
23- assignment = None
24- for rel in self .settings ["related_process" ].HasAssignments :
25- if rel .is_a ('IfcRelAssignsToProduct' ):
26- assignment = rel
27- break
28- if referenced_by and referenced_by == assignment :
29- return
30-
31- if assignment :
32- related_objects = set (assignment .RelatedObjects )
33- related_objects .add (self .settings ["relating_product" ])
34- assignment .RelatedObjects = list (related_objects )
35- ifcopenshell .api .run ("owner.update_owner_history" , self .file , ** {"element" : assignment })
36- else :
37- rel = self .file .create_entity (
38- "IfcRelAssignsToProduct" ,
39- ** {
40- "GlobalId" : ifcopenshell .guid .new (),
41- "OwnerHistory" : ifcopenshell .api .run ("owner.create_owner_history" , self .file ),
42- "RelatingProduct" : self .settings ["relating_product" ],
43- "RelatedObjects" : [self .settings ["related_process" ]],
44- })
45- return rel
26+ referenced_by = self .settings ["relating_product" ].ReferencedBy [0 ]
4627
4728 if referenced_by :
4829 related_objects = list (referenced_by .RelatedObjects )
49- related_objects .remove (self .settings ["relating_product" ])
50- if related_objects :
51- referenced_by .RelatedObjects = related_objects
52- ifcopenshell .api .run ("owner.update_owner_history" , self .file , ** {"element" : referenced_by })
53- else :
54- self .file .remove (referenced_by )
55-
56- return rel
30+ related_objects .append (self .settings ["related_object" ])
31+ referenced_by .RelatedObjects = related_objects
32+ ifcopenshell .api .run ("owner.update_owner_history" , self .file , ** {"element" : referenced_by })
33+ else :
34+ referenced_by = self .file .create_entity (
35+ "IfcRelAssignsToProduct" ,
36+ ** {
37+ "GlobalId" : ifcopenshell .guid .new (),
38+ "OwnerHistory" : ifcopenshell .api .run ("owner.create_owner_history" , self .file ),
39+ "RelatedObjects" : [self .settings ["related_object" ]],
40+ "RelatingProduct" : self .settings ["relating_product" ],
41+ }
42+ )
43+ return referenced_by
0 commit comments