Skip to content

Commit 5b74d91

Browse files
committed
Speed up highlight artist plotting
Signed-off-by: Brianna Major <[email protected]>
1 parent 5f39dea commit 5b74d91

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

hexrdgui/image_canvas.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ def __init__(self, parent=None, image_names=None):
8282
self.blit_manager = BlitManager(self)
8383
self.raw_view_images_dict = {}
8484
self._mask_boundary_artists = []
85-
self._mask_highlight_artists = []
8685
self._latest_compute_view_worker = None
8786
self._waterfall_plot_dialog = None
8887

@@ -397,6 +396,10 @@ def blit_artists(self):
397396
def overlay_artists(self):
398397
return self.blit_artists.setdefault('overlays', {})
399398

399+
@property
400+
def mask_highlight_artists(self):
401+
return self.blit_artists.setdefault('mask_highlights', {})
402+
400403
def remove_all_overlay_artists(self):
401404
self.blit_manager.remove_artists('overlays')
402405
self.blit_manager.artists['overlays'] = {}
@@ -2219,10 +2222,7 @@ def update_mask_highlights(self, axis):
22192222
self.highlight_masks(axis)
22202223

22212224
def clear_mask_highlights(self):
2222-
for artist in self._mask_highlight_artists:
2223-
artist.remove()
2224-
2225-
self._mask_highlight_artists.clear()
2225+
self.remove_all_mask_highlight_artists()
22262226

22272227
def get_mask_verts(self, visible_attr, det=None):
22282228
# Create an instrument once that we will re-use
@@ -2325,9 +2325,23 @@ def highlight_masks(self, axis, det=None):
23252325
'edgecolor': 'none',
23262326
'fill': True,
23272327
}
2328+
2329+
highlight_artists = self.mask_highlight_artists.setdefault(det or 'default', [])
2330+
23282331
for vert in all_verts:
23292332
polygon = Polygon(vert, **kwargs)
2330-
self._mask_highlight_artists.append(axis.add_patch(polygon))
2333+
polygon.set_animated(True)
2334+
axis.add_patch(polygon)
2335+
highlight_artists.append(polygon)
2336+
2337+
self.blit_manager.update()
2338+
2339+
def remove_all_mask_highlight_artists(self):
2340+
self.blit_manager.remove_artists('mask_highlights')
2341+
self.blit_manager.artists['mask_highlights'] = {}
2342+
2343+
def remove_mask_highlight_artists(self, key):
2344+
self.blit_manager.remove_artists('mask_highlights', key)
23312345

23322346

23332347
class PolarXAxisTickLocator(AutoLocator):

hexrdgui/masking/mask_manager_dialog.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from operator import attrgetter
77
import re
88

9-
from PySide6.QtCore import QObject, Qt
9+
from PySide6.QtCore import QObject, Qt, QTimer
1010
from PySide6.QtWidgets import (
1111
QComboBox, QDialog, QDialogButtonBox, QFileDialog, QMenu,
1212
QMessageBox, QTreeWidgetItem, QVBoxLayout
@@ -425,8 +425,16 @@ def selected_changed(self):
425425
mask.highlight = False
426426
for mask in masks_from_names:
427427
mask.highlight = True
428-
self.selected_masks = masks_from_names
429-
MaskManager().masks_changed()
428+
if set(self.selected_masks) != set(masks_from_names):
429+
# Only update the mask highlights if the selected masks have changed
430+
# Debounce the update to avoid re-drawing too often
431+
self.selected_masks = masks_from_names
432+
if not hasattr(self, '_mask_highlight_update_timer'):
433+
timer = QTimer()
434+
timer.setSingleShot(True)
435+
timer.timeout.connect(MaskManager().masks_changed)
436+
self._mask_highlight_update_timer = timer
437+
self._mask_highlight_update_timer.start(100)
430438

431439
if len(selected) == 0:
432440
return

0 commit comments

Comments
 (0)