MATLAB Answers

Change the mouse pointer while hovering above the axes.

95 views (last 30 days)
Dhanya
Dhanya on 27 Feb 2017
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

  1 Comment

Ian Scott MacKenzie
Ian Scott MacKenzie on 16 Feb 2020
Using iptPointerManager and iptSetPointerBehaviour partially works for me. There is a cross for the pointer, but the long crosshairs traversing the screen horizontally and vertically are still there as well. I want a cross for a pointer, but do not want the default crosshairs. Is there a way to remove the crosshair lines and just have the specified pointer (e.g., a cross)?

Sign in to comment.

Accepted Answer

Josh
Josh on 28 Feb 2017
Edited: Walter Roberson on 26 Nov 2019
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.

  3 Comments

Dhanya
Dhanya on 2 Mar 2017
Hi Josh,
Thank you for the suggestion. We'll try this out and let you know the results.
Thanks again,
Dhanya
mcg
mcg on 27 Aug 2018
I can't get this method to work with pcshow() inside of guide. The mouse pointer always turns to the rotation symbol.
Walter Roberson
Walter Roberson on 27 Aug 2018
pcshow() creates its own controls, including setting the pointer.
You would have to set the WindowButtonMotionFcn callback of the figure after calling pcshow() in order to override what pcshow() does. It would not be enough to change the pointer once after calling pcshow(), as the WindowButtonMotionFcn changes the pointer every time it is invoked (unless the pointer happens to be set to 'custom')

Sign in to comment.

More Answers (0)