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

fix(roi): removed roi handle adding/removing inconsistencies

This commit is contained in:
2025-06-10 15:00:21 +02:00
committed by Jan Wyzula
parent 03474cf7f7
commit f9044996f6
3 changed files with 26 additions and 13 deletions

View File

@ -601,7 +601,6 @@ class ImageBase(PlotBase):
# Add to plot and controller (controller assigns color) # Add to plot and controller (controller assigns color)
self.plot_item.addItem(roi) self.plot_item.addItem(roi)
self.roi_controller.add_roi(roi) self.roi_controller.add_roi(roi)
roi.add_scale_handle()
return roi return roi
def remove_roi(self, roi: int | str): def remove_roi(self, roi: int | str):

View File

@ -235,7 +235,6 @@ class ROIPropertyTree(BECWidget, QWidget):
self._temp_roi = None self._temp_roi = None
self._set_roi_draw_mode(None) self._set_roi_draw_mode(None)
# register via controller # register via controller
final_roi.add_scale_handle()
self.controller.add_roi(final_roi) self.controller.add_roi(final_roi)
return True return True
return super().eventFilter(obj, event) return super().eventFilter(obj, event)

View File

@ -127,6 +127,7 @@ class BaseROI(BECConnector):
label: str | None = None, label: str | None = None,
line_color: str | None = None, line_color: str | None = None,
line_width: int = 5, line_width: int = 5,
movable: bool = True,
# all remaining pg.*ROI kwargs (pos, size, pen, …) # all remaining pg.*ROI kwargs (pos, size, pen, …)
**pg_kwargs, **pg_kwargs,
): ):
@ -155,6 +156,7 @@ class BaseROI(BECConnector):
gui_id=gui_id, gui_id=gui_id,
removable=True, removable=True,
invertible=True, invertible=True,
movable=movable,
**pg_kwargs, **pg_kwargs,
) )
@ -162,8 +164,13 @@ class BaseROI(BECConnector):
self._line_color = line_color or "#ffffff" self._line_color = line_color or "#ffffff"
self._line_width = line_width self._line_width = line_width
self._description = True self._description = True
self._movable = True # allow moving by default
self.setPen(mkPen(self._line_color, width=self._line_width)) self.setPen(mkPen(self._line_color, width=self._line_width))
# Reset Handles to avoid inherited handles from pyqtgraph
self.remove_scale_handles() # remove any existing handles from pyqtgraph.RectROI
self.add_scale_handle() # add custom scale handles
def set_parent(self, parent: Image): def set_parent(self, parent: Image):
""" """
Sets the parent image for this ROI. Sets the parent image for this ROI.
@ -337,8 +344,18 @@ class BaseROI(BECConnector):
) )
def add_scale_handle(self): def add_scale_handle(self):
"""Add scale handles to the ROI."""
return return
def remove_scale_handles(self):
"""Remove all scale handles from the ROI."""
handles = self.handles
for i in range(len(handles)):
try:
self.removeHandle(0)
except IndexError:
continue
def set_position(self, x: float, y: float): def set_position(self, x: float, y: float):
""" """
Sets the position of the ROI. Sets the position of the ROI.
@ -355,12 +372,7 @@ class BaseROI(BECConnector):
if controller and self in controller.rois: if controller and self in controller.rois:
controller.remove_roi(self) controller.remove_roi(self)
return # controller will call back into this method once deregistered return # controller will call back into this method once deregistered
handles = self.handles self.remove_scale_handles()
for i in range(len(handles)):
try:
self.removeHandle(0)
except IndexError:
continue
self.rpc_register.remove_rpc(self) self.rpc_register.remove_rpc(self)
self.parent_image.plot_item.removeItem(self) self.parent_image.plot_item.removeItem(self)
viewBox = self.parent_plot_item.vb viewBox = self.parent_plot_item.vb
@ -475,11 +487,6 @@ class RectangularROI(BaseROI, pg.RectROI):
self.addScaleHandle([0, 0.5], [1, 0.5]) # left edge self.addScaleHandle([0, 0.5], [1, 0.5]) # left edge
self.addScaleHandle([1, 0.5], [0, 0.5]) # right edge self.addScaleHandle([1, 0.5], [0, 0.5]) # right edge
self.handlePen = fn.mkPen("#ffff00", width=5) # bright yellow outline
self.handleHoverPen = fn.mkPen("#00ffff", width=4) # cyan, thicker when hovered
self.handleBrush = (200, 200, 0, 120) # semi-transparent fill
self.handleHoverBrush = (0, 255, 255, 160)
def _on_region_changed(self): def _on_region_changed(self):
""" """
Handles changes to the ROI's region. Handles changes to the ROI's region.
@ -616,6 +623,14 @@ class CircularROI(BaseROI, pg.CircleROI):
) )
self.sigRegionChanged.connect(self._on_region_changed) self.sigRegionChanged.connect(self._on_region_changed)
self._adorner = LabelAdorner(self) self._adorner = LabelAdorner(self)
self.hoverPen = fn.mkPen(color=(255, 0, 0), width=3, style=QtCore.Qt.DashLine)
self.handleHoverPen = fn.mkPen("lime", width=4)
def add_scale_handle(self):
"""
Adds scale handles to the circular ROI.
"""
self._addHandles() # wrapper around pg.CircleROI._addHandles
def _on_region_changed(self): def _on_region_changed(self):
""" """