arrows_renderer = arrow_x = arrow_y = None FOV_ARROWS = { \ "50um[0.0]": [20.0] \ } FOV_ARROWS_SIZE=100 FOV_ARROWS_ORIGIN=Point(image.getData().width/4, image.getData().height*3/4) FOV_FUTURE=None def update_arrows(): global arrows_renderer, arrow_x, arrow_y if arrows_renderer is not None: fov = microscope.get_preset_label() args = FOV_ARROWS.get(fov, None) if args is not None: angle=args[0] x,y = FOV_ARROWS_ORIGIN.x, FOV_ARROWS_ORIGIN.y a=math.radians(angle) xa,ya=int(x+FOV_ARROWS_SIZE*math.cos(a)), int(y-FOV_ARROWS_SIZE*math.sin(a)) arrow_x.update(FOV_ARROWS_ORIGIN, Point(xa,ya)) angle=angle+90 a=math.radians(angle) xa,ya=int(x+FOV_ARROWS_SIZE*math.cos(a)), int(y-FOV_ARROWS_SIZE*math.sin(a)) arrow_y.update(FOV_ARROWS_ORIGIN, Point(xa,ya)) else: arrow_x.update(FOV_ARROWS_ORIGIN, FOV_ARROWS_ORIGIN) arrow_y.update(FOV_ARROWS_ORIGIN, FOV_ARROWS_ORIGIN) def task_update_arrows(): global arrows_renderer while arrows_renderer is not None: try: if arrows_renderer.isShowing(): update_arrows() time.sleep(5.0) time.sleep(1.0) except: pass def start_arrows(renderer=None): global arrows_renderer, arrow_x, arrow_y, FOV_FUTURE if arrows_renderer is None: arrows_renderer = renderer if renderer else show_panel(image) arrow_x = Overlays.Arrow(Pen(Color.GREEN)) arrow_y = Overlays.Arrow(Pen(Color.GREEN.darker().darker())) arrows_renderer.addOverlays([arrow_x,arrow_y]) #update_arrows() FOV_FUTURE = fork(task_update_arrows,)[0] def stop_arrows(renderer=None): global arrows_renderer, arrow_x, arrow_y, FOV_FUTURE if arrows_renderer is not None: arrows_renderer.removeOverlays([arrow_x,arrow_y]) arrows_renderer=None FOV_FUTURE.cancel(True) try: join(FOV_FUTURE) except: pass