diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index e7edb0e7448f..ddecd7034d91 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -2903,6 +2903,7 @@ class NavigationToolbar2: ('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous view', 'back', 'back'), ('Forward', 'Forward to next view', 'forward', 'forward'), + ('Views', 'Snap into planar views', 'matplotlib', 'snap_view'), (None, None, None, None), ('Pan', 'Left button pans, Right button zooms\n' @@ -2935,6 +2936,16 @@ def __init__(self, canvas): self.mode = _Mode.NONE # a mode string for the status bar self.set_history_buttons() + def draw_lambda(elev, azim): + ax = self.canvas.figure.gca() + ax.view_init(elev=elev, azim=azim) + self.canvas.draw_idle() + self.options = [ + ("Go to X-Y view", functools.partial(draw_lambda, elev=90, azim=-90)), + ("Go to Y-Z view", functools.partial(draw_lambda, elev=0, azim=0)), + ("Go to X-Z view", functools.partial(draw_lambda, elev=0, azim=-90)) + ] + def set_message(self, s): """Display a message on toolbar or in status bar.""" @@ -3366,6 +3377,9 @@ def save_figure(self, *args): """ raise NotImplementedError + def snap_view(self, *args): + raise NotImplementedError + def update(self): """Reset the Axes stack.""" self._nav_stack.clear() diff --git a/lib/matplotlib/backends/backend_qt.py b/lib/matplotlib/backends/backend_qt.py index 0b0240c90310..55d134ac1f94 100644 --- a/lib/matplotlib/backends/backend_qt.py +++ b/lib/matplotlib/backends/backend_qt.py @@ -968,6 +968,14 @@ def save_figure(self, *args): QtWidgets.QMessageBox.StandardButton.NoButton) return fname + def snap_view(self, *args): + action = self._actions.get('snap_view') + btn = self.widgetForAction(action) + menu = QtWidgets.QMenu() + for label, action in self.options: + menu.addAction(label, action) + menu.exec(btn.mapToGlobal(QtCore.QPoint(0, btn.height()))) + def set_history_buttons(self): can_backward = self._nav_stack._pos > 0 can_forward = self._nav_stack._pos < len(self._nav_stack) - 1