From 2f53e43b909ce496881ef0be70194fd1f096921d Mon Sep 17 00:00:00 2001 From: bosonprojets Date: Fri, 30 Apr 2021 02:21:54 +0000 Subject: [PATCH] Added Usecases to assign, edit and unassign Lag Times to the ifcopenshell.api --- .../api/sequence/assign_lag_time.py | 20 +++++++++++++++++++ .../api/sequence/edit_lag_time.py | 13 ++++++++++++ .../api/sequence/edit_sequence.py | 10 ++++++++++ .../api/sequence/unassign_lag_time.py | 13 ++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/assign_lag_time.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/sequence/unassign_lag_time.py diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_lag_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_lag_time.py new file mode 100644 index 0000000000..0d3bd2ded9 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_lag_time.py @@ -0,0 +1,20 @@ +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"rel_sequence": None, "lag_value": None, "duration_type": "NOTEDEFINED"} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + lag_value = self.file.createIfcDuration(self.settings["lag_value"]) + lag_time = self.file.create_entity("IfcLagTime", + **{ + "DurationType": self.settings["duration_type"], + "LagValue": lag_value, + } + ) + #Can an IfcLagTime entity be used by multiple sequence relationships? + if self.settings["rel_sequence"].is_a("IfcRelSequence"): + if len(self.file.get_inverse(self.settings["rel_sequence"].TimeLag)) == 1: + self.file.remove(self.settings["rel_sequence"].TimeLag) + self.settings["rel_sequence"].TimeLag = lag_time diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py new file mode 100644 index 0000000000..67ef2523da --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py @@ -0,0 +1,13 @@ +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"rel_sequence": None, "attributes": {}} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + for name, value in self.settings["attributes"].items(): + if name == "LagValue" and value is not None: + # TODO: support RatioMeasure + value = self.file.createIfcDuration(value) + setattr(self.settings["rel_sequence"], name, value) diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py new file mode 100644 index 0000000000..b43c7c84a5 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py @@ -0,0 +1,10 @@ +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"rel_sequence": None, "attributes": {}} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + for name, value in self.settings["attributes"].items(): + setattr(self.settings["rel_sequence"], name, value) diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/unassign_lag_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/unassign_lag_time.py new file mode 100644 index 0000000000..872c64e25b --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/unassign_lag_time.py @@ -0,0 +1,13 @@ +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = { + "rel_sequence": None, + } + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + if self.settings["rel_sequence"].TimeLag.LagValue: + self.file.remove(self.settings["rel_sequence"].TimeLag.LagValue) + self.file.remove(self.settings["rel_sequence"].TimeLag)