matlab函數getline(圖像處理工具箱)返回一個多段線(先前已用光標定義)的位置,點擊或按下返回鍵或空格鍵。MATLAB:修改getline()以刪除'雙擊'結束輸入'功能
由於我的黃油手指和意外雙擊我想刪除結束雙擊的能力。
我需要改變什麼部分,或者我需要尋找哪些函數,我無法找到雙擊在matlab中如何定義。
乾杯!
matlab函數getline(圖像處理工具箱)返回一個多段線(先前已用光標定義)的位置,點擊或按下返回鍵或空格鍵。MATLAB:修改getline()以刪除'雙擊'結束輸入'功能
由於我的黃油手指和意外雙擊我想刪除結束雙擊的能力。
我需要改變什麼部分,或者我需要尋找哪些函數,我無法找到雙擊在matlab中如何定義。
乾杯!
MATLAB將「回調」功能與圖形對象相關聯,圖形對象定義了當單擊鼠標,按下按鍵等時要執行的操作。在getline()
中,要查看的部分是NextButtonDown()
子功能。這是在第一次鼠標按下以啓動線路後與後續鼠標按下相關聯的回調。關鍵是檢查SelectionType
數字屬性,這將是open
雙擊。如果是這樣的話,它會關閉這個數字。因此,要禁用該功能,只需刪除額外的案例並檢查邏輯。這裏是我的R2009b中的版本的差異:
306,310d305
< selectionType = get(GETLINE_FIG, 'SelectionType');
< if (~strcmp(selectionType, 'open'))
< % We don't want to add a point on the second click
< % of a double-click
<
322,328d316
<
< end
<
< if (~strcmp(get(GETLINE_FIG, 'SelectionType'), 'normal'))
< % We're done!
< set(GETLINE_H1, 'UserData', 'Completed');
< end
由@JohnColby提供的答案通過編輯GETLINE.m功能文件解決您的問題。基本上你會註釋掉每一行,檢查是否執行雙擊。該信息通過查詢'SelectionType'
figure屬性獲得。另外,如果你像我一樣,你討厭修改內置函數,那麼考慮下面的解決方案,不涉及改變任何現有的功能。下面是我們如何使用它的一個例子:
h = addlistener(handle(gcf), 'WindowButtonDownFcn', 'PostSet', @changedWBDFcn);
[x,y] = getline();
delete(h)
plot(x,y, 'Color','r')
的想法是創建一個被觸發的'WindowButtonDownFcn'
人物屬性更改時事件偵聽器。我們使用它來插入一個函數,該函數在之前設置的回調函數之前被調用(實際上,我們用自己的函數替換回調函數,在最後調用舊回調函數)。
這允許我們插入一個部分來檢查通話是否由雙擊觸發,並簡單地跳過這樣的事件。
這必須做兩次,因爲GETLINE第一次點擊時首先調用FirstButtonDown
,這會在隨後的點擊中設置NextButtonDown
來調用,因此使用flag
變量來區分這兩種情況。
針對上述事件監聽器函數的代碼:
function changedWBDFcn(src,ev,flag)
hFig = ev.AffectedObject; %# figure handle
currFcn = ev.NewValue; %# current callback function
delete(src); %# delete event listener
if nargin < 3, flag = false; end %# determine flag
%# hijack WindowButtonDownFcn function
set(hFig, 'WindowButtonDownFcn',{@wbdFcn,currFcn,flag})
%# callback function
function wbdFcn(o,e,currFcn,flag)
%# skip anything but single-clicks
if ~strcmpi(get(hFig,'SelectionType'),'normal')
return
end
%# evaluate previous callback function
hgfeval(currFcn) %# getline('FirstButtonDown'),getline('NextButtonDown')
%# repeat process after first click
if flag
addlistener(handle(hFig), 'WindowButtonDownFcn', ...
'PostSet', {@changedWBDFcn,true});
end
end
end
爲此歡呼,我需要在第一時間迅速和骯髒地完成它,但我會稍後嘗試實現它,因爲它似乎是更好的方法。 – Tom
您好,感謝您的幫助,但是,我不得不這樣做略有不同(我認爲),我需要註釋掉情況下,「selectionType '是'正常'而不是'開放',即325> 328和288> 290行。但是這現在可行,所以謝謝! – Tom