使用ginput进行鼠标功能的问题

时间:2013-02-04 07:06:37

标签: matlab mouseevent mouseover

我正在尝试为鼠标功能开发代码。我需要的是以下内容。

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

1 个答案:

答案 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。