0

皆さん、こんにちは。ご協力ありがとうございます。

私は現在、さまざまな情報を表示するための 4 つの異なる軸を含む matlab の UI に取り組んでいます。基本的に、表示したい MRI データ (つまり 3D データ) があります。1 つの軸を使用して、データを中心 (axeMain) で分割する 3 つの垂直面を表示し、面を個別に表示する他の 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);

したがって、私の質問は基本的に次のとおりです。これらの 2 つの関数が連携しないのはなぜですか。また、理想的にはコードの変更を最小限に抑えて、その問題を回避する方法を教えてください。

ありがとう。

編集:これは私の現在のインターフェースの印刷画面です。最後の3つの軸(それぞれに1つの平面のみを含む)でのみ使用して座標を選択できるようにしたい。また、最初の斧(3つの平面を持つもの)でのみ画像を回転できるようにしたいと考えています。これが明確になることを願っています。

UI

また、これにも注意したいと思います。私のテストでは、rotate3D がアクティブになっていると、マウス クリックがまったく発生しないことがわかりました。問題は、座標自体を取得するために使用するロジックではなく、クリック イベントが発生しないことです。

また、印刷しようとしている表面にイベントが表示されていないことも承知しています。実際のコードは次のようになります。

    set(h, 'buttondownfcn', @getCoord);
    set(h,'HitTest','on');

ここで、h はサーフェスのハンドルで、各サーフェスはこの方法で処理されます。

4

2 に答える 2

1

私は正確な解決策を見つけました!

のコードを調べると、キー行がとメソッドを含む戻り値であるrotate3d(hAxe,'on')ことがわかりました。getuimode(hFig,'Exploration.Rotate3d')uitools.uimodeButtonDownFilterModeStateData

最後に、次の方法で問題を解決しました。

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

どこ:

  • hAxe軸オブジェクトへのハンドルです

  • hFigFigure オブジェクトのハンドルです。

  • @mycallbackMatlab のヘルプbuttondownfcnの例のよう にrotate3d連携して機能するコールバックです

したがって、無視したくないオブジェクトにタグを付ける必要があります。

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
于 2016-05-25T10:44:38.910 に答える
0

多分

set(handles.axisMain, 'buttondownfcn', @getCoord);
于 2013-03-13T15:40:54.787 に答える