我試圖爲鼠標放在函數上開發代碼。我需要的是以下內容。將鼠標放在函數上使用ginput的問題
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
我實際上剛開始工作我自己的功能。我製作了一個鼠標懸停功能,如果光標在圖的邊界內,則調用選擇點功能。我只需要添加刪除點的功能。我只需要弄清楚如何確定點擊點是否已經接近已經繪製的其他點。 – roldy