| Graphics | ![]() |
FigureとAxesの保護
特定のFigureまたはAxesがグラフィックス出力に対するターゲットにならないように(すなわち、それらがgcfまたはgcaにならないように)することが重要である場合があります。この例としては、ユーザインタフェースを実現するUicontrolsを含むFigureがあります。
関数newplotやハンドル番号を出力するか暗示的に参照する他の関数(すなわち、gca, gcf, gco, cla, clf, close, findobj)から視覚可能なハンドル番号のリストからFigureやAxesのハンドル番号を除去することによって、MATLABが特定のFigureまたはAxesに描画しないようにすることができます。ハンドル番号の非表示を制御するプロパティには、HandleVisibilityとShowHiddenHandlesの2つがあります。
HandleVisibility プロパティ
HandleVisibilityは、すべてのオブジェクトがもつプロパティです。3つの異なる範囲内でハンドル番号の可視化を制御します。プロパティは、つぎのような値をとることができます。
on - オブジェクトのハンドル番号は、MATLABコマンドラインまたはM-ファイルから実行される任意の関数に利用できます。これは、デフォルトの設定です。callback - オブジェクトのハンドル番号は、スクリーンのスタック順序の最上部にあるにもかからわらず、コマンドラインで実行されるすべての関数から隠されています。しかし、コールバックルーチンの実行中(ユーザの動作に応じて実行されるMATLABステートメントまたは関数)、ハンドル番号はgca、gcf、gco、findobj、newplotなどのすべての関数で見ることができます。この設定によって、コールバックルーチンからMATLABのハンドル番号にアクセスする関数を利用できる一方で、コマンドラインでのユーザの入力によって、オブジェクトが不注意に侵害されることがないようにします。off - オブジェクトのハンドル番号は、コマンドラインおよびコールバックルーチンで実行されるすべての関数から隠されています。この設定は、オブジェクトを破壊するようなユーザコマンドから保護したい場合に有効です。 たとえば、GUIが(関数evalを使って)コールバックルーチン内部から計算されるテキスト文字列形式のユーザ入力を受け入れる場合、'close all'などの文字列はGUIを破壊していまいます。このような状況から保護するために、キーオブジェクトに対して、HandleVisibilityを一時的にoffに設定することができます。
user_input = get(editbox_handle,'String'); set(gui_handles,'HandleVisibility','off') eval(user_input) set(gui_handles,'HandleVisibility','commandline')
gca、および、gcf が出力する値 保護されているFigureがスクリーンの最上部にあり、その下に保護されていないFigureがスタックされている場合、gcfはスタック内の保護されていない最上部のFigureのハンドル番号を出力します。gcaについても同様です。保護されていないFigure、または、Axesが存在していない場合、gcf、または、gcaを呼び出すと、MATLABはそのハンドル番号を出力するために、Figure、または、Axesを作成します。
保護されたオブジェクトへのアクセス
RootのShowHiddenHandlesプロパティは、ハンドルの可視化制御を有効にしたり、無効にしたりします。デフォルトでは、ShowHiddenHandlesはoffで、MATLABは HandleVisibilityプロパティの設定に従います。onに設定すると、すべてのハンドル番号は、コマンドラインおよびコールバックルーチン内部から見えます。これは、通常は隠されているAxesのテキストラベルのハンドルを含めて、随時存在するすべてのグラフィックスオブジェクトにアクセスしたい場合に有効です。
関数closeは、hiddenオプションを使って、見えないFigureへのアクセスも可能にします。たとえば、
close('hidden')
は、保護されていてもスクリーンの最上部のFigureを閉じます。allとhiddenオプションの組み合わせ
close('all','hidden')
| ホールド状態のテスト | クローズ要求関数 | ![]() |