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