How to show the position of your mouse in a GUI that has two Axes?

16 visualizzazioni (ultimi 30 giorni)
Dear all,
I have a GUI that has two axes, Main_Axes and Side_Axes.
Now I want when mouse is over a point in the Main_Axes, it will show the same position of the mouse in the Side_Axes.
So I made a function that I called 'mouseMove', that start * the mouse position
function mouseMove (object, eventdata)
C = get (gca, 'CurrentPoint');
X = C(1,1);
Y = C(1,2);
I = getimage;
hold on
plot(X, Y, 'y*')
hold off
Now in the callback I add this code
set(handles.Main_Axes,'HandleVisibility','ON');
set(handles.Side_Axes,'HandleVisibility','OFF');
imshow(I) % to show 'I' in the Main_Axes
axes(handles.Side_Axes)
set (gca, 'WindowButtonMotionFcn', @mouseMove);
This makes the yellow star always appear in the Main_Axes, but it should appear in the Side_Axes.
Any idea how to fix that?
Meshoo

Risposta accettata

Walter Roberson
Walter Roberson il 9 Feb 2016
set (gca, 'WindowButtonMotionFcn', {@mouseMove, handles});
function mouseMove(object, eventdata, handles)
if ~isfield(handles, 'side_pointer') || ~ishandle(handles.side_pointer)
pointersize = 30;
handles.side_pointer = scatter(nan, nan, pointersize, 'y', 'Marker', '*');
guidata(object, handles);
end
C = get(handles.Main_Axes, 'CurrentPoint');
x = C(1,1); y = C(1,2);
%move the cursor
set(handles.side_pointer, 'XData', x, 'YData', y);
%zoom around the cursor
zoomwidth = 64;
xleft = max(0, x-zoomwidth/2);
ybot = max(0, y-zoomwidth/2);
set(handles.Side_Axes, 'XLim', [xleft xleft+zoomwidth], 'YLim', [ybot ybot+zoomwidth]);
drawnow();
  2 Commenti
Adam Danz
Adam Danz il 16 Giu 2020
If I'm not mistaken, I think that first line should be
set(gcf, . . . )
WindowButtonMotionFcn is a figure property.

Accedi per commentare.

Più risposte (2)

John BG
John BG il 8 Feb 2016
Hi Meshoo
may be you can modify GetMousePosition.m to achive
'when mouse is over a point in the Main_Axes, it will show the same position of the mouse in the Side_Axes.'
what is the purpose of doing so?
  1 Commento
Meshooo
Meshooo il 9 Feb 2016
Thank you for the link. I didn't explain the purpose from that because I don't want to make it more complicated. So the idea is to show a zoom in the Side_Axes of the same point where the mouse is over in the Main_Axes. This will help the user to see more details in the Side_Axes.
Do you know any one tried to do similar thing?

Accedi per commentare.


Ruben Gaitan Ortiz
Ruben Gaitan Ortiz il 16 Nov 2018
I had a similar problem. Thank you!

Categorie

Scopri di più su Interactive Control and Callbacks in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by