copyobj
グラフィックス オブジェクトとその子オブジェクトのコピー
構文
new_handle = copyobj(h,p)
copyobj(___,'legacy')
説明
copyobj
は、グラフィックス オブジェクトのコピーを作成し、それらを新しい親に割り当てます。
新しい親は、コピーするオブジェクトに対応したものでなければなりません (たとえば座標軸のコピー先にできるのは Figure と uipanel だけです)。copyobj
は子もコピーします。
new_handle = copyobj(h,p)
は、h
で指定される 1 つ以上のグラフィックス オブジェクトをコピーし、新しいオブジェクトのハンドルまたはそれらの配列を返します。新しいグラフィックス オブジェクトは、p
で指定されるグラフィックス オブジェクトの子になります。
copyobj(___,'legacy')
は、オブジェクトのコールバック プロパティとアプリケーション データをコピーします。これは、MATLAB® R2014b 以前のバージョンの copyobj
と同じ動作です。
コピーされないもの
copyobj
では、正常に動作するかどうかが元のコンテキストに依存するプロパティやオブジェクトはコピーされません。既定のコンテキスト メニューが定義されているオブジェクト (凡例やカラー バーなど) の場合、新しいオブジェクト用に新しいコンテキスト メニューが作成されます。Figure の場合は、新しい Figure 用に新しいツール バーとメニューが作成されます。
copyobj
で "コピーされない" ものは次のとおりです。
コールバック プロパティ (
legacy
オプションを使用する場合を除く)オブジェクトに関連付けられているアプリケーション データ (
legacy
オプションを使用する場合を除く)凡例やカラー バーなど、既定のコンテキスト メニューが定義されているオブジェクトのコンテキスト メニュー
Figure の既定のツール バーとメニュー
関数
yyaxis
で使用される axes オブジェクトaxes オブジェクトの
Interactions
プロパティLine
、Scatter
、Surface
などのオブジェクトがもつDataTipTemplate
プロパティcopyobj
の 1 回の呼び出しで、同じオブジェクトを同一の親オブジェクトに複数回コピーすることはできません。
MATLAB は、Parent
プロパティを新しい親に変更し、新しいオブジェクトに新しいハンドルを割り当てます。
例
表面を別の Figure の新しい座標軸にコピーします。
h = surf(peaks);
colormap hsv
コピー先の Figure と座標軸を作成します。
fig = figure; ax = axes;
表面を新しい座標軸にコピーし、表面のプロパティ以外のプロパティを設定します。
new_handle = copyobj(h,ax);
colormap(fig,hsv)
view(ax,3)
grid(ax,'on')
表面はコピーされますが、colormap
、view
、grid
はコピーされません。
ヒント
h
と p
には、スカラーまたはベクトルを指定できます。両方ともベクトルの場合は、同じ長さでなければならず、出力引数 new_handle
は同じ長さのベクトルになります。この場合、new_handle(i)
は h(i)
のコピーで、その Parent
プロパティは p(i)
に設定されます。
h
がスカラーで p
がベクトルの場合は、p
で指定されるそれぞれのグラフィックス オブジェクトを親として、h
が 1 回ずつコピーされます。個々の new_handle(i)
は h
のコピーで、その Parent
プロパティは p(i)
に設定され、length(new_handle)
は length(p)
と同じです。
h
がベクトルで p
がスカラーの場合は、個々の new_handle(i)
が h(i)
のコピーで、それぞれの Parent
プロパティは p
に設定されます。new_handle
の長さは length(h)
と同じです。
メモ
凡例またはカラー バーをコピーするときは、関連付けられている座標軸をコピーしなければなりません。
UI をプログラミングするときは、CreateFcn
内部で copyobj
または textwrap
(copyobj
を呼び出す) を呼び出さないでください。uicontrol オブジェクトをコピーすると、CreateFcn
が繰り返し始動します。そのため、反復制限を超えると一連のエラー メッセージが表示されます。
バージョン履歴
R2006a より前に導入