From 5dec6365843279d78060bd88a45959c4ef2dbd0c Mon Sep 17 00:00:00 2001 From: Sigma Dimensions <79010126+myoualid@users.noreply.github.com> Date: Wed, 14 Apr 2021 23:40:29 +0000 Subject: [PATCH] New Feature to add Tasks and Task Relationships in the python ifcopenshell API (#1432) --- .../ifcopenshell/api/sequence/add_task.py | 20 +++++++++++++++ .../api/sequence/assign_task_predecessor.py | 25 +++++++++++++++++++ .../api/sequence/assign_task_successor.py | 25 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_predecessor.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_successor.py diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py new file mode 100644 index 0000000000..c4b7a8061c --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py @@ -0,0 +1,20 @@ +import ifcopenshell.api + + +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} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + task = ifcopenshell.api.run( + "root.create_entity", + self.file, + ifc_class="IfcTask", + predefined_type=self.settings["predefined_type"], + name=self.settings["name"], + ) + task.IsMilestone = self.settings["is_milestone"] + return task \ No newline at end of file diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_predecessor.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_predecessor.py new file mode 100644 index 0000000000..36c0140728 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_predecessor.py @@ -0,0 +1,25 @@ +import ifcopenshell +import ifcopenshell.api + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = { + "predecessor_task": None, + "sequence_type":"FINISH_START", + "task": None, + } + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + #TODO: tasks can only have one relationship between oneanother: if a relationship is already assigned, it should overide the previous one's settings. + rel_sequence = self.file.create_entity("IfcRelSequence",**{ + "GlobalId": ifcopenshell.guid.new(), + "OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file), + "RelatingProcess": self.settings["predecessor_task"], + "SequenceType": self.settings["sequence_type"], + "RelatedProcess": self.settings["task"], + }) + return rel_sequence \ No newline at end of file diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_successor.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_successor.py new file mode 100644 index 0000000000..21f818949f --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_task_successor.py @@ -0,0 +1,25 @@ +import ifcopenshell +import ifcopenshell.api + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = { + "task": None, + "sequence_type":"FINISH_START", + "successor_task": None, + } + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + #TODO: tasks can only have one relationship between oneanother: if a relationship is already assigned, it should overide the previous one's settings. + rel_sequence = self.file.create_entity("IfcRelSequence",**{ + "GlobalId": ifcopenshell.guid.new(), + "OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file), + "RelatingProcess": self.settings["task"], + "SequenceType": self.settings["sequence_type"], + "RelatedProcess": self.settings["successor_task"], + }) + return rel_sequence \ No newline at end of file