You can now assign task successor and predecessors. Sweet. Thanks myoualid!

This commit is contained in:
Dion Moult
2021-04-19 13:09:00 +10:00
parent d2d4112724
commit 8f0e67a35b
8 changed files with 138 additions and 52 deletions
@@ -0,0 +1,27 @@
import ifcopenshell
import ifcopenshell.api
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"relating_process": None,
"related_process": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
for rel in self.settings["related_process"].IsSuccessorFrom or []:
if rel.RelatingProcess == self.settings["relating_process"]:
return rel
return self.file.create_entity(
"IfcRelSequence",
**{
"GlobalId": ifcopenshell.guid.new(),
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
"RelatingProcess": self.settings["relating_process"],
"RelatedProcess": self.settings["related_process"],
}
)
@@ -1,25 +0,0 @@
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
@@ -1,25 +0,0 @@
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
@@ -76,6 +76,10 @@ class Data:
data = task.get_info()
del data["OwnerHistory"]
data["RelatedObjects"] = []
data["IsPredecessorTo"] = []
data["IsSuccessorFrom"] = []
for rel in task.IsNestedBy:
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects if o.is_a("IfcTask")]
[data["IsPredecessorTo"].append(rel.RelatedProcess.id()) for rel in task.IsPredecessorTo or []]
[data["IsSuccessorFrom"].append(rel.RelatingProcess.id()) for rel in task.IsSuccessorFrom or []]
cls.tasks[task.id()] = data
@@ -0,0 +1,18 @@
import ifcopenshell
import ifcopenshell.api
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"relating_process": None,
"related_process": None,
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
for rel in self.settings["related_process"].IsSuccessorFrom or []:
if rel.RelatingProcess == self.settings["relating_process"]:
self.file.remove(rel)