Копирование объектов

Копирование Объектов с 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;

Скопируйте текст и маркер (hText и hMarker) к каждому графику путем порождения их к соответствующим осям. Возвратите новые указатели для копий маркера и текста:

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

Поскольку цель состоит в том, чтобы скопировать оба объекта в каждого, исключает, вызовите copyobj дважды, каждый раз с синглом целевые оси.

Копирование нескольких объектов во множественные назначения

Когда вы вызываете copyobj с несколькими копируемыми объектами и несколькими родительскими местами назначения, copyobj копирует соответствующие объекты в соответствующие родительские элементы. Таким образом, если h и p являются массивами указателя длины n, то этот вызов copyobj:

copyobj(h,p)

приводит к поэлементному копированию:

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