связать объекты с помощью hgtransform - PullRequest
0 голосов
/ 14 сентября 2018

Буквально разобрался с последней проблемой, как только я написал.Был в состоянии исправить многие из проблем, которые у меня были.Теперь проблема вращается вокруг hgtransform и linkprop.Как можно скопировать местоположение объекта и преобразовать его в дополнительные фигуры.Приведенный ниже код будет копировать объекты из первого axes в следующий и анимировать, заставляя их перемещаться.Однако оно не копирует преобразование.

fig = figure();
% create subplots for stim system 3 plate setup
for aa = 1:3
    Stimsubfigures{aa} = axes(...
      'Position',[((aa*.21)-.2),.2,.2,.2],'color','none');
    set(Stimsubfigures{aa},'xLim',[-320,320])
    set(Stimsubfigures{aa},'YLim',[-240,240])
    set(Stimsubfigures{aa},'Visible','off')
end

axes(Stimsubfigures{1});
for aa = 1:10
    Xdata = [1+aa*50,10+aa*50,10+aa*50,1+aa*50];
    ObjectTransformation{aa,1} = hgtransform;                   % Add object to end of transformation list
    ObjectList{aa,1} = patch(...                                % Add object to end of Object list, bind to transformation list
                'Parent', ObjectTransformation{aa}, ...   
                'XData',Xdata, 'YData',[1,1,20,20],...
                'Facecolor', [1,0,0], 'EdgeColor', [1,0,0], ...
                'visible','on'); 
    ObjectTransformation{aa,1}.Matrix = makehgtform('zrotate',50);
    NextStepX{aa,1} = Xdata;        
end

tmp = transpose([ObjectList{:}]);
tmptrans = transpose([ObjectTransformation{:}]);

TrialLength = 10;

 % copy objects to other figures
copyobj(tmp,Stimsubfigures{2})
copyobj(tmp,Stimsubfigures{3})
property_names = {'XData', 'YData', 'ZData'};
for aa = 1:10
linked_objects = [tmp(aa),...
                          Stimsubfigures{2}.Children(aa),...
                          Stimsubfigures{3}.Children(aa)];
hlink{aa} = linkprop(linked_objects,property_names);
end

timer = tic(); 

while true
    t1 = toc(timer);
    if t1 >= TrialLength, break;end                             % break loop once time trial ends
    NextStepX = cellfun(@(x) x+1,NextStepX,'UniformOutput',false);
    [tmp.XData] = NextStepX{:};
    drawnow;
    pause(0.1);
    step = NextStepX;
end

for aa = 1:3
    delete(Stimsubfigures{aa}.Children)
end

Когда я изменяю этот раздел для копирования преобразования, объекты преобразуются правильно, но теряют анимацию.

 % copy objects to other figures
copyobj(tmptrans,Stimsubfigures{2})
copyobj(tmptrans,Stimsubfigures{3})

property_names = {'XData', 'YData', 'ZData'};
trans_names = {'zrotate'};

for aa = 1:10
linked_objects = [tmp(aa),...
                          Stimsubfigures{2}.Children(aa),...
                          Stimsubfigures{3}.Children(aa)];
Trlink_objects = [tmptrans(aa),...
                          Stimsubfigures{2}.Children(aa),...
                          Stimsubfigures{3}.Children(aa)];
hlink{aa} = linkprop(linked_objects,trans_names);
Trhlink{aa} = linkprop(Trlink_objects,trans_names);
end

Я пытался выполнитьcopyobj на обеих ручках, но это просто приводит к двум наборам объектов.Как можно связать все три вместе, чтобы я мог выполнить смену поворота Xdata?

1 Ответ

0 голосов
/ 19 сентября 2018

Разобрался.Опубликует ответ для тех, у кого были похожие вопросы.

hgtransform является родителем вращающихся объектов.из-за этого, когда я копирую hgtransform, потомки также копируются, поэтому объекты отображаются в правильной ориентации в других окнах.Отсюда мне нужно связать детей от скопированных родителей для генерации анимации.

% copy objects to other figures
copyobj(tmptrans,Stimsubfigures{2})
copyobj(tmptrans,Stimsubfigures{3})

property_names = {'XData', 'YData', 'ZData'};

for aa = 1:10
    linked_objects = [tmptrans(aa).Children(1),...
                      Stimsubfigures{2}.Children(aa).Children(1),...
                      Stimsubfigures{3}.Children(aa).Children(1)];

    hlink{aa} = linkprop(linked_objects,trans_names);
end

Заменив часть кода на вышеприведенный раздел.Можно трансформировать объекты и оживлять.

...