How link Zoom view for 3D plots belonging to a Tab (linkprop does not work?)

6 次查看(过去 30 天)
Hi! I have several 3D plots inside a Tab. I need to link their view in zoom, pam and rotation when I tick a checkbox. I can't make it work for the zoom and the pam... I need the zoom to work with the mouse scroll. Could you suggest me how to solve it?
My code is something like this:
hTabGroup = uitabgroup;
hTabGroup.Parent.Name='Output visualization';
hTabGroup.Parent.NumberTitle='off';
drawnow;
numFaces = 600;
[x,y,z] = sphere(numFaces);
name = {'aa','bb'};
%% Plot
for iFig = 1:2
tab = uitab(hTabGroup, 'title',name{iFig});
tab_all{iFig} = tab;
a = axes('parent', tab_all{iFig});
axes_all(iFig) = a;
pc(iFig)=pcshow([x(:),y(:),z(:)],'Parent',a);
drawnow; pause(0.05);
if iFig == 1 %fig1
p = uipanel(tab_all{iFig},'Position',[0.05 0.85 0.28 0.13],'Title','Image Setup','FontSize',11,'BackgroundColor','k','ForegroundColor','w');
c4 = uicontrol('Parent', p, 'Style', 'checkbox','units', 'normalized','Position',[0.5521 0.52 0.40 0.20],'BackgroundColor','k','ForegroundColor','w','Callback',@linkView);
else %fig2
p = uipanel(tab_all{iFig},'Position',[0.05 0.75 0.28 0.23],'Title','Image Setup','FontSize',11,'BackgroundColor','k','ForegroundColor','w');
c4 = uicontrol('Parent', p, 'Style', 'checkbox','units', 'normalized','Position',[0.5521 0.1 0.40 0.20],'BackgroundColor','k','ForegroundColor','w','Callback',@linkView);
end
end
%% Callback Link views
function linkView(hObject,~,~)
value = get(hObject,'Value');
n_tab=length(hObject.Parent.Parent.Parent.Children); %n_tabs
% Axes
for ii=1:n_tab
ax_tab(ii)=hObject.Parent.Parent.Parent.Children(ii).Children(end);
end
if value == 1 % enable Link if checkbox filled
Link = linkprop([ax_tab(:)],{'CameraUpVector', 'CameraPosition', 'CameraTarget', 'XLim', 'YLim', 'ZLim'});
setappdata(gcf, 'StoreTheLink', Link);
handleCheck=findobj(gcf,'Style','checkbox');
set(handleCheck(:), 'Value',1)
else % disable Link
Link = getappdata(gcf,'StoreTheLink') ;
Link.Enabled = 'off';
handleCheck=findobj(gcf,'Style','checkbox');
set(handleCheck(:), 'Value',0)
end
end
Thank you!

采纳的回答

Veronica Taurino
Veronica Taurino 2021-6-17
编辑:Veronica Taurino 2021-6-17
I got the problem, I solved reading this:
So I just modified the callback:
%% Callback Link views
function Link = linkView(hObject,~,~)
value = get(hObject,'Value');
n_tab=length(hObject.Parent.Parent.Parent.Children); %n_tabs
% Axes
for ii=1:n_tab
ax_tab(ii)=hObject.Parent.Parent.Parent.Children(ii).Children(end);
end
if value == 1 % enable Link if checkbox filled
Link = linkprop([ax_tab(:)],{'CameraUpVector', 'CameraPosition', 'CameraTarget', 'XLim', 'YLim', 'ZLim'});
setappdata(gcf, 'StoreTheLink', Link);
handleCheck=findobj(gcf,'Style','checkbox');
set(handleCheck(:), 'Value',1)
else % disable Link
Link = getappdata(gcf,'StoreTheLink') ;
Link.Enabled = 'off';
handleCheck=findobj(gcf,'Style','checkbox');
set(handleCheck(:), 'Value',0)
end
end

更多回答(1 个)

Veronica Taurino
Veronica Taurino 2021-5-23
Any suggestion?

类别

Help CenterFile Exchange 中查找有关 Data Exploration 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by