Feature to create IfcTask trees for entities of IfcWorkSchedule

This commit is contained in:
bosonprojets
2021-04-18 00:49:43 +00:00
parent f5d27621e7
commit 3201c234fa
8 changed files with 196 additions and 96 deletions
@@ -1,16 +1,12 @@
import ifcopenshell.api
import ifcopenshell
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"name": None,
"predefined_type": "NOTDEFINED",
"is_milestone": False,
"identification": "none",
"predecessor_to": None,
"successor_from": None,
"work_schedule": None,
"parent_task": None,
}
for key, value in settings.items():
self.settings[key] = value
@@ -20,8 +16,23 @@ class Usecase:
"root.create_entity",
self.file,
ifc_class="IfcTask",
predefined_type=self.settings["predefined_type"],
name=self.settings["name"],
name= None,
predefined_type= "NOTDEFINED",
identification= "none",
)
task.IsMilestone = self.settings["is_milestone"]
task.IsMilestone = False
if self.settings["work_schedule"]:
self.file.create_entity(
"IfcRelAssignsToControl",
**{
"GlobalId": ifcopenshell.guid.new(),
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
"RelatedObjects": [task],
"RelatingControl": self.settings["work_schedule"],
}
)
elif self.settings["parent_task"]:
ifcopenshell.api.run(
"nest.assign_object", self.file, object=task, relating_object=self.settings["parent_task"]
)
return task
@@ -61,6 +61,7 @@ class Data:
@classmethod
def load_work_calendars(cls):
cls.work_calendars = {}
for work_calendar in cls._file.by_type("IfcWorkCalendar"):
data = work_calendar.get_info()
del data["OwnerHistory"]
@@ -72,4 +73,9 @@ class Data:
def load_tasks(cls):
cls.tasks = {}
for task in cls._file.by_type("IfcTask"):
cls.tasks[task.id()] = {"Name": task.Name, "Identification": task.Identification or ""}
data = task.get_info()
del data["OwnerHistory"]
data["RelatedObjects"] = []
for rel in task.IsNestedBy:
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects if o.is_a("IfcTask")]
cls.tasks[task.id()] = data
@@ -0,0 +1,19 @@
import ifcopenshell.api
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {"task": None}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
# TODO: do a deep purge
ifcopenshell.api.run(
"project.unassign_declaration",
self.file,
definition=self.settings["task"],
relating_context=self.file.by_type("IfcContext")[0],
)
self.file.remove(self.settings["task"])
@@ -1,3 +1,6 @@
import ifcopenshell.api
class Usecase:
def __init__(self, file, **settings):
self.file = file