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')
![]() | ホールド状態のテスト | クローズ要求関数 | ![]() |