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

15 次查看(过去 30 天)
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 个评论
Vinothkumar Sethurasu
编辑:Jan 2021-5-21
>>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.

请先登录,再进行评论。

采纳的回答

Jan
Jan 2021-5-21
编辑:Jan 2021-5-21
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 个评论
Jan
Jan 2021-5-21
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Graphics Object Properties 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by