2013-02-04 70 views
1

我試圖爲鼠標放在函數上開發代碼。我需要的是以下內容。將鼠標放在函數上使用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 

回答

0

如果你指的是myginput在http://www.mathworks.com/matlabcentral/fileexchange/12770文件交換可用,它看起來並不像它被用作寫回調。 ButtonDownFcn的回調函數總是需要兩個輸入參數。他們是src和eventData。請參閱http://www.mathworks.com/help/matlab/creating_plots/function-handle-callbacks.html上的函數句柄回調文檔。你可以嘗試定義你自己的函數,它接受所需的兩個輸入,然後在該函數中調用myginput。

+0

我實際上剛開始工作我自己的功能。我製作了一個鼠標懸停功能,如果光標在圖的邊界內,則調用選擇點功能。我只需要添加刪除點的功能。我只需要弄清楚如何確定點擊點是否已經接近已經繪製的其他點。 – roldy

相關問題