90 lines
4.1 KiB
Diff
90 lines
4.1 KiB
Diff
diff --git a/pglive/sources/live_axis_range.py b/pglive/sources/live_axis_range.py
|
|
index cd3a7fc..276c7b6 100755
|
|
--- a/pglive/sources/live_axis_range.py
|
|
+++ b/pglive/sources/live_axis_range.py
|
|
@@ -13,6 +13,10 @@ class LiveAxisRange:
|
|
offset_top: float = 0.0,
|
|
offset_bottom: float = 0.0,
|
|
fixed_range: Optional[List[float]] = None,
|
|
+ x_range_width: Optional[float] = None,
|
|
+ x_bound: Optional[List[float]] = None,
|
|
+ y_range_width: Optional[float] = None,
|
|
+ y_bound: Optional[List[float]] = None,
|
|
) -> None:
|
|
self.roll_on_tick = roll_on_tick
|
|
self.offset_left = offset_left
|
|
@@ -24,6 +28,10 @@ class LiveAxisRange:
|
|
self.crop_top_offset_to_data = False
|
|
self.crop_bottom_offset_to_data = False
|
|
self.fixed_range = fixed_range
|
|
+ self.x_range_width = x_range_width
|
|
+ self.x_bound = x_bound
|
|
+ self.y_range_width = y_range_width
|
|
+ self.y_bound = y_bound
|
|
self.x_range: Dict[str, List[float]] = {}
|
|
self.y_range: Dict[str, List[float]] = {}
|
|
self.final_x_range = [0.0, 0.0]
|
|
@@ -65,11 +73,12 @@ class LiveAxisRange:
|
|
final_range[0] = x_range[0]
|
|
if final_range[1] < x_range[1]:
|
|
final_range[1] = x_range[1]
|
|
- if final_range[0] == final_range[1]:
|
|
+ if final_range[0] == final_range[1] and self.x_range_width is not None:
|
|
# Pyqtgraph ViewBox.setRange doesn't like same value for min and max,
|
|
# therefore in that case we must set some range
|
|
final_range[0] -= 0.4
|
|
final_range[1] += 0.4
|
|
+ final_range = self._update_range_width(self.x_bound, self.x_range_width, final_range)
|
|
if self.final_x_range != final_range:
|
|
self.final_x_range = final_range
|
|
return self.final_x_range
|
|
@@ -88,7 +97,7 @@ class LiveAxisRange:
|
|
final_range[1] = x_range[1]
|
|
if final_range is None:
|
|
final_range = [0, 0]
|
|
- if final_range[0] == final_range[1]:
|
|
+ if final_range[0] == final_range[1] and self.x_range_width is None:
|
|
# Pyqtgraph ViewBox.setRange doesn't like same value for min and max,
|
|
# therefore in that case we must set some range
|
|
final_range[0] -= 0.4
|
|
@@ -132,11 +141,13 @@ class LiveAxisRange:
|
|
final_range[0] = y_range[0]
|
|
if final_range[1] < y_range[1]:
|
|
final_range[1] = y_range[1]
|
|
- if final_range[0] == final_range[1]:
|
|
+
|
|
+ if final_range[0] == final_range[1] and self.y_range_width is None:
|
|
# Pyqtgraph ViewBox.setRange doesn't like same value for min and max,
|
|
# therefore in that case we must set some range
|
|
final_range[0] -= 0.4
|
|
final_range[1] += 0.4
|
|
+ final_range = self._update_range_width(self.y_bound, self.y_range_width, final_range)
|
|
if self.final_y_range != final_range:
|
|
self.final_y_range = final_range
|
|
return self.final_y_range
|
|
@@ -199,6 +210,24 @@ class LiveAxisRange:
|
|
else:
|
|
return None
|
|
|
|
+ def _update_range_width(self, bound, range_width, final_range):
|
|
+ if range_width is not None:
|
|
+ if abs(final_range[0] - final_range[1]) < range_width:
|
|
+ center_pt = (final_range[0] + final_range[1]) / 2
|
|
+ final_range[0] = center_pt - range_width / 2
|
|
+ final_range[1] = center_pt + range_width / 2
|
|
+
|
|
+ if bound is not None:
|
|
+ final_range_width = abs(final_range[0] - final_range[1])
|
|
+ bound_width = abs(bound[0] - bound[1])
|
|
+ if bound_width < final_range_width:
|
|
+ final_range = bound
|
|
+ if final_range[0] <= bound[0]:
|
|
+ final_range = [bound[0], bound[0] + final_range_width]
|
|
+ elif final_range[1] >= bound[1]:
|
|
+ final_range = [bound[0] - final_range_width, bound[1]]
|
|
+ return final_range
|
|
+
|
|
def ignore_connector(self, data_connector, flag: bool) -> None:
|
|
if not flag:
|
|
self.ignored_data_connectors.append(data_connector.__hash__())
|