我正在尝试为鼠标功能开发代码。我需要的是以下内容。
1。)如果鼠标位于绘图范围内,则可以更改为小十字光标,如果超出绘图范围,则更改回箭头。
2。)能够点击并绘制绘图边界内的点,并保留光标类型的小十字准线。
我得到了第一个工作要求。我遇到第二个问题。我正在尝试使用mathworks中的修改后的ginput函数myginput。在myginput函数中,我将函数更改为myginput()并设置arg1 == 1并设置strpointertype ='Crosshair'。
在我创建mouseover.m的函数中,在if / else语句中检查光标是否在绘图范围内我设置ButtonDownFcn来调用myginput。如果我运行程序并尝试在绘图边界内单击,则使用@myginput,“输入参数太多”会出现错误。我没有使用任何输入参数,因为我已经在myginput函数中指定了它们。
有关如何解决此问题的任何建议?主GUI通过
调用鼠标悬停功能set (gcf, 'WindowButtonMotionFcn', @mouseover);
并且用于绘图的轴句柄是plot_data。因此,只需使用带有标签plot_data的绘图制作虚拟GUI(alpha),并在此GUI中设置全局变量。
function varargout = alpha_OutputFcn(hObject, eventdata, handles)
global plot_data
% Get default command line output from handles structure
varargout{1} = handles.output;
% now attach the function to the axes
set(gca,'ButtonDownFcn', @mouseclick)
set (gcf, 'WindowButtonMotionFcn', @mouseover);
以下是我的代码,用于mouseover.m函数
function [data] = mouseover(gcbo,eventdata,handles)
global plot_data
cp = get(gca,'Position'); %get postion data of the current axes
LeftBound = cp(1);
RightBound = LeftBound + cp(3);
LowerBound = cp(2);
UpperBound = LowerBound + cp(4);
%check to see if mouse is within the bounds of the axes
in_bounds = @(mx, my) LeftBound < mx && mx < RightBound && LowerBound < my && my < UpperBound;
mp = get(gcf, 'CurrentPoint'); %get current position of mouse
if in_bounds(mp(1,1),mp(1,2)) == 1
set(gcf,'pointer','Crosshair');
set(gca,'ButtonDownFcn', @myginput)
else
set(gcf,'pointer','Arrow');
end
答案 0 :(得分:0)
如果您指的是http://www.mathworks.com/matlabcentral/fileexchange/12770文件交换中可用的myginput,则看起来它不会被用作回调。 ButtonDownFcn的回调函数应始终采用两个输入参数。它们是src和eventData。请参阅http://www.mathworks.com/help/matlab/creating_plots/function-handle-callbacks.html处的函数句柄回调文档。您可以尝试定义自己的函数,该函数接受所需的两个输入,然后从该函数中调用myginput。