Main Content

マウス クリックをグループの親オブジェクトに渡す

この例では、オブジェクトのグループがマウス クリックを親オブジェクトに渡す方法を説明します。親オブジェクトはグループ内の全オブジェクトに作用します。

目的と設計

オブジェクト グループのいずれかのメンバーを 1 回マウス クリックして、グループ内のすべてのオブジェクトに作用を及ぼす 1 つのボタンダウン コールバックを実行する場合を考えます。

  • グループに追加するグラフィックス オブジェクトを定義します。

  • グラフィックス オブジェクトの親オブジェクトとして hggroup オブジェクトを割り当てます。

  • 任意のオブジェクトがクリックされたときに実行する関数を定義し、その関数ハンドルを hggroup オブジェクトの ButtonDownFcn プロパティに割り当てます。

  • マウス クリックをオブジェクトの親に渡せるように、グループ内のすべてのオブジェクトの HitTest プロパティを off に設定します。

オブジェクト階層とキー プロパティ

この例では、次のオブジェクト階層を使用します。

MATLAB コード

2 つの関数をもつファイルを作成します。

  • pickPatch — グラフィックス オブジェクトを作成するメイン関数

  • groupCBhggroup コールバックのローカル関数

関数 pickPatch は 3 つの patch オブジェクトを作成し、hggroup オブジェクトの子オブジェクトにします。各パッチの HitTest プロパティを off に設定すると、マウス クリックが親オブジェクトに指示されます。

function pickPatch
   figure
   x = [0 1 2];
   y = [0 1 0];
   hGroup = hggroup('ButtonDownFcn',@groupCB);
   patch(x,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+2,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+3,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
end

groupCB コールバックは hggroup に含まれるすべてのオブジェクトに作用します。コールバック関数 groupCB は、それに渡されるコールバック ソース引数 (src) を使用して、patch オブジェクトのハンドルを取得します。

コールバック ソース引数 (hggroup オブジェクトへのハンドル) を使用することで、グローバル データを作成したりコールバックに追加の引数を渡したりする必要がなくなります。

いずれかのパッチを左クリックすると、3 つの全パッチの面の色がランダムな RGB カラー値に変わります。

function groupCB(src,~)
   s = src.Children;
   set(s,'FaceColor',rand(1,3))
end

コールバック関数についての詳細は、グラフィックス オブジェクトのコールバックの作成を参照してください。