Skip to content
Snippets Groups Projects
Commit 09278c09 authored by Francois POLACK's avatar Francois POLACK
Browse files

feat: Improved cursor and ROI window indicator

parent de6c0dd3
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,11 @@ def on_mouse_move(event): ...@@ -35,6 +35,11 @@ def on_mouse_move(event):
if isinstance(event.canvas.figure, ActiveFigure): if isinstance(event.canvas.figure, ActiveFigure):
event.canvas.figure.on_mouse_move(event) event.canvas.figure.on_mouse_move(event)
def on_mouse_drag(event):
""" Activated by a mouse move event and relayed to the relevant figure"""
if isinstance(event.canvas.figure, ActiveFigure):
event.canvas.figure.on_mouse_drag(event)
def on_release(event): def on_release(event):
""" Activated by a mouse button up event and relayed to the relevant figure""" """ Activated by a mouse button up event and relayed to the relevant figure"""
# print("figure", event.canvas.figure.number, event.button, event.xdata, event.ydata) # print("figure", event.canvas.figure.number, event.button, event.xdata, event.ydata)
...@@ -81,9 +86,13 @@ class ActiveFigure(fig.Figure): ...@@ -81,9 +86,13 @@ class ActiveFigure(fig.Figure):
self.ROI=[0,0,0,0] self.ROI=[0,0,0,0]
""" ROI rectangle set-up by the mouse up event """ """ ROI rectangle set-up by the mouse up event """
self.ROIwindow=[0,0,0,0]
self.selectaxes=None self.selectaxes=None
"""" Memorize the axes group where the mouse entered the drag mode """ """" Memorize the axes group where the mouse entered the drag mode """
self.mvcid=0
def on_press(self,event): def on_press(self,event):
""" Called after a mouse button down event. """ Called after a mouse button down event.
Initiate the drawing of a new rectangle Initiate the drawing of a new rectangle
...@@ -92,7 +101,7 @@ class ActiveFigure(fig.Figure): ...@@ -92,7 +101,7 @@ class ActiveFigure(fig.Figure):
self.r1.set_visible(True) self.r1.set_visible(True)
self.r2.set_visible(True) self.r2.set_visible(True)
if event.inaxes is not None: if event.inaxes is not None:
self.selectaxes=event.inaxes # self.selectaxes=event.inaxes
org=(event.xdata,event.ydata) org=(event.xdata,event.ydata)
self.r1.set_xy(org) self.r1.set_xy(org)
self.r2.set_xy(org) self.r2.set_xy(org)
...@@ -104,9 +113,10 @@ class ActiveFigure(fig.Figure): ...@@ -104,9 +113,10 @@ class ActiveFigure(fig.Figure):
self.pxorg[0],self.pxorg[1], 0, 0, org[0],org[1],0, 0) self.pxorg[0],self.pxorg[1], 0, 0, org[0],org[1],0, 0)
event.canvas.manager.toolbar.set_message(smsg) event.canvas.manager.toolbar.set_message(smsg)
self.mvcid = event.canvas.mpl_connect('motion_notify_event', on_mouse_move) event.canvas.mpl_disconnect(self.mvcid)
self.mvcid = event.canvas.mpl_connect('motion_notify_event', on_mouse_drag)
def on_mouse_move(self,event): def on_mouse_drag(self,event):
""" Called after a mouse move event. Update the rectangle drawing """ """ Called after a mouse move event. Update the rectangle drawing """
if event.inaxes is self.selectaxes : if event.inaxes is self.selectaxes :
org=self.r1.get_xy() org=self.r1.get_xy()
...@@ -128,11 +138,27 @@ class ActiveFigure(fig.Figure): ...@@ -128,11 +138,27 @@ class ActiveFigure(fig.Figure):
event.canvas.draw() event.canvas.draw()
def on_mouse_move(self,event):
smsg=""
if event.inaxes is self.selectaxes :
pos=(event.xdata,event.ydata)
px=int(round(1e-3*pos[0]/self.hmap.pixel[0],0)-self.hmap.origin[0])
py= int(round(1e-3*pos[1]/self.hmap.pixel[1],0)-self.hmap.origin[1])
smsg="pos:({:d}, {:d}) [{:.1f}, {:.1f} ]mm".format(px, py, pos[0],pos[1] )
else:
smsg="origin:({:d}, {:d}) size:({:d}, {:d}) [{:.1f}, {:.1f} : {:.1f}, {:.1f}]mm".format(
self.ROI[0],self.ROI[1],self.ROI[2],self.ROI[3],self.ROIwindow[0],self.ROIwindow[1],self.ROIwindow[2],self.ROIwindow[3])
# event.canvas.manager.toolbar.set_message(smsg)
event.canvas.manager.toolbar.set_message(smsg)
def on_release(self, event): def on_release(self, event):
""" Called after the mouse button is released. """ Called after the mouse button is released.
Update the `ActiveFigure.ROI`variable to memorize the drawn rectangle, and print its extent on standard output Update the `ActiveFigure.ROI`variable to memorize the drawn rectangle, and print its extent on standard output
""" """
event.canvas.mpl_disconnect(self.mvcid) event.canvas.mpl_disconnect(self.mvcid)
self.mvcid = event.canvas.mpl_connect('motion_notify_event', on_mouse_move)
x0,y0=self.r1.get_xy() x0,y0=self.r1.get_xy()
width=self.r1.get_width() width=self.r1.get_width()
if width < 0: if width < 0:
...@@ -146,10 +172,13 @@ class ActiveFigure(fig.Figure): ...@@ -146,10 +172,13 @@ class ActiveFigure(fig.Figure):
pwidth=int(round(1e-3*width/self.hmap.pixel[0],0)) pwidth=int(round(1e-3*width/self.hmap.pixel[0],0))
py0=int(round(1e-3*y0/self.hmap.pixel[1],0)-self.hmap.origin[1]) py0=int(round(1e-3*y0/self.hmap.pixel[1],0)-self.hmap.origin[1])
pheight=int(round(1e-3*height/self.hmap.pixel[1],0)) pheight=int(round(1e-3*height/self.hmap.pixel[1],0))
print("ROI window (({:.3f}, {:.3f}), {:.3f}, {:.3f}) mm". print("ROI window (({:.3f}, {:.3f}), {:.3f}, {:.3f}) mm".
format(x0, y0, width, height) ) format(x0, y0, width, height) )
print("ROI position & shape: (", px0, ",", py0,")", pwidth, ",", pheight) print("ROI position & shape: (", px0, ",", py0,")", pwidth, ",", pheight)
self.ROI=[px0, py0, pwidth, pheight] self.ROI=[px0, py0, pwidth, pheight]
self.ROIwindow=[x0, y0, width, height]
def new_active_figure(hmap, raw=False, percent=5): def new_active_figure(hmap, raw=False, percent=5):
...@@ -240,6 +269,7 @@ def new_active_figure(hmap, raw=False, percent=5): ...@@ -240,6 +269,7 @@ def new_active_figure(hmap, raw=False, percent=5):
org=((x[0]+hmap.pixel[0]*hmap.ROIorigin[0])*1e3, (y[0]+hmap.pixel[1]*hmap.ROIorigin[1])*1e3) org=((x[0]+hmap.pixel[0]*hmap.ROIorigin[0])*1e3, (y[0]+hmap.pixel[1]*hmap.ROIorigin[1])*1e3)
width=1e3*hmap.pixel[0]*hmap.ROIsize[0] width=1e3*hmap.pixel[0]*hmap.ROIsize[0]
height=1e3*hmap.pixel[1]*hmap.ROIsize[1] height=1e3*hmap.pixel[1]*hmap.ROIsize[1]
activefig.ROIwindow=[org[0], org[1], width,height]
#print ("ROI mm:",org, width, height) #print ("ROI mm:",org, width, height)
activefig.r1=patches.Rectangle(org, width, height, linewidth=1.5, edgecolor='w', facecolor='none', visible=True) activefig.r1=patches.Rectangle(org, width, height, linewidth=1.5, edgecolor='w', facecolor='none', visible=True)
activefig.r2=patches.Rectangle(org, width, height, linewidth=1.5,linestyle=(0,(5,5)), edgecolor='k', facecolor='none', visible=True) activefig.r2=patches.Rectangle(org, width, height, linewidth=1.5,linestyle=(0,(5,5)), edgecolor='k', facecolor='none', visible=True)
...@@ -248,6 +278,8 @@ def new_active_figure(hmap, raw=False, percent=5): ...@@ -248,6 +278,8 @@ def new_active_figure(hmap, raw=False, percent=5):
plt.connect('button_press_event', on_press) plt.connect('button_press_event', on_press)
plt.connect('button_release_event', on_release) plt.connect('button_release_event', on_release)
plt.connect('close_event', on_close) plt.connect('close_event', on_close)
activefig.selectaxes=plt.gca().axes
print(activefig.selectaxes)
activefig.canvas.manager.toolmanager.add_tool('Validate marked ROI', ROItool) activefig.canvas.manager.toolmanager.add_tool('Validate marked ROI', ROItool)
activefig.canvas.manager.toolbar.add_tool('Validate marked ROI', 'Superflat', 0) activefig.canvas.manager.toolbar.add_tool('Validate marked ROI', 'Superflat', 0)
...@@ -256,6 +288,6 @@ def new_active_figure(hmap, raw=False, percent=5): ...@@ -256,6 +288,6 @@ def new_active_figure(hmap, raw=False, percent=5):
# activefig.canvas.manager.toolbar.set_message('my message') # activefig.canvas.manager.toolbar.set_message('my message')
activefig.hmap=hmap activefig.hmap=hmap
activefig.mvcid = activefig.canvas.mpl_connect('motion_notify_event', on_mouse_move)
warnings.resetwarnings() warnings.resetwarnings()
return activefig return activefig
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment