View Full Version : [MATLAB] Evitare sovrascrittura figura con GUI
register
18-05-2009, 13:57
Salve,
ho questo problema...
In matlab ho creato una GUI "provagui" dalla quale richiamo altre routine, alcune delle quali creano delle figure per plottare alcuni grafici, ad esempio la routine "plottadati".
Ora, dato che un'interafaccia visuale in matlab viene aperta in un una figura (provagui.fig), ho il problema che quando eseguo "plottadati" quest'ultima mi va ad aprire la finestra in cui devono essere plottati i dati al posto della "provagui" con conseguente errore al ritorno dall'esecuzione della routine.
Mi sapete dire qual è il modo per richiamare funzioni che aprono nuove finestre senza andare a sovrascrivere quella della mia gui??
grazie
The_ouroboros
18-05-2009, 15:06
Salve,
ho questo problema...
In matlab ho creato una GUI "provagui" dalla quale richiamo altre routine, alcune delle quali creano delle figure per plottare alcuni grafici, ad esempio la routine "plottadati".
Ora, dato che un'interafaccia visuale in matlab viene aperta in un una figura (provagui.fig), ho il problema che quando eseguo "plottadati" quest'ultima mi va ad aprire la finestra in cui devono essere plottati i dati al posto della "provagui" con conseguente errore al ritorno dall'esecuzione della routine.
Mi sapete dire qual è il modo per richiamare funzioni che aprono nuove finestre senza andare a sovrascrivere quella della mia gui??
grazie
prova con hold on
register
18-05-2009, 15:39
C'ho provato, ma nn va perchè la routine mi chiude proprio la finestra relativa alla GUI e mi apre la sua per plottare i grafici.
C'ho provato, ma nn va perchè la routine mi chiude proprio la finestra relativa alla GUI e mi apre la sua per plottare i grafici.
basta creare le figure vuote prima, con figure(x)
register
19-05-2009, 09:35
Ciao nispo,
ho fatto come hai detto aprendo una figura vuota nella OpeningFcn, ed effettivamente ora non viene più chiusa la finestra (un risultato è stato raggiunto)...però non vengono ancora visualizzati i dati plottati nella plottadati.m!
Sto cercando di far uscire fuori l'handle di questa figura vuota per metterlo nell'istruzione plot, ma la gcf mi dà come handle quello di provagui.fig!!!
Per caso hai qualche suggerimento anche su questo?
magari serve un'istruzione diversa dalla gcf?
grazie
register
19-05-2009, 13:11
Salve ragazzi,
voglio dirvi che ho risolto il problema e lo posto nel caso dovesse trovarsi qualcun'altro ad averne bisogno in futuro.
In pratica ho dovuto passare alla routine esterna (la plottadati.m) l'handle del componente di tipo axes e darlo poi alla funzione plot.
Cioè:
1) partendo dal file provagui.m:
inserisco prima un componente uipanel e all'interno di questo un componente axes.
lì dove richiamo la plottadati metto plottadati(handles.axes).
Inoltre nella axes_CreateFcn inserisco anche il comando guidata(hObject,handles) in modo da aggiornarmi il plot qualora variasse dinamicamente.
2) nel file plottadati.m:
innanzitutto diventa: function plottadati(h)
e poi, dove ho il plot(x,y) sostituisco con plot(h,x,y).
Particolarità:
nel caso in cui voglia plottare dei subplot all'interno dell'axes, allora alla funzione plottadati non devo passare più l'handle dell'axes ma dell'uipanel di cui è figlio, e al plosto del plot(h,x,y) ci va
a1=subplot(1,2,1,'Parent',hpanel);
plot(a1,x1,y1)
a2=subplot(1,2,2,'Parent',hpanel);
plot(a2,x2,y2)
**************************************************
N.B.:
per fare ciò non ho avuto bisogno di aprire nessuna finestra vuota all'interno di provagui.m e anche all'interno della plottadati.m devo poi cancellare l'istruzione che mi crea una nuova finestra perchè altrimenti questa chiuderà la provagui.fig.
Spero di essere stato abbastanza chiaro.
Ciao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.