#HeaderInfo
#type=ROITool
#name=Nudge ROIs
#version=0.0.1
#author=adminmblackledge
#EndHeaderInfo
import matplotlib.pyplot as pl
from matplotlib.widgets import Button, Slider
import numpy as np
class roi_nudger(object):
def _shift_rois(self, shift):
# Shift the rois in the current browser by a specified amount
# Params:
# =======
# shift: 2-tuple
# The amount by which to shift the ROI in the
# (up-down, left-right) direction.
vc = osirix.frontmostViewer()
rois = vc.selectedROIs()
for roi in rois:
roi.roiMove(shift[0], shift[1])
vc.needsDisplayUpdate()
# Widget events
def _up_pushed(self, evt):
self._shift_rois([0, int(-self.slider.val)])
def _left_pushed(self, evt):
self._shift_rois([int(-self.slider.val), 0])
def _right_pushed(self, evt):
self._shift_rois([int(+self.slider.val), 0])
def _down_pushed(self, evt):
self._shift_rois([0, int(+self.slider.val)])
def _close_event(self, evt):
stopRuntimeLoop() # Required for installed pyOsiriX plugins
def display(self):
# Begin display of the matploblib window
self.fig = pl.figure(figsize = (3, 3))
ax_slider = self.fig.add_axes([0.15, 0.05, 0.7, 0.05])
self.slider = Slider(ax_slider, label="Shift", valmin=0, valmax=15, valinit=2, valfmt="%d")
ax_down = self.fig.add_axes([0.4, 0.2, 0.2, 0.2])
self.button_down = Button(ax_down, label = 'D')
self.button_down.on_clicked(self._down_pushed)
ax_left = self.fig.add_axes([0.2, 0.4, 0.2, 0.2])
self.button_left = Button(ax_left, label='L')
self.button_left.on_clicked(self._left_pushed)
ax_right = self.fig.add_axes([0.6, 0.4, 0.2, 0.2])
self.button_right = Button(ax_right, label='R')
self.button_right.on_clicked(self._right_pushed)
ax_up = self.fig.add_axes([0.4, 0.6, 0.2, 0.2])
self.button_up = Button(ax_up, label='U')
self.button_up.on_clicked(self._up_pushed)
self.fig.canvas.mpl_connect('close_event', self._close_event)
ax_text = self.fig.add_axes([0.2, 0.85, 0.6, 0.1])
ax_text.axis('off')
ax_text.text(0.5, 0.0, "Nudge ROIs", verticalalignment = 'bottom', horizontalalignment = 'center')
pl.show()
startRuntimeLoop() # Required for installed pyOsiriX plugins to keep the event loop going.
roi = roi_nudger()
roi.display()