| Graphics | ![]() |
プロパティ値によるオブジェクトの検索 -- findobj
関数 findobjは、オブジェクト階層を迅速に検索して特定のプロパティ値をもつオブジェクトのハンドル番号を取り出します。検索を開始するオブジェクトを設定しないと、findobjは、Rootオブジェクトから検索し、設定するすべてのプロパティ名とプロパティ値の組み合わせを見つけます。
例題 - オブジェクトの検索
つぎの正弦関数のプロットは、関数の特定の値にラベル付けを行うTextオブジェクトを含んでいます。
値sin(t) = .707 のラベルの付いたテキスト文字列を[pi/4,sin(pi/4)]の現在位置から関数が同じ値をもつ[3*pi/4,sin(3*pi/4)]の点(図のグレイの部分)まで移動したい場合を考えます。このために、その点のラベルをつけたTextオブジェクトのハンドル番号を取り出し、そのPositionプロパティを変更する必要があります。
findobjを使用するには、オブジェクトを一意的に識別するプロパティ値を選び出します。この場合、Textの Stringプロパティを使います。
text_handle = findobj('String','\leftarrowsin(t) = .707');
つぎに、オブジェクトを新しい位置に移動し、Axesの単位でTextのPositionを定義します。
set(text_handle,'Position',[3*pi/4,sin(3*pi/4),0])
findobjは、Rootオブジェクトから検索を開始する代わりに、階層内の検索開始点を設定することによって、検索範囲を制限することもできます。この結果、検索するオブジェクトが多い場合、検索が速くなります。前の例では、興味のあるTextオブジェクトはカレントAxes内にあるので、以下のように入力することができます。
text_handle = findobj(gca,'String','\leftarrowsin(t) = .707');
| カレントFigure、Axesオブジェクト | オブジェクトのコピー | ![]() |