Source code for wbia.plottool.interact_helpers

# -*- coding: utf-8 -*-
from wbia.plottool import custom_figure
import utool as ut

# (print, print_, printDBG, rrr, profile) = utool.inject(__name__,
#                                                       '[interact_helpers]',
#                                                       DEBUG=False)
ut.noinject(__name__, '[interact_helpers]')

# ==========================
# HELPERS
# ==========================

# RCOS TODO: We should change the fnum, pnum figure layout into one managed by
# gridspec.


[docs]def detect_keypress(fig): def on_key_press(event): if event.key == 'shift': shift_is_held = True # NOQA def on_key_release(event): if event.key == 'shift': shift_is_held = False # NOQA fig.canvas.mpl_connect('key_press_event', on_key_press) fig.canvas.mpl_connect('key_release_event', on_key_release)
[docs]def clicked_inside_axis(event): in_axis = event is not None and (event.inaxes is not None and event.xdata is not None) if not in_axis: pass # print(' ...out of axis') else: pass # print(' ...in axis') return in_axis
[docs]def clicked_outside_axis(event): return not clicked_inside_axis(event)
[docs]def begin_interaction(type_, fnum): if ut.VERBOSE: print('\n<<<< BEGIN %s INTERACTION >>>>' % (str(type_).upper())) print('[inter] starting %s interaction, fnum=%r' % (type_, fnum)) fig = custom_figure.figure(fnum=fnum, docla=True, doclf=True) ax = custom_figure.gca() disconnect_callback(fig, 'button_press_event', axes=[ax]) return fig
[docs]def disconnect_callback(fig, callback_type, **kwargs): # print('[df2] disconnect %r callback' % callback_type) axes = kwargs.get('axes', []) for ax in axes: ax._hs_viztype = '' cbid_type = callback_type + '_cbid' cbfn_type = callback_type + '_func' cbid = fig.__dict__.get(cbid_type, None) cbfn = fig.__dict__.get(cbfn_type, None) if cbid is not None: fig.canvas.mpl_disconnect(cbid) else: cbfn = None fig.__dict__[cbid_type] = None return cbid, cbfn
[docs]def connect_callback(fig, callback_type, callback_fn): """ wrapper around fig.canvas.mpl_connect References: http://matplotlib.org/users/event_handling.html button_press_event button_release_event draw_event key_press_event key_release_event motion_notify_event pick_event resize_event scroll_event figure_enter_event figure_leave_event axes_enter_event axes_leave_event """ # printDBG('[ih] register %r callback' % callback_type) if callback_fn is None: return # Store the callback in the figure diction so it doesnt lose scope cbid_type = callback_type + '_cbid' cbfn_type = callback_type + '_func' fig.__dict__[cbid_type] = fig.canvas.mpl_connect(callback_type, callback_fn) fig.__dict__[cbfn_type] = callback_fn
# REGIESTERED_INTERACTIONS = [] # def register_interaction(interaction): # global REGIESTERED_INTERACTIONS # REGIESTERED_INTERACTIONS.append(interaction)