具有hgtransform的linkprop对象

时间:2018-09-14 09:07:24

标签: matlab animation matlab-figure

我发布后立即找出了最后一个问题。能够解决我遇到的许多问题。现在,问题围绕hgtransformlinkprop展开。如何将对象的位置和变换复制到其他图形。下面的代码会将对象从第一个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 :(得分:0)

弄清楚了。将为有类似问题的人发布答案。

mcrypt_encrypt()是正在旋转的对象的父级。因此,当我复制hgtransform时,也会复制子项,因此为什么对象在其他窗口中以正确的方向出现。从这里,我需要链接复制的父母的孩子来生成动画。

hgtransform

通过用上面的部分替换部分代码。人们可以变换对象并设置动画。