Matlab - Manejar ventanas interfaz grafica?

   
Vista:

Manejar ventanas interfaz grafica?

Publicado por Javi (3 intervenciones) el 22/12/2009 17:39:36
Hola. Estamos haciendo varios compañeros un proyecto para la universidad y tenemos que usar matlab. Tenemos hechos todos los programas y funcionan sin problemas. Es decir, vas a la ventana de comandos y escribes:

resultado = mifuncion('string')

la funcion "mifuncion" está formado por múltiples programas y 'string' es una string que se le pasa como parámetro. Además en la ejecución de esto al principio aparece una ventana de la que tienes que seleccionar 2 puntos de un mapa (representación de Miller, paquete de funciones m_map) para extraer sus coordenadas y usarlas después para obtener el resultado.

Hasta ahí todo bien y ningún problema.

Ahora tenemos que hacer una interfaz gráfica con sus botones y todo, para no tener que escribir nada. A parte de ser un poco lioso, vamos aprendiendo, y la idea es poner dos botones, cada uno que te haga "mifuncion" con un parámetro cada uno, y ponga el resultado en una caja aparte.

Y el problema es que esa ventana que digo que sale para seleccionar 2 puntos del mapa, sale en la misma ventana donde están los botones! En lugar de aparecer en una ventana aparte. Así que aparece el mapa con dos botones para pinchar y 2 cajas, todo mezclado... Evidentemente no quiero eso y tengo que saber como hacerlo bien.

Si me pudierais ayudar os lo agradezco mucho, porque no encuentro nada en la ayuda ni por internet!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Manejar ventanas interfaz grafica?

Publicado por lucera (119 intervenciones) el 23/12/2009 13:01:15
la ventana donde tienes que elegir dos puntos es una grafica de datos verdad?

vale yo te aconsejo que para que no te pase lo que te pasa, la orden de la grafica la realices de la siguiente manera:

crees un axes dentro de tu gui en el cual dentro de este axes aparecerá la grafica o crees una nueva gui con un axes de forma que ahi se tenga que imprimir la grafica

la primera opcion: antes de dar la orden para dibujar la grafica llama al axes en el cual quieres que aparezca, esto es por ejemplo: axes(handles.axes1) --axes1 es el tag del axes, tienes que poner el que le corresponda.

la segunda opcion: es igual que la anterior pero para que te aparezca la otro ventana, si le has llamado por ejemplo grafica, teiens que escribir grafica y en el archivo .m que será en este caso grafica.m escribir la orden (de la misma forma que el caso anterior) para que se dibuje la grafica.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejar ventanas interfaz grafica?

Publicado por Javi (3 intervenciones) el 23/12/2009 23:19:29
Hola! gracias por tu respuesta!

La verdad que no sé exactamente si es una gráfica de datos. Yo de matlab controlo muy poquito, y eso que me dices de los axes no lo conozco. ¿es uno de las cosas que se pueden poner cuando estás diseñando una ventana en la gui? Es que he visto que uno es axes pero no sé lo que es...

El mapa se pinta de la siguiente manera:

lon=[-180:180];
lat=atan(tan(60*pi/180)*cos((lon-30)*pi/180))*180/pi;
m_proj('miller','lat',82);
m_coast('color',[0 .3 .8]);
m_grid('linestyle','none','box','fancy','tickdir','out');

[X,Y]=ginput(2);

las funciones m_proj, m_coast, m_grid vienen en un paquete de funciones, el que nombré antes m_map, (que encontramos por internet) que lo que te hacen es pintar en la ventana el contorno de los continentes, y ahí seleccionas pinchando dos puntos con ginput, para que te devuelva sus coordenadas. Por eso no sé si eso es una gráfica de datos... Ni la he llamado de ninguna manera...

Y ese código está dentro de una función ya creada de matlab, que funciona sin problemas. ¿Tal vez es este código lo que hay que meter en el axes ése?
Si es que este matlab es más complicado...

Gracias, y un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejar ventanas interfaz grafica?

Publicado por Javi (3 intervenciones) el 24/12/2009 00:26:51
Creo que lo del mapa lo he arreglado: he creado una nueva GUI que se llama mapa donde se pinta el mapa dentro de un axes y se seleccionan los dos puntos; y entonces desde la que tenia ya (que se llama interfaz), en la que cada botón llamaba a la funcion donde se pintaba el mapa (esa función la he cambiado para pasarle como parámetros esas 4 coordenadas de los dos puntos, no como antes que todo eso se hacía desde dentro) llamo a esa nueva gui mapa.

Pero ahora tengo el problema de cómo pasarle a la gui interfaz las coordenadas de los puntos obtenidos en la gui mapa. He guardado los datos asi:

function varargout = mapa_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
lon=[-180:180];
lat=atan(tan(60*pi/180)*cos((lon-30)*pi/180))*180/pi;
m_proj('miller','lat',82);
m_coast('color',[0 .3 .8]);
m_grid('linestyle','none','box','fancy','tickdir','out');

[X,Y]=ginput(2);
[LONG,LAT]=m_xy2ll(X,Y); %Esto hace una conversion simplemente

handles.long0=LONG(1);
handles.lat0=LAT(1);
handles.longf=LONG(2);
handles.latf=LAT(2);
guidata(hObject,handles);

Y creia que se podrían llamar esos datos desde la otra gui (interfaz) poniendo simplemente handles.long0 , pero veo que no es así. ¿se hace con un get?
he probado varias cosas y me sigue dando error...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejar ventanas interfaz grafica?

Publicado por lucera (119 intervenciones) el 27/12/2009 16:06:08
lo puedes hacer de dos maneras.

para usar variables de una interfaz a otra puedes usar valibles globales o puedes guardar las variables en un archivo .mat para luego usarlas.

te explico:

VARIABLES GLOBALES:

antes de usar una variable que va a ser global (esto es se va a usar en varias interfaces o varias funciones...) la teiens que declarar global. para ello se escribe:

global VARIABLE

esto siempre antes de utilizarla.

La manera que te aconsejo yo es la siguiente:

guardar la VARIABLE de la siguiente manera:

save NOMBRE VARIABLE donde NOMBRE es el nombre del archivo .mat donde se va a guardar la variable VARIABLE

luego cuado la quieras utilizar basta con:

load NOMBRE %que es el nombre del archivo .mat

ya tenemos cargada la VARIABLE asi que ya la podemos utilizar

espero haberme explicado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar