グラフィックス コールバックのクラス メソッド
メソッドの参照
通常のクラス メソッドをグラフィックス オブジェクトのコールバックとして使用するには、メソッドを参照する関数ハンドルとしてコールバック プロパティを指定します。以下に例を示します。
uicontrol('Style','slider','Callback',@obj.sliderCallback)
ここで、クラスは sliderCallback
と呼ばれるメソッドを定義し、obj
はクラスのインスタンスです。
静的メソッドをコールバックとして使用するには、コールバック プロパティを静的メソッドへの参照を必要とするクラス名が含まれる関数ハンドルとして指定します。
uicontrol('Style','slider','Callback',@MyClass.sliderCallback)
メソッドのコールバックの構文
通常メソッドの場合は、ドット表記を使用して、コールバックを最初の引数として定義するクラスのインスタンスを渡します。
@obj.methodName
次の入力引数を使用してコールバック メソッドを定義します。
最初の引数となる定義クラスのインスタンス
イベント ソース ハンドル
イベント データ
関数シグネチャは以下の形式になります。
function methodName(obj,src,eventData) ... end
静的メソッドの場合は、必須のクラス名により MATLAB® が指定されたクラスのメソッドへ確実にディスパッチします。
@MyClass.methodName
2 つの入力引数、イベント ソース ハンドルとイベント データを使用して静的コールバック メソッドを定義します。
関数シグネチャは以下の形式になります。
function methodName(src,eventData)
追加の引数の引き渡し
MATLAB により渡されるソースとイベント データ引数だけでなく、別の引数をコールバックに渡す場合は、無名関数を使用することができます。グラフィックス オブジェクトの Callback
プロパティに無名関数を割り当てる基本的な構文において、最初の引数はオブジェクトです。
@(src,event)callbackMethod(object,src,eventData,arg1,...argn)
関数シグネチャは以下の形式になります。
function methodName(obj,src,eventData,varargin) ... end
スライダー コールバックに対するクラス メソッドの使用
この例では、ユーザー クラスのメソッドを uicontrol スライダーのコールバックとして使用する方法を示します。
SeaLevelSlider
クラスでは、スライダーを作成し、指標付きのイメージの色範囲を変えて、海水面の変化を表します。
クラス定義
SeaLevelSlider
を以下のメンバーをもつハンドル クラスとして定義します。
このクラス プロパティは、figure と axes ハンドルおよび計算された色範囲を格納します。
クラス コンストラクターはグラフィックス オブジェクトを作成し、スライダー コールバックを割り当てます。
スライダーのコールバック関数は、3 つの必須の引数 (クラスのインスタンス、イベント ソースのハンドル、イベント データ) を受け取ります。イベント データ引数は空であり、使用されません。
uicontrol コールバックは、ドット表記を使用して
...'Callback',@obj.sliderCallback
のようにコールバック メソッドを参照します。
classdef SeaLevelSlider < handle properties Figure Axes CLimit end methods function obj = SeaLevelSlider(x,map) obj.Figure = figure('Colormap',map,... 'Position',[100,100,560,580],... 'Resize','off'); obj.Axes = axes('DataAspectRatio',[1,1,1],... 'XLimMode','manual','YLimMode','manual',... 'Parent',obj.Figure); image(x,'CDataMapping','scaled',... 'Parent',obj.Axes); obj.CLimit = get(obj.Axes,'CLim'); uicontrol('Style','slider',... 'Parent',obj.Figure,... 'Max',obj.CLimit(2)-10,... 'Min',obj.CLimit(1)-1,... 'Value',obj.CLimit(1),... 'Units','normalized',... 'Position',[0.9286,0.1724,0.0357,0.6897],... 'SliderStep',[0.003,0.005],... 'Callback',@obj.sliderCallback); end function sliderCallback(obj,src,~) minVal = get(src,'Value'); maxVal = obj.CLimit(2); obj.Axes.CLim = [minVal maxVal]; end end end
SeaLevelAdjuster クラスの使用
このクラスは、MATLAB 製品に付属している cape
イメージを使用しています。イメージ データを取得するには、load
コマンドを使用します。
load cape X map
データを読み込んだ後、そのイメージの SeaLevelSlider
オブジェクトを作成します。
slaObj = SeaLevelSlider(X,map);
スライダーを移動してカラー マッピングを変更し、海水面の上昇を可視化します。