Main Content

复制对象

使用 copyobj 复制对象

使用 copyobj 函数将对象从一个父级复制到另一个父级。副本与原始对象存在以下不同之处:

  • Parent 属性是新的父对象。

  • 复制对象的句柄与原始句柄不同。

  • copyobj 不会复制原始对象的回调属性。

  • copyobj 不会复制与原始对象关联的任何应用程序数据。

因此,在比较原始句柄与新句柄时,==isequal 会返回 false。

您可以将多个不同的对象复制到一个新的父对象,或将一个对象复制到多个新的父对象,只要结果保持正确的父/子关系即可。当复制包含子对象的对象时,MATLAB® 也会复制所有子对象。

注意

不能将同一对象多次复制到对 copyobj 的单个调用中的同一父级。

将单个对象复制到多个目的地。

在将单个对象复制到多个目的地时,copyobj 所返回的新句柄顺序与父句柄一致。

h = copyobj(cobj,[newParent1,newParent2,newParent3])

返回的数组 h 所包含新对象句柄顺序如下所示:

   h(1) -> newParent1
   h(2) -> newParent2
   h(3) -> newParent3

复制多个对象

此示例演示如何将多个对象复制到单个父对象。

假设您想要创建一组类似的图形,并在每个图形中标记相同的数据点。您可以将在第一个图形中标记点的文本和标记对象复制到每个后续图形中。

创建和标记第一个图形:

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','*');

创建两个以上没有标签的图形:

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;

通过将文本和标记(hTexthMarker)的父级设置为图形各自所在的坐标区将文本和标记复制到每个图形。返回文本和标记副本的新句柄:

newHandles1 = copyobj([hText,hMarker],hAxes1);
newHandles2 = copyobj([hText,hMarker],hAxes2);

由于目的是将两个对象复制到每个坐标区,因此请调用 copyobj 两次,每次一个目标坐标区。

将多个对象复制到多个目的地

当使用多个复制对象及多个目的地调用 copyobj 时,copyobj 会将各个对象复制到各个父级。也就是说,如果 hp 为长度为 n 的句柄数组,那么调用 copyobj

copyobj(h,p)

会生成按元素的副本:

h(1) -> p(1);
h(2) -> p(2);
...
h(n) -> p(n);