From 1ede89cc5eae9fe978c7aa38f7e30db8b82b79cb Mon Sep 17 00:00:00 2001 From: steppke_a Date: Sun, 25 Feb 2024 18:26:34 +0100 Subject: [PATCH] added connected adjustables --- slic/core/adjustable/__init__.py | 4 +++ slic/core/adjustable/primarysecondary.py | 42 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 slic/core/adjustable/primarysecondary.py diff --git a/slic/core/adjustable/__init__.py b/slic/core/adjustable/__init__.py index bf3e3769..86f0647b 100644 --- a/slic/core/adjustable/__init__.py +++ b/slic/core/adjustable/__init__.py @@ -11,5 +11,9 @@ from .collection import Collection from .combined import Combined from .converted import Converted from .scaler import Scaler +from .primarysecondary import PrimarySecondary + + + diff --git a/slic/core/adjustable/primarysecondary.py b/slic/core/adjustable/primarysecondary.py new file mode 100644 index 00000000..89066af4 --- /dev/null +++ b/slic/core/adjustable/primarysecondary.py @@ -0,0 +1,42 @@ +from .adjustable import Adjustable + +class PrimarySecondary(Adjustable): + """ + An adjustable which connects or links a secondary adjustable to + a primary adjustable. The secondary is then following the primary + one according to: + + secondary_target = target * scale_factor + offset + + The speed of the motion is not linked. + """ + + def __init__(self, ID, primary_adj, secondary_adj, scale_factor=1.0, offset=0, **kwargs): + super().__init__(ID, **kwargs) + + self.primary = primary_adj + self.secondary = secondary_adj + self.adjs = [self.primary, self.secondary] + + self.scale_factor = scale_factor + self.offset = offset + + def get_current_value(self): + return self.primary.get_current_value() + + def set_target_value(self, value): + secondary_target = value * self.scale_factor + self.offset + + tasks = [ + self.primary.set_target_value(value), + self.secondary.set_target_value(secondary_target), + ] + + for t in tasks: + t.wait() + + def is_moving(self): + return any(a.is_moving() for a in self.adjs) + + def __repr__(self): + return f"Primary:\n{repr(self.primary)}\nSecondary:\n{repr(self.secondary)}"