[英]Matlab rotate3D and buttondownfcn incompatibility
大家好,在此先感謝您的幫助。
我目前正在Matlab中使用一個UI,該UI包括4個不同的軸以顯示各種信息。 基本上,我要顯示MRI數據(即3D數據)。 我使用1個軸顯示3個垂直平面,該平面在其中心分割了數據(axeMain),並使用了3個其他軸分別顯示了平面(axeX,axeY和axeZ)。 我有一個主斧,希望旋轉(僅在主軸系統上),並且我希望能夠選擇其他3個斧頭(僅具有1個平面的軸)上的坐標。 我也無法翻譯,但這超出了我的問題范圍。
因此,基本上,我在所有3軸上選擇坐標(在飛機上使用buttondownfcn)都沒有問題,並且在mainAxe上使用rotate3D也沒有問題。 但是,如果我嘗試同時使兩者同時工作,則buttondownfcn不再起作用。 我不明白為什么要這么做(我有一些想法,但僅此而已),我也不知道如何解決。 基本上我對這些功能的代碼是這樣的:
rotate3d(handles.axisMain);
%some other code, setting up other UI stuff
%allow selection on the 3 static plains.
set([handles.axeX,handles.axeY,handles.axeZ], 'buttondownfcn', @getCoord);
所以我的問題基本上是:為什么這兩個功能不能同時使用,以及如何在最小的代碼更改的情況下解決該問題呢?
謝謝。
編輯:這是我當前界面的打印屏幕。 我希望只能使用最后3個軸(每個軸僅包含1個平面)來選擇坐標。 我還希望能夠僅在第一個軸(具有3個平面的軸)上旋轉圖像。 希望這個澄清。
我還想指出這一點:在測試之后,我發現如果啟動了rotate3D,鼠標單擊根本不會升高。 問題不在於我用來獲取坐標本身的邏輯中,而是在未觸發click事件中。
另外,我知道該事件不在我嘗試打印的表面上。 實際的代碼是這樣的:
set(h, 'buttondownfcn', @getCoord);
set(h,'HitTest','on');
其中h是一個曲面的句柄,並且每個曲面都以這種方式處理。
我找到了確切的解決方案!
探索代碼rotate3d(hAxe,'on')
我發現,他們重點線是getuimode(hFig,'Exploration.Rotate3d')
至極回報uitools.uimode
包含ButtonDownFilter
和ModeStateData
方法。
最后,我通過以下方式解決了這個問題:
rotate3d(hAxe,'on')
uiMode = getuimode(hFig,'Exploration.Rotate3d');
uiMode.ButtonDownFilter = @mycallback;
哪里:
hAxe
是軸對象的句柄
hFig
是圖形對象的句柄
@mycallback
是讓buttondownfcn
和rotate3d
工作的回調,如Matlab的幫助示例
因此,您必須標記不希望被忽略的對象:
set(hAxe,'tag','DoNotIgnore')
並編寫回調:
function [flag] = mycallback(obj,event_obj)
% If the tag of the object is 'DoNotIgnore', then return true
objTag = obj.Tag;
if strcmpi(objTag,'DoNotIgnore')
flag = true;
else
flag = false;
end
也許
set(handles.axisMain, 'buttondownfcn', @getCoord);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.