Skip to content
This repository was archived by the owner on Nov 24, 2024. It is now read-only.

Commit 3143f8c

Browse files
committed
Code review for assign product with myoualid
1 parent 8dd781a commit 3143f8c

6 files changed

Lines changed: 52 additions & 79 deletions

File tree

src/blenderbim/blenderbim/bim/module/sequence/operator.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,6 @@ def execute(self, context):
628628
if data[attribute.name()]:
629629
new.enum_value = data[attribute.name()]
630630
props.active_task_id = self.task
631-
props.should_show_times = True
632631
return {"FINISHED"}
633632

634633

@@ -662,9 +661,7 @@ def execute(self, context):
662661
attributes[attribute.name] = attribute.enum_value
663662
self.file = IfcStore.get_file()
664663
ifcopenshell.api.run(
665-
"sequence.edit_task",
666-
self.file,
667-
**{"task": self.file.by_id(props.active_task_id), "attributes": attributes}
664+
"sequence.edit_task", self.file, **{"task": self.file.by_id(props.active_task_id), "attributes": attributes}
668665
)
669666
Data.load(IfcStore.get_file())
670667
bpy.ops.bim.disable_editing_task()
@@ -748,17 +745,19 @@ class AssignProduct(bpy.types.Operator):
748745
bl_idname = "bim.assign_product"
749746
bl_label = "Assign Product"
750747
task: bpy.props.IntProperty()
748+
related_product: bpy.props.StringProperty()
751749

752750
def execute(self, context):
753-
obj = bpy.context.active_object.BIMObjectProperties.ifc_definition_id
754-
props = context.scene.BIMWorkScheduleProperties
755-
self.file = IfcStore.get_file()
756-
ifcopenshell.api.run(
757-
"sequence.assign_product",
758-
self.file,
759-
relating_product = self.file.by_id(obj),
760-
related_process = self.file.by_id(self.task),
751+
related_products = (
752+
[bpy.data.objects.get(self.related_product)] if self.related_product else bpy.context.selected_objects
761753
)
762-
props.has_assignment = True
754+
for related_product in related_products:
755+
self.file = IfcStore.get_file()
756+
ifcopenshell.api.run(
757+
"sequence.assign_product",
758+
self.file,
759+
relating_product=self.file.by_id(related_product.BIMObjectProperties.ifc_definition_id),
760+
related_object=self.file.by_id(self.task),
761+
)
763762
Data.load(self.file)
764763
return {"FINISHED"}

src/blenderbim/blenderbim/bim/module/sequence/prop.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ class Task(PropertyGroup):
107107
identification: StringProperty(name="Identification", update=updateTaskIdentification)
108108
ifc_definition_id: IntProperty(name="IFC Definition ID")
109109
has_children: BoolProperty(name="Has Children")
110-
has_assignment: BoolProperty(name="Has Assignement")
111110
is_expanded: BoolProperty(name="Is Expanded")
112111
level_index: IntProperty(name="Level Index")
113112
duration: StringProperty(name="Duration")
@@ -137,7 +136,7 @@ class BIMWorkScheduleProperties(PropertyGroup):
137136
active_task_index: IntProperty(name="Active Task Index")
138137
active_task_id: IntProperty(name="Active Task Id")
139138
task_attributes: CollectionProperty(name="Task Attributes", type=Attribute)
140-
should_show_times: BoolProperty(name="Should Show Times", default=False)
139+
should_show_times: BoolProperty(name="Should Show Times", default=True)
141140
active_task_time_id: IntProperty(name="Active Task Id")
142141
task_time_attributes: CollectionProperty(name="Task Time Attributes", type=Attribute)
143142
contracted_tasks: StringProperty(name="Contracted Task Items", default="[]")

src/blenderbim/blenderbim/bim/module/sequence/ui.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,5 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn
293293
row.operator("bim.enable_editing_task", text="", icon="GREASEPENCIL").task = item.ifc_definition_id
294294
row.operator("bim.add_task", text="", icon="ADD").task = item.ifc_definition_id
295295
row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id
296-
if context.selected_objects:
297-
obj = context.selected_objects[0]
298-
pass
299296
row = layout.row(align=True)
300297
row.operator("bim.assign_product", text="ADD", icon="OUTLINER_COLLECTION").task = item.ifc_definition_id

src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,18 @@ def __init__(self, file, **settings):
1313
self.settings[key] = value
1414

1515
def execute(self):
16-
has_assignments = None
1716
if self.settings["related_object"].HasAssignments:
18-
for assignement in self.settings["related_object"].HasAssignments:
19-
if assignement.is_a("IfclRelAssignsToControl"):
20-
has_assignments = assignement
17+
for assignment in self.settings["related_object"].HasAssignments:
18+
if (
19+
assignment.is_a("IfclRelAssignsToControl")
20+
and assignment.RelatingControl == self.settings["relating_control"]
21+
):
22+
return
2123

2224
controls = None
23-
for rel in self.settings["relating_control"].Controls:
24-
if rel.is_a("IfcRelAssignsToControl"):
25-
controls = rel
26-
break
27-
if has_assignments and has_assignments == controls:
28-
return
29-
if has_assignments:
30-
related_objects = list(has_assignments.RelatedObjects)
31-
related_objects.remove(self.settings["related_object"])
32-
if related_objects:
33-
has_assignments.RelatedObjects = related_objects
34-
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": has_assignments})
35-
else:
36-
self.file.remove(has_assignments)
25+
if self.settings["relating_control"].Controls:
26+
controls = self.settings["relating_control"].Controls[0]
27+
3728
if controls:
3829
related_objects = list(controls.RelatedObjects)
3930
related_objects.append(self.settings["related_object"])

src/ifcopenshell-python/ifcopenshell/api/nest/assign_object.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ class Usecase:
66
def __init__(self, file, **settings):
77
self.file = file
88
self.settings = {
9-
"object": None,
9+
"related_object": None,
1010
"relating_object": None,
1111
}
1212
for key, value in settings.items():
1313
self.settings[key] = value
1414

1515
def execute(self):
1616
nests = None
17-
if self.settings["object"].Nests:
18-
nests = self.settings["object"].Nests[0]
17+
if self.settings["related_object"].Nests:
18+
nests = self.settings["related_object"].Nests[0]
1919

2020
is_nested_by = None
2121
for rel in self.settings["relating_object"].IsNestedBy:
@@ -28,7 +28,7 @@ def execute(self):
2828

2929
if nests:
3030
related_objects = list(nests.RelatedObjects)
31-
related_objects.remove(self.settings["object"])
31+
related_objects.remove(self.settings["related_object"])
3232
if related_objects:
3333
nests.RelatedObjects = related_objects
3434
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": nests})
@@ -37,7 +37,7 @@ def execute(self):
3737

3838
if is_nested_by:
3939
related_objects = list(is_nested_by.RelatedObjects)
40-
related_objects.append(self.settings["object"])
40+
related_objects.append(self.settings["related_object"])
4141
is_nested_by.RelatedObjects = related_objects
4242
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": is_nested_by})
4343
else:
@@ -46,7 +46,7 @@ def execute(self):
4646
**{
4747
"GlobalId": ifcopenshell.guid.new(),
4848
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
49-
"RelatedObjects": [self.settings["object"]],
49+
"RelatedObjects": [self.settings["related_object"]],
5050
"RelatingObject": self.settings["relating_object"],
5151
}
5252
)

src/ifcopenshell-python/ifcopenshell/api/sequence/assign_product.py

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)