オブジェクトのコピー
copyobj
を使用したオブジェクトのコピー
関数 copyobj
を使って、オブジェクトを親オブジェクト間でコピーします。コピーされたオブジェクトは元のオブジェクトと以下の点で異なります。
Parent
プロパティが新しい親オブジェクトになります。コピー先のオブジェクトのハンドルはコピー元のオブジェクトのハンドルと異なります。
copyobj
では、コピー元のオブジェクトのコールバック プロパティはコピーされません。copyobj
では、コピー元のオブジェクトに関連付けられているアプリケーション データはコピーされません。
したがって、コピー元のハンドルとコピー先のハンドルを比較すると、==
および isequal
は false を返します。
結果が正しい親子関係を維持する限り、さまざまなオブジェクトを新しい親オブジェクトにコピーしたり、1 つのオブジェクトをいくつかの新しい親オブジェクトにコピーしたりすることができます。子オブジェクトをもつオブジェクトをコピーすると、MATLAB® はすべての子オブジェクトもコピーします。
メモ
copyobj
の 1 回の呼び出しで、同じオブジェクトを同一の親オブジェクトに複数回コピーすることはできません。
単一オブジェクトの複数のコピー先へのコピー
単一のオブジェクトを複数のコピー先にコピーする場合、copyobj
によって、新しいハンドルが親ハンドルと同じ順で返されます。
h = copyobj(cobj,[newParent1,newParent2,newParent3])
返される配列 h
には、以下の順序で新しいオブジェクト ハンドルが格納されます。
h(1) -> newParent1 h(2) -> newParent2 h(3) -> newParent3
複数オブジェクトのコピー
この例では、複数のオブジェクトを単一の親オブジェクトにコピーする方法を説明します。
一連の類似したグラフを作成し、各グラフに同じデータ点をラベル付けするとします。最初のグラフ内の点にラベル付けするために使用する text オブジェクトとマーカー オブジェクトを、後続の各グラフにコピーします。
最初のグラフを作成してラベル付けします。
x = 0:.1:2*pi; plot(x,sin(x)) hText = text('String','\{5\pi\div4, sin(5\pi\div4)\}\rightarrow',... 'Position',[5*pi/4,sin(5*pi/4),0],... 'HorizontalAlignment','right'); hMarker = line(5*pi/4,sin(5*pi/4),0,'Marker','*');
ラベルのないグラフを 2 つ作成します。
figure x = pi/4:.1:9*pi/4; plot(x,sin(x)) hAxes1 = gca;
figure x = pi/2:.1:5*pi/2; plot(x,sin(x)) hAxes2 = gca;
テキストとマーカー (hText
と hMarker
) を各座標軸の子オブジェクトにして、各グラフにコピーします。テキストおよびマーカーのコピーの新しいハンドルを返します。
newHandles1 = copyobj([hText,hMarker],hAxes1); newHandles2 = copyobj([hText,hMarker],hAxes2);
目的は両方のオブジェクトを各座標軸にコピーすることなので、コピー先となる単一の座標軸を指定して copyobj
を 2 回呼び出します。
複数のコピー先への複数オブジェクトのコピー
コピーする複数のオブジェクトと、親となる複数のコピー先を指定して copyobj
を呼び出すと、copyobj
は各オブジェクトをそれぞれの親にコピーします。つまり、h
と p
が長さ n
のハンドル配列の場合、次の copyobj
の呼び出しにより、
copyobj(h,p)
要素単位のコピーが行われます。
h(1) -> p(1);
h(2) -> p(2);
...
h(n) -> p(n);