Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

iptSetPointerBehavior

ポインター動作構造体をグラフィックス オブジェクトに保存

説明

iptSetPointerBehavior(obj,pointerBehavior) は、指定したグラフィックス オブジェクト obj に、指定したポインター動作構造体を保存します。obj がオブジェクトの配列である場合、iptSetPointerBehavior は各オブジェクトに同じ構造体を保存します。

Figure にポインター マネージャーがインストールされている場合、ポインター マネージャーは、マウスが Figure 内のオブジェクトの上に移動したりオブジェクトを離れたりしたときに、これらの関数を呼び出します。iptPointerManager を参照してください。

iptSetPointerBehavior(obj,[]) は、グラフィックス オブジェクト (複数可) からポインター動作をクリアします。

iptSetPointerBehavior(obj,fun) は、enterFcn フィールドを指定された関数 fun に設定し、traverseFcn および exitFcn の各フィールドを [] に設定して、ポインター動作構造体を作成します。一般的に必要なのは enterFcn フィールドのみであるため、この構文は便利のために提供されています。

すべて折りたたむ

2 つの四角形パッチ グラフィックス オブジェクトがある Figure を表示します。

patchobj1 = patch([.25 .75 .75 .25 .25],...
               [.25 .25 .75 .75 .25], 'r');
patchobj2 = patch([.05 .15 .15 .05 .05],...
               [.05 .05 .95 .95 .05], 'b');
xlim([0 1])
ylim([0 1])

3 つのフィールド enterFcnexitFcn、および traverseFcn をもつ構造体を作成して、ポインター動作を指定します。

ポインターが指定のオブジェクトに重なるたびに、マウス ポインターが花形に変わり、Figure のタイトルが変化します。enterFcn フィールドを使用して、この動作を指定します。

pb.enterFcn = @(fig,currentPoint) set(fig, ...
    'Name','Over Patch', ...
    'Pointer','fleur');

ポインターがオブジェクトを離れると、ポインターと Figure タイトルが元に戻ります。exitFcn フィールドを使用して、この動作を指定します。

pb.exitFcn = @(fig,currentPoint) set(fig, ...
    'Name','', ...
    'Pointer','arrow');

ポインターがオブジェクトを横切るときは、Figure を変更しません。traverseFcn フィールドを [] に設定します。

pb.traverseFcn = [];

現在の Figure にポインター マネージャーを作成します。その後、ポインター動作構造体 pb を両方のパッチ オブジェクトに関連付けます。Figure の中でマウスを動かして、ポインター動作の変化を確認します。

iptSetPointerBehavior([patchobj1,patchobj2],pb);
iptPointerManager(gcf)

四角形パッチ グラフィックス オブジェクトを Figure に表示します。イメージの x 軸範囲と y 軸範囲を増やして、パッチの周囲に白色の領域を追加します。

patchobj = patch([.25 .75 .75 .25 .25],...
               [.25 .25 .75 .75 .25], 'r');
xlim([0 1])
ylim([0 1])

3 つのフィールドをもつ pb という名前の構造体を作成して、ポインター動作を指定します。

  • enterFcn フィールドと exitFcn フィールドを [] に設定し、ポインターがグラフィックス オブジェクトの境界を通過したときは何もアクションを実行しません。

  • traverseFcn フィールドには、この例の最後に補助関数として定義される関数 overMe のハンドルを設定します。ポインターがグラフィックス オブジェクトの上に移動すると、補助関数はポインターの位置に応じてポインター シンボルを変更します。

pb.enterFcn = [];
pb.exitFcn = [];
pb.traverseFcn = @overMe;

現在の Figure にポインター マネージャーを作成します。次に、ポインター動作構造体 pb をパッチ グラフィックス オブジェクト patchobj に関連付けます。Figure の中でマウスを動かして、ポインター動作の変化を確認します。

iptPointerManager(gcf);
iptSetPointerBehavior(patchobj,pb);

補助関数

function overMe(hFigure,currentPoint)
%overMe Set figure pointer depending on pointer location.
%   overMe(hFigure,currentPoint) sets the hFigure mouse pointer to be
%   either 'topr', 'topl', 'botr', 'botl', depending on whether
%   currentPoint is in the top right, top left, bottom right, or bottom
%   left of the hFigure's current axes.

hAxes = get(hFigure,'CurrentAxes');

% Get the axes position in pixel units.
oldUnits = get(hAxes,'Units');
set(hAxes,'Units','pixels');
axesPosition = get(hAxes,'Position');
set(hAxes,'Units',oldUnits);

x_middle = axesPosition(1) + 0.5*axesPosition(3);
y_middle = axesPosition(2) + 0.5*axesPosition(4);

x = currentPoint(1,1);
y = currentPoint(1,2);

if (x > x_middle)
    if (y > y_middle)
        pointer = 'topr';
    else
        pointer = 'botr';
    end
else
    if (y > y_middle)
        pointer = 'topl';
    else
        pointer = 'botl';
    end
end

set(hFigure,'Pointer',pointer);
end

入力引数

すべて折りたたむ

グラフィックス オブジェクト。figure、axes、uipanel、または image グラフィックス オブジェクトのハンドルとして指定します。obj には、グラフィックス オブジェクトの配列を指定することもできます。

ポインター動作。3 つのフィールドをもつ構造体として指定します。

ポインターの特定のアクションを定義するには、これらのフィールドの値に関数ハンドルを設定します。フィールドを [] に設定した場合は、何のアクションも発生しません。関数ハンドルをポインター マネージャーで呼び出す場合、ポインター マネージャーは、2 つの引数 (figure オブジェクトとポインターの現在の位置) を渡します。

フィールド呼び出される場合
enterFcnオブジェクト上をマウス ポインターが移動したときに呼び出されます。
traverseFcnマウス ポインターがオブジェクトに重なったときに呼び出され、オブジェクト内部をマウスが移動するたびに再度呼び出されます。
exitFcnマウス ポインターがオブジェクトを離れたときに呼び出されます

ポインターがオブジェクト上に移動したときのポインター動作。関数ハンドルとして指定します。

データ型: function_handle

ヒント

  • iptSetPointerBehavior を使用してポインター動作を指定した後、iptSetPointerBehavior を使用せずに Figure ポインターを変更した場合、iptPointerManager は新しい動作を反映するように更新されません。iptSetPointerBehavior を使用せずに Figure ポインターを変更する方法としては、Polygon などの ROI オブジェクトを使用する、別のグラフィックス オブジェクトを使用する、別のカスタム UI を使用する、またはコールバック内からポインターを変更するコードを使用するなどの方法があります。

バージョン履歴

R2006a で導入