2011-02-23 9 views
5

J'utilise MATLAB pour afficher des données 3D. J'utilise l'interface graphique pour modifier l'angle, le zoom et le panoramique. Comment puis-je stocker cette vue et l'appliquer plus tard à une autre figure (contenant plus ou moins les mêmes données)? view me donne une matrice, mais comment puis-je l'appliquer à une autre figure?Store MATLAB 3d viewport

Merci beaucoup!

Répondre

5

Pour utiliser l'angle de vue en cours sur une autre figure, vous pouvez faire:

% call when the source axes is the current axes 
[az, el] = view; 
% call when the target axes is the current axes 
view (az, el); 

Ou, vous pouvez faire la même chose en utilisant get et set de la propriété view.

Cependant, pour appliquer toutes les propriétés de la vue que vous avez mentionnées ensemble, il est plus facile à utiliser intégré « générer un fichier m » option Matlab - lorsque vous avez la figure la façon 3D que vous voulez, allez à file ->Generate m-file et un fichier m sera créé pour obtenir les données 3D en entrée et appliquer les paramètres.

Une autre option consiste à enregistrer ces paramètres pertinents vous (inspecter juste le m-fichier généré):

plot3(sin(t),cos(t),t); 
pba = get(gca, 'PlotBoxAspectRatio'); 
dar = get(gca, 'DataAspectRatio'); 
cva = get(gca, 'CameraViewAngle'); 
cuv = get(gca, 'CameraUpVector'); 
ct = get(gca, 'CameraTarget'); 
cp = get(gca, 'CameraPosition'); 

puis de l'appliquer aux axes actuels (en supposant que les axes de cible est l'actuel):

set(gca, 'PlotBoxAspectRatio',pba); 
set(gca, 'DataAspectRatio',dar); 
set(gca, 'CameraViewAngle',cva); 
set(gca, 'CameraUpVector',cuv); 
set(gca, 'CameraTarget',ct); 
set(gca, 'CameraPosition',cp); 
2

Pour stocker et appliquer une vue, voir Itamar's answer.

Pour le zoom et le panoramique, il vous suffit de stocker les limites d'axes. Utilisez xlim, ylim et zlim ou les propriétés des axes correspondants (XLim, etc.) avec get/set.

Pour les axes actuels des limites de magasin:

xl = xlim; 
yl = ylim; 
zl = zlim; 

ou avec des propriétés axes:

xl = get(gca,'XLim'); 

Pour appliquer aux axes sur un autre chiffre:

xlim(new_axes_handle,xl) % you can skip new_axes_handle for current axes 
ylim(new_axes_handle,yl) 
zlim(new_axes_handle,zl) 

Ou

set(new_axes_handle,'XLim',xl,'YLim',yl','ZLim',zl) 

Par ailleurs, en plus de la réponse de Itamar, vous pouvez obtenir tous les axes propriétés à la fois dans une structure:

ax_properties = get(gca); 

Retirez les champs que vous ne souhaitez pas appliquer aux nouveaux axes, puis utilisez SET:

set(new_axes_handle,ax_properties) 

Soyez prudent car la structure contiendra également UserData. Supprimez ce champ en premier. Vous pouvez le faire par le code:

rmfield(ax_properties,'UserData') 
1

OMG, réglage manuel et l'option Générer M-fichier est mon héros. Si seulement je savais depuis le début que tout ce que j'avais à faire était:

axes1 = axes('Parent',Plot_ele,'PlotBoxAspectRatio',[1 1.70454545454545 1.7],... 
    'DataAspectRatio',[1 1 1],... 
    'CameraViewAngle',7.48227189414101,... 
    'CameraUpVector',[-0.0256575066196788 0.989185543639328 -0.144407938178721],... 
    'CameraTarget',[255.013054349713 397.874703616223 449.003273637903],... 
    'CameraPosition',[1445.8877301745 1407.25270740567 7151.59363497921]); 
    % xlim(axes1,[0 528]); % uncomment to preserve axes x-limits 
    % zlim(axes1,[0 897.6]); % uncomment to preserve axes z-limits 
hold(axes1,'all');