Main Content

setPositionConstraintFcn

ROI オブジェクトの位置制約関数の設定

関数 setPositionConstraintFcn は推奨されません。代わりに、新しい ROI で DrawingArea プロパティを使用してください。詳細については、互換性の考慮事項を参照してください。

説明

setPositionConstraintFcn(h,fcn) は、ROI オブジェクト h の位置制約関数を指定した関数ハンドル fcn に設定します。オブジェクトがマウスのドラッグによって移動されると、次の構文を使用して制約関数が呼び出されます。

constrained_position = fcn(pos)

すべて折りたたむ

イメージ上に四角形の ROI を表示します。

imshow("cameraman.tif")
h = imrect(gca,[10 10 100 100]);

タイトルに四角形の位置を表示します。

addNewPositionCallback(h,@(p) title(mat2str(p,3)));

四角形移動時にタイトルを更新します。四角形の 1 辺をドラッグしてイメージの境界外への移動を試みます。

元の XLimYLim の範囲内に四角形を保持するために、makeConstrainToRectFcn を使用して位置制約関数を指定します。

fcn = makeConstrainToRectFcn("imrect",get(gca,"XLim"),get(gca,"YLim"));
setPositionConstraintFcn(h,fcn);

次に、マウスを使用して四角形をドラッグします。四角形がイメージの境界を越えられなくなっていることを確認します。

入力引数

すべて折りたたむ

ROI オブジェクト。imellipseimlineimpointimpoly または imrect オブジェクトとして指定します。

関数ハンドル。ハンドルとして指定します。この関数を作成するには、makeConstrainToRectFcn を使用します。関数は数値配列を入力として受け入れ、数値配列を出力として返さなければなりません。オブジェクトで getPosition を呼び出したとき、両方の配列は同じ形式でなければなりません。詳細については、関数ハンドルの作成を参照してください。

バージョン履歴

R2008a で導入

すべて折りたたむ

R2018b: 関数 setPositionConstraintFcn は非推奨

R2018b 以降、既存の ROI オブジェクトのセットが新しい ROI オブジェクトのセットに置き換えられています。新しいオブジェクトは、面の色の透明度など、さらに便利な機能を提供します。新しいクラスでは、移動やクリックなどの ROI の変化に応答するために使用できるイベントもサポートされています。現時点では、以前の ROI オブジェクトを削除する予定はありませんが、追加された機能や柔軟性を活用するために、新しい ROI に切り替えてください。新しい ROI 関数を使用した ROI の作成方法の詳細については、ROI の形状の作成を参照してください。

既存の ROI では、ROI を描画または移動できる場所を制御する関数を作成できます。その後、その位置制約関数を ROI に登録します。ROI を描画または移動できる領域を指定するには、DrawingArea プロパティを使用します。

コードの更新

フリーハンド ROI または多角形 ROI と共に使用している setPositionConstraintFcn のすべてのインスタンスを更新してください。

非推奨の使用方法推奨される代替案

この例では、点 ROI を作成し、setPositionConstraintFcn メソッドを使用して ROI の作成と移動をベースのイメージの境界内に制限します。

imshow("cell.tif")
h = impoint(gca,20,60);
% Make a function that constrains movement of the point
x = get(gca,"XLim");
y = get(gca,"YLim");
fcn = makeConstrainToRectFcn("impoint",x,y);;
% Apply the constraint function to the ROI.
setPositionConstraintFcn(h,fcn);

新しい ROI オブジェクトの 1 つを作成し、DrawingArea プロパティを使用して、ROI を作成または移動できる範囲を指定します。たとえば、このコードでは、10 ピクセルの余白をイメージ境界内に作成します。

imshow("cell.tif")
h = drawpoint(gca,"Position",[20 60])
[height width] = size(I); %Get image dimensions
h.DrawingArea = [10,10,(width-20),(height-20)];