2011-02-23 21 views
5

Sto usando MATLAB per visualizzare i dati 3D. Uso la GUI per cambiare l'angolo di visualizzazione, lo zoom e il pan. Come posso archiviare questa vista e successivamente applicarla a un'altra figura (contenente più o meno gli stessi dati)? view mi dà una matrice, ma come posso applicare questa ad un'altra figura?Conservare MATLAB 3d finestra

Grazie mille!

risposta

5

Per utilizzare l'angolo di visualizzazione corrente su un'altra figura, si potrebbe fare:

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

Oppure, si potrebbe fare lo stesso utilizzando get e set della proprietà view.

Tuttavia, per applicare tutte le proprietà di visualizzazione che hai citato insieme, è più facile da usare di Matlab built-in 'di generare file di m' opzione - quando si ha il 3D capire il modo in cui si desidera, andare file ->Generate m-file e verrà creato un m-file che ottiene i dati 3D come input e applica le impostazioni.

Un'altra opzione è quella di salvare le impostazioni relative te stesso (solo ispezionare il m-file generato):

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'); 

e quindi di applicarlo agli assi correnti (supponendo che gli assi l'obiettivo è quello corrente):

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

Per memorizzare e applicare la vista vedere Itamar's answer.

Per zoom e pan hai solo bisogno di memorizzare assi limiti. Usa xlim, ylim e zlim o le proprietà degli assi corrispondenti (XLim, ecc.) Con get/set.

Per assi correnti a limiti di archivio:

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

Oppure con assi proprietà:

xl = get(gca,'XLim'); 

Per applicare agli assi su un'altra figura:

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

Oppure

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

Tra l'altro, oltre alla risposta di Itamar, è possibile ottenere tutti gli assi proprietà contemporaneamente in una struttura:

ax_properties = get(gca); 

Rimuovere i campi che non si desidera applicare ai nuovi assi, quindi utilizzare SET:

set(new_axes_handle,ax_properties) 

Fare attenzione poiché la struttura conterrà anche UserData. Rimuovi prima questo campo. Lo si può fare con il codice:

rmfield(ax_properties,'UserData') 
1

OMG, regolazione manuale e l'opzione di generare M-File è il mio eroe. Se solo sapessi fin dall'inizio che tutto quello che dovevo fare era questa:

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'); 
Problemi correlati