簡體   English   中英

Matlabrotate3D和buttondownfcn不兼容

[英]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包含ButtonDownFilterModeStateData方法。

最后,我通過以下方式解決了這個問題:

rotate3d(hAxe,'on')
uiMode = getuimode(hFig,'Exploration.Rotate3d');
uiMode.ButtonDownFilter = @mycallback;

哪里:

  • hAxe是軸對象的句柄

  • hFig是圖形對象的句柄

  • @mycallback是讓buttondownfcnrotate3d工作的回調,如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM