0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

feat!: ability to disable scatter from waveform & compatible crosshair with down sampling

This commit is contained in:
2024-10-15 12:02:09 +02:00
parent 98c68e9ff4
commit 2ab12ed60a
5 changed files with 60 additions and 4 deletions

View File

@ -552,6 +552,7 @@ class BECFigure(RPCBase):
def image(
self,
monitor: "str" = None,
monitor_type: "Literal['1d', '2d']" = "2d",
color_bar: "Literal['simple', 'full']" = "full",
color_map: "str" = "magma",
data: "np.ndarray" = None,
@ -856,6 +857,7 @@ class BECImageShow(RPCBase):
def image(
self,
monitor: "str",
monitor_type: "Literal['1d', '2d']" = "2d",
color_map: "Optional[str]" = "magma",
color_bar: "Optional[Literal['simple', 'full']]" = "full",
downsample: "Optional[bool]" = True,
@ -868,6 +870,7 @@ class BECImageShow(RPCBase):
Args:
monitor(str): The name of the monitor to display.
monitor_type(Literal["1d","2d"]): The type of monitor to display.
color_bar(Literal["simple","full"]): The type of color bar to display.
color_map(str): The color map to use for the image.
data(np.ndarray): Custom data to display.
@ -1180,6 +1183,7 @@ class BECImageWidget(RPCBase):
def image(
self,
monitor: "str",
monitor_type: "Optional[Literal['1d', '2d']]" = "2d",
color_map: "Optional[str]" = "magma",
color_bar: "Optional[Literal['simple', 'full']]" = "full",
downsample: "Optional[bool]" = True,
@ -2096,6 +2100,15 @@ class BECWaveform(RPCBase):
colormap(str, optional): Scale the colors of curves to colormap. If None, use the default color palette.
"""
@rpc_call
def enable_scatter(self, enable: "bool"):
"""
Enable/Disable scatter plot on all curves.
Args:
enable(bool): If True, enable scatter markers; if False, disable them.
"""
@rpc_call
def enable_fps_monitor(self, enable: "bool" = True):
"""
@ -2419,6 +2432,15 @@ class BECWaveformWidget(RPCBase):
enabled(bool): If True, enable the FPS monitor.
"""
@rpc_call
def enable_scatter(self, enabled: "bool"):
"""
Enable the scatter plot of the plot widget.
Args:
enabled(bool): If True, enable the scatter plot.
"""
@rpc_call
def lock_aspect_ratio(self, lock: "bool"):
"""

View File

@ -8,6 +8,14 @@ from qtpy.QtCore import QObject, Qt
from qtpy.QtCore import Signal as pyqtSignal
class NonDownsamplingScatterPlotItem(pg.ScatterPlotItem):
def setDownsampling(self, ds=None, auto=None, method=None):
pass
def setClipToView(self, state):
pass
class Crosshair(QObject):
positionChanged = pyqtSignal(tuple)
positionClicked = pyqtSignal(tuple)
@ -64,7 +72,7 @@ class Crosshair(QObject):
continue
pen = item.opts["pen"]
color = pen.color() if hasattr(pen, "color") else pg.mkColor(pen)
marker_moved = pg.ScatterPlotItem(
marker_moved = NonDownsamplingScatterPlotItem(
size=10, pen=pg.mkPen(color), brush=pg.mkBrush(None)
)
marker_moved.skip_auto_range = True
@ -73,7 +81,7 @@ class Crosshair(QObject):
# Create glowing effect markers for clicked events
for size, alpha in [(18, 64), (14, 128), (10, 255)]:
marker_clicked = pg.ScatterPlotItem(
marker_clicked = NonDownsamplingScatterPlotItem(
size=size,
pen=pg.mkPen(None),
brush=pg.mkBrush(color.red(), color.green(), color.blue(), alpha),

View File

@ -72,6 +72,7 @@ class BECWaveform(BECPlotBase):
"set_y_lim",
"set_grid",
"set_colormap",
"enable_scatter",
"enable_fps_monitor",
"lock_aspect_ratio",
"export",
@ -371,6 +372,20 @@ class BECWaveform(BECPlotBase):
else:
raise ValueError("Identifier must be either an integer (index) or a string (curve_id).")
def enable_scatter(self, enable: bool):
"""
Enable/Disable scatter plot on all curves.
Args:
enable(bool): If True, enable scatter markers; if False, disable them.
"""
for curve in self.curves:
if isinstance(curve, BECCurve):
if enable:
curve.set_symbol("o") # You can choose any symbol you like
else:
curve.set_symbol(None)
def plot(
self,
arg1: list | np.ndarray | str | None = None,

View File

@ -42,7 +42,7 @@ class CurveConfig(ConnectionConfig):
parent_id: Optional[str] = Field(None, description="The parent plot of the curve.")
label: Optional[str] = Field(None, description="The label of the curve.")
color: Optional[str | tuple] = Field(None, description="The color of the curve.")
symbol: Optional[str] = Field("o", description="The symbol of the curve.")
symbol: Optional[str | None] = Field("o", description="The symbol of the curve.")
symbol_color: Optional[str | tuple] = Field(
None, description="The color of the symbol of the curve."
)
@ -201,7 +201,8 @@ class BECCurve(BECConnector, pg.PlotDataItem):
symbol(str): Symbol of the curve.
"""
self.config.symbol = symbol
self.apply_config()
self.setSymbol(symbol)
self.updateItems()
def set_symbol_color(self, symbol_color: str):
"""

View File

@ -53,6 +53,7 @@ class BECWaveformWidget(BECWidget, QWidget):
"set_auto_range",
"set_grid",
"enable_fps_monitor",
"enable_scatter",
"lock_aspect_ratio",
"export",
"export_to_matplotlib",
@ -650,6 +651,15 @@ class BECWaveformWidget(BECWidget, QWidget):
"""
self.waveform.set_outer_axes(show)
def enable_scatter(self, enabled: bool):
"""
Enable the scatter plot of the plot widget.
Args:
enabled(bool): If True, enable the scatter plot.
"""
self.waveform.enable_scatter(enabled)
def lock_aspect_ratio(self, lock: bool):
"""
Lock the aspect ratio of the plot widget.