Skip to content

Commit 6d8de16

Browse files
committed
Fix ROI selection (avoid deprecated matplotlib RectangleSelector features) [fixes #154]
1 parent 670b655 commit 6d8de16

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

spectral/graphics/spypylab.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def set_registry(self, registry=None):
9797
self.registry = registry
9898

9999
def connect(self, registry=None, event=None, callback=None):
100-
'''Binds the callback to the registry and begins receiving event.
100+
'''Binds the callback to the registry and begins receiving events.
101101
102102
Arguments:
103103
@@ -236,8 +236,7 @@ def on_key_release(self, event):
236236
kp = KeyParser(event.key)
237237
key = kp.key
238238
if key is None and self.view.selector is not None and \
239-
self.view.selector.get_active() and kp.mods_are('shift') \
240-
and self.view.selector.eventpress is not None:
239+
self.view.selector.get_active() and kp.mods_are('shift'):
241240
print('Resetting selection.')
242241
self.view.selector.eventpress = None
243242
self.view.selector.set_active(False)
@@ -766,8 +765,6 @@ def init_callbacks(self):
766765

767766
# Class update event callback
768767
def updater(*args, **kwargs):
769-
if self.classes is None:
770-
self.set_classes(args[0].classes)
771768
self.refresh()
772769
callback = MplCallback(registry=self.callbacks_common,
773770
event='spy_classes_modified',
@@ -785,11 +782,14 @@ def updater(*args, **kwargs):
785782
button=1,
786783
useblit=True,
787784
spancoords='data',
788-
drawtype='box',
789-
rectprops = \
790-
self.selector_rectprops)
785+
props= \
786+
self.selector_rectprops,
787+
state_modifier_keys=\
788+
{'square': None,
789+
'center': None})
791790
self.selector.set_active(False)
792791
except:
792+
raise
793793
self.selector = None
794794
msg = 'Failed to create RectangleSelector object. Interactive ' \
795795
'pixel class labeling will be unavailable.'
@@ -814,18 +814,22 @@ def label_region(self, rectangle, class_id):
814814
Returns the number of pixels reassigned (the number of pixels in the
815815
rectangle whose class has *changed* to `class_id`.
816816
'''
817-
if self.classes is None:
818-
self.classes = np.zeros(self.data_rgb.shape[:2], dtype=np.int16)
817+
show_classes = self.classes is None
818+
if show_classes:
819+
self.set_classes(np.zeros(self.data_rgb.shape[:2], dtype=np.int16))
819820
r = rectangle
820821
n = np.sum(self.classes[r[0]:r[1], r[2]:r[3]] != class_id)
821822
if n > 0:
822823
self.classes[r[0]:r[1], r[2]:r[3]] = class_id
824+
if show_classes:
825+
self.show_classes()
826+
self.set_display_mode('overlay')
823827
event = SpyMplEvent('spy_classes_modified')
824828
event.classes = self.classes
825829
event.nchanged = n
826830
self.callbacks_common.process('spy_classes_modified', event)
827831
# Make selection rectangle go away.
828-
self.selector.to_draw.set_visible(False)
832+
self.selector.set_visible(False)
829833
self.refresh()
830834
return n
831835
return 0
@@ -850,7 +854,7 @@ def _select_rectangle(self, event1, event2):
850854
self.selection = [r1, r2 + 1, c1, c2 + 1]
851855
self.selector.set_active(False)
852856
# Make the rectangle display until at least the next event
853-
self.selector.to_draw.set_visible(True)
857+
self.selector.set_visible(True)
854858
self.selector.update()
855859

856860
def _guess_mode(self):

0 commit comments

Comments
 (0)