Code review with myoualid for IFC resource module

This commit is contained in:
Dion Moult
2021-04-25 12:29:11 +10:00
parent 6107c39c1c
commit de842f7aba
12 changed files with 198 additions and 403 deletions
@@ -1,27 +0,0 @@
import ifcopenshell.api
import ifcopenshell
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"parent_resource": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
equipment_resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcConstructionEquipmentResource",
name=None,
predefined_type="NOTDEFINED",
identification="none",
)
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=equipment_resource, relating_object=self.settings["parent_resource"]
)
return equipment_resource
@@ -1,27 +0,0 @@
import ifcopenshell.api
import ifcopenshell
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"parent_resource": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
labor_resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcLaborResource",
name=None,
predefined_type="NOTDEFINED",
identification="none",
)
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=labor_resource, relating_object=self.settings["parent_resource"]
)
return labor_resource
@@ -1,27 +0,0 @@
import ifcopenshell.api
import ifcopenshell
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"parent_resource": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
material_resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcConstructionMaterialResource",
name=None,
predefined_type="NOTDEFINED",
identification="none",
)
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=material_resource, relating_object=self.settings["parent_resource"]
)
return material_resource
@@ -1,27 +0,0 @@
import ifcopenshell.api
import ifcopenshell
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"parent_resource": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
product_resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcConstructionProductResource",
name=None,
predefined_type="NOTDEFINED",
identification="none",
)
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=product_resource, relating_object=self.settings["parent_resource"]
)
return product_resource
@@ -1,6 +1,4 @@
import ifcopenshell.api
import ifcopenshell.util.date
from datetime import datetime
class Usecase:
@@ -8,22 +6,23 @@ class Usecase:
self.file = file
self.settings = {
"parent_resource": None,
"name": "Unnamed",
"ifc_class": "IfcCrewResource",
"name": None,
"predefined_type": "NOTDEFINED",
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
crew_resource = ifcopenshell.api.run(
resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcCrewResource",
ifc_class=self.settings["ifc_class"],
predefined_type=self.settings["predefined_type"],
name=self.settings["name"],
)
# TODO: this is an ambiguity by buildingSMART: Can we nest and IfcCrewResource under an ifcCrewResource ?
# See https://forums.buildingsmart.org/t/is-the-ifcCrewResource-project-declaration-mutually-exclusive-to-aggregation-within-a-relating-ifcworkplan/3510
# TODO: this is an ambiguity by buildingSMART: Can we nest an IfcCrewResource under an IfcCrewResource ?
# https://forums.buildingsmart.org/t/what-are-allowed-to-be-root-level-construction-resources/3550
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=resource, relating_object=self.settings["parent_resource"]
@@ -31,6 +30,6 @@ class Usecase:
else:
context = self.file.by_type("IfcContext")[0]
ifcopenshell.api.run(
"project.assign_declaration", self.file, definition=crew_resource, relating_context=context
"project.assign_declaration", self.file, definition=resource, relating_context=context
)
return crew_resource
return resource
@@ -1,36 +0,0 @@
import ifcopenshell.api
import ifcopenshell.util.date
from datetime import datetime
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"parent_resource": None,
"name": "Unnamed",
"predefined_type": "NOTDEFINED",
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
subcontract_resource = ifcopenshell.api.run(
"root.create_entity",
self.file,
ifc_class="IfcSubContractResource",
predefined_type=self.settings["predefined_type"],
name=self.settings["name"],
)
# TODO: this is an ambiguity by buildingSMART: Can we nest and IfcCrewResource under an ifcCrewResource ?
# See https://forums.buildingsmart.org/t/is-the-ifcCrewResource-project-declaration-mutually-exclusive-to-aggregation-within-a-relating-ifcworkplan/3510
if self.settings["parent_resource"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, related_object=resource, relating_object=self.settings["parent_resource"]
)
else:
context = self.file.by_type("IfcContext")[0]
ifcopenshell.api.run(
"project.assign_declaration", self.file, definition=subcontract_resource, relating_context=context
)
return subcontract_resource
@@ -21,17 +21,17 @@ class Usecase:
):
return
referenced_by = None
resource_of = None
if self.settings["relating_resource"].ResourceOf:
referenced_by = self.settings["relating_resource"].ResourceOf[0]
resource_of = self.settings["relating_resource"].ResourceOf[0]
if referenced_by:
related_objects = list(referenced_by.RelatedObjects)
if resource_of:
related_objects = list(resource_of.RelatedObjects)
related_objects.append(self.settings["related_object"])
referenced_by.RelatedObjects = related_objects
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": referenced_by})
resource_of.RelatedObjects = related_objects
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": resource_of})
else:
referenced_by = self.file.create_entity(
resource_of = self.file.create_entity(
"IfcRelAssignsToResource",
**{
"GlobalId": ifcopenshell.guid.new(),
@@ -40,4 +40,4 @@ class Usecase:
"RelatingProduct": self.settings["relating_resource"],
}
)
return referenced_by
return resource_of
@@ -1,6 +1,3 @@
import ifcopenshell.api
class Data:
is_loaded = False
resources = {}
@@ -17,6 +14,7 @@ class Data:
del data["OwnerHistory"]
data["RelatedObjects"] = []
for rel in resource.IsNestedBy:
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects if o.is_a("IfcCrewResource") or o.is_a("IfcsubcontractResource")]
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects]
data["HasContext"] = resource.HasContext[0].RelatingContext.id() if resource.HasContext else None
cls.resources[resource.id()] = data
cls.is_loaded=True