MATLAB: Change the mouse pointer while hovering above the axes.

find axes area

Hi, We are having a MATLAB based application that allows user to select a particular point on the axes for an inbuilt feature. Enabling this feature changes the mouse pointer to a crosshair that allows the user to select a point inside the axes. With the current implementation, the pointer changes to crosshair as soon as we enable this feature (by clicking a push button in the toolbar). We want to change the implementation in such a way that the pointer changes to crosshair only when the mouse pointer is inside the axes. we are looking for a behavior similar to the zoom action of mat lab where the mouse pointer turns to a zoom icon when the current position is inside the axes.
I tried to implement this using the WindowButtonMotionFcn listener of the figure and using the overobj('axes'); method. Unfortunately this does not work for us because in our case the axes is placed in an uipanel which is then placed inside the figure. Since the axes is placed in the uipanel, overobj(axes) does not find the axes as mentioned here: http://undocumentedmatlab.com/blog/undocumented-mouse-pointer-functions
I was wondering how the zoom functionality of mat lab works – so that we could apply the same logic here. Could you be able to help us identify how the zoom functionality adjusts the mouse pointer when inside and outside the axes/draw able area?
Thank you, Dhanya

Best Answer

Have you tried using iptPointerManager? It allows you do define pointer behavior when the mouse enters/traverses/exits a graphics object. Here's a brief description:
% Create and activate a pointer manager for the figure:
iptPointerManager(hFigure, 'enable');
% Have the pointer change to a cross when the mouse enters an axes object:
iptSetPointerBehavior(hAxes, @(hFigure, currentPoint)set(hFigure, 'Pointer', 'cross'));
You can also set custom behavior for when the mouse moves across or exits a graphics object.