Skip to content

Commit d950beb

Browse files
committed
Speed up mask highlighting
Signed-off-by: Brianna Major <[email protected]>
1 parent e32f3a3 commit d950beb

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

hexrdgui/hexrd_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ def create_raw_masks_dict(self, images_dict, display=False):
10791079
# Only apply visible masks for display
10801080
continue
10811081

1082-
if not mask.visible and not mask.show_border and not mask.highlight:
1082+
if not mask.visible and not mask.show_border:
10831083
# This mask should not be applied at all.
10841084
continue
10851085

hexrdgui/image_canvas.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ def setup_connections(self):
122122
HexrdConfig().oscillation_stage_changed.connect(
123123
self.oscillation_stage_changed)
124124
MaskManager().polar_masks_changed.connect(self.polar_masks_changed)
125+
# Update mask highlights without re-running expensive mask logic
126+
MaskManager().mask_highlights_changed.connect(
127+
self.mask_highlights_changed
128+
)
125129
HexrdConfig().overlay_renamed.connect(self.overlay_renamed)
126130
HexrdConfig().azimuthal_options_modified.connect(
127131
self.update_azimuthal_integral_plot)
@@ -1574,6 +1578,19 @@ def is_stereo_from_polar(self):
15741578
self.iviewer.project_from_polar
15751579
)
15761580

1581+
def mask_highlights_changed(self):
1582+
if not self.iviewer:
1583+
return
1584+
1585+
if self.mode == ViewType.raw:
1586+
self.clear_mask_highlights()
1587+
for det_name, ax in self.raw_axes.items():
1588+
self.highlight_masks(ax, det_name)
1589+
return
1590+
1591+
if self.mode in (ViewType.polar, ViewType.stereo):
1592+
self.update_mask_highlights(self.axis)
1593+
15771594
def polar_masks_changed(self):
15781595
skip = (
15791596
not self.iviewer or

hexrdgui/masking/mask_manager.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __init__(
3131
show_border=False,
3232
mode=None,
3333
xray_source=None,
34-
highlight=False
34+
highlight=False,
3535
):
3636
self.type = mtype
3737
self.visible = visible
@@ -232,6 +232,11 @@ def data(self, values):
232232
def highlight(self):
233233
return False
234234

235+
@highlight.setter
236+
def highlight(self, value):
237+
# Threshold masks do not support highlight; ignore assignments
238+
pass
239+
235240
def update_masked_arrays(self, view=ViewType.raw):
236241
self.masked_arrays = recompute_raw_threshold_mask()
237242

@@ -284,6 +289,9 @@ class MaskManager(QObject, metaclass=QSingleton):
284289
"""
285290
export_masks_to_file = Signal(dict)
286291

292+
"""Emitted when mask highlight states change"""
293+
mask_highlights_changed = Signal()
294+
287295
def __init__(self):
288296
super().__init__(None)
289297
self.masks = {}
@@ -361,6 +369,9 @@ def view_mode_changed(self, mode):
361369
self.view_mode = mode
362370
self.update_masks_for_active_beam()
363371

372+
def highlights_changed(self):
373+
self.mask_highlights_changed.emit()
374+
364375
def masks_changed(self):
365376
if self.view_mode in (ViewType.polar, ViewType.stereo):
366377
self.polar_masks_changed.emit()

hexrdgui/masking/mask_manager_dialog.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -430,12 +430,7 @@ def selected_changed(self):
430430
# Only update the mask highlights if the selected masks have changed
431431
# Debounce the update to avoid re-drawing too often
432432
self.selected_masks = masks_from_names
433-
if not hasattr(self, '_mask_highlight_update_timer'):
434-
timer = QTimer()
435-
timer.setSingleShot(True)
436-
timer.timeout.connect(MaskManager().masks_changed)
437-
self._mask_highlight_update_timer = timer
438-
self._mask_highlight_update_timer.start(100)
433+
MaskManager().highlights_changed()
439434

440435
if len(selected) == 0:
441436
return

0 commit comments

Comments
 (0)