matlab动态标注及定位鼠标坐标代码
程序说明:本程序可以实现扑捉画面上鼠标的坐标,可以进行动态标注。 function dynpoint(arg,h)
% Show the coordinates of a plot dynamically %
% To start use:
% dynpoint(h)
% where h is a handle to a figure, axes or e.g. line.
%
% To delete use:
% dynpoint('delete',h)
% where h is a handle to a figure, axes or e.g. line.
% (you may also use: dynpoint delete) %
% There can only be one dynamic plotter in a figure at a time.
%
% Example:
% subplot(211), hline = plot(sin(1:10)) % subplot(212), plot(sin(1:100)) % dynpoint(hline)
% 2010,11.30
if ~exist('arg','var') %判断输入变量的个数
arg = gcf;
end
if ~isstr(arg)
handle = arg;
arg = 'init';
end
switch arg
case 'init'
if ~ishandle(handle)
error('h is not a handle')
end
[h,ax] = h2hax(handle);
% delete old dynamic text object ht = findobj(h,'tag',[mfilename '_text']); if any(ht)
delete(ht)
end
% text window at the bottom left corner
% text in centred
uicontrol(h,...
'style','text',...
'pos',[10 10 150 30],... 'fontsize',20,...
'tag',[mfilename '_text'],... 'userdata',ax(1))
% do the dynamic thing... set(h,'windowbuttonmotionfcn',[mfilename ' move'])
case 'move'
ht = findobj(gcbf,'tag',[mfilename '_text']);
ax = overobj('axes');
if ~any(ax)
ax = get(ht,'userdata'); end
p = get(ax,'currentpoint'); p(1); %x坐标值
P(3); %y坐标值
set(ht,'string',sprintf('(%s)','标注
'));
case 'delete'
if ~exist('h','var')
h = gcf;
end
[h,ax] = h2hax(h);
set(h,'windowbuttonmotionfcn','')
ht = findobj(h,'tag',[mfilename '_text']);
delete(ht)
end
% ----------
function [h,ax]=h2hax(handle)
typ = get(handle,'type'); if strcmp(typ,'figure')
h = handle;
ax = findobj(h,'type','axes'); elseif strcmp(typ, 'axes') h = get(handle,'parent');
ax = handle;
elseif strcmp( get(get(handle,'parent'), 'type'), 'axes' )
ax = get(handle,'parent');
h = get(ax,'parent');
End