How to get pointer location as grid point of an axes in matlab guide?

15 views (last 30 days)
In MATLAB GUIDE, i have a application to place a imgae object on the exact grid point loaction of an axes.
I have a solution to place the object on random loaction on the axes through getting the pointer location from the command " get(0,'PointerLocation')".
For the current application, the pointer location need to be exact grid point of the axes.
Suggest me a solution.
  5 Comments
Vinothkumar Sethurasu
Vinothkumar Sethurasu on 20 May 2021
Edited: Jan on 21 May 2021
>>The grid mesh prepared on create function with these commands.
xlim([0 1]);
ylim([0 0.5]);
set(gca,'Xtick', 0:0.01:1);
set(gca,'Ytick', 0:0.0355:0.5);
>> The blue star is the image object need to be placed on the grid point. the image object is created by buttondown function with these commands,
handles.componentAxis(end)=axes('parent',handles.Sketch_window, ...
'position',[alpha-0.05 beta-0.04 0.1 0.1]);
matlabImage = imread('D:\Vinoth\star.png');
the alpha & beta values will be calculated from getting the pointer location from - get(0,'PointerLocation') command.
Now, i need to pick the exact grid intersection point to place the star image in a particular interval from the pre-specified grid mesh.

Sign in to comment.

Accepted Answer

Jan
Jan on 21 May 2021
Edited: Jan on 21 May 2021
It is hard to convert the global mouse position on the screen to a position in the axes. Therefore get(0,'PointerLocation') is not useful. The axes contain a 'CurrentPoint' property already, which can be used directly.
I do not understand, why or where you create new axes objects.
what about this example:
function [] = kkkj
AxesH = axes('XLim', [0 1], 'YLim', [0 0.5], ...
'Xtick', 0:0.01:1, 'Ytick', 0:0.0355:0.5, ...
'XGrid', 'on', 'YGrid', 'on', ...
'NextPlot', 'add', ... % as: hold on
'ButtonDownFcn', @myAxesClick);
end
function myAxesClick(AxesH, EventData)
P = get(AxesH, 'CurrentPoint'); % Mouse click position in Axes
XTick = get(AxesH, 'XTick'); % X and Y grid
YTick = get(AxesH, 'YTick');
[~, xm] = min(abs(P(1, 1) - XTick)); % Find nearest X and Y grid point
X = XTick(xm);
[~, ym] = min(abs(P(1, 2) - YTick));
Y = YTick(ym);
plot(X, Y, 'pb', 'MarkerSize', 20); % Plot a star
end
  3 Comments
Jan
Jan on 21 May 2021
interp1 is not implemented efficiently. This is not a problem, if the code involves a GUI interaction with a user, because waiting for the mouse click is still the bottleneck.

Sign in to comment.

More Answers (0)

Categories

Find more on Graphics Object Properties in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!