Si las declaras como globales en cada callback puedes utilizar el valor de la variable luego.
Callback(...)
global FRM
y la usas luego
ÇPor ejemplo:
% --- Executes on button press in SeleccionarNodo.
function SeleccionarNodo_Callback(hObject, eventdata, handles)
% hObject handle to SeleccionarNodo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global MY_GRAFO;
global MY_NODOS;
global MY_ARISTAS;
global MY_SERVICIOS;
global objNodoModificar;
OTRA FUNCION DENTRO DEL GUIDE donde uso las variables globales.
% --- Executes on button press in ActualizarNodo.
function ActualizarNodo_Callback(hObject, eventdata, handles)
% hObject handle to ActualizarNodo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global MY_GRAFO;
global MY_NODOS;
global MY_ARISTAS;
global MY_SERVICIOS;
global objNodoModificar;
posLibreNodo = 0;
posLibreServ = 0;
% Este boton Actualiza los datos del Nodo, el Peso, incluso si se quiere las coordenadas.
% Recojo los valores introducidos en los campos Edit Text del Nodo, en
% variables auxiliares (nombreaux, pesoaux, coordXaux y coordYaux), que luego mas tarde
% usaré para crear un Nodo auxiliar: nuevoNodo.
nombreaux=get(handles.NodoNombre,'String');
pesoaux=str2num(get(handles.NodoPeso,'String'));
coordXaux=str2num(get(handles.NodoCoordX,'String'));
coordYaux=str2num(get(handles.NodoCoordY,'String'));
% Almaceno los datos del Nodo en una variable auxiliar: nuevoNodo.
% Creo un verticeNodo auxiliar nuevoNodo. nuevoNodo contiene los datos
% del nodo que quiero insertar en la lista de nodos del grafo: MY_GRAFO
nuevoNodo=verticeNodo(nombreaux,pesoaux,coordXaux,coordYaux);
% Ya tengo el Nuevo NODO CREADO.
% Ahora voy a coger todas las ARISTAS Formadas por ese NODO en el GRAFO.
MY_ARISTAS=aristasg(MY_GRAFO);
% Ahora tomo todas las ARISTAS que estan formadas por ese NODO, ya sea NODO
% origen o NODO destino, porque voy a formar otra vez la lista ARISTAS con
% el nuevo NODO, y luego volver a montar el GRAFO.
listArFormNodomdf=aristasenNodo(MY_ARISTAS,objNodoModificar);
% COMENTARIO: objNodoModificar es el antiguo NODO
% COMENTARIO: nuevoNodo es el nuevo NODO a insertar.
%Recorro la lista con las ARISTAS que estan formadas por ese Nodo
listRes=arista();
for i=1:length(listArFormNodomdf)
% Esta variable auxiliar toma la ARISTA a modificar
aux=listArFormNodomdf(i);
% Compruebo ei el NODO forma el destino de la Arista a modificar.
if chekearVerticeNodo(objNodoModificar,destinoNodoArista(aux))
listRes(i)=arista(origenNodoArista(aux),nuevoNodo,distancia(aux));
else % Compruebo si el NODO forma el origen de la Arista
listRes(i)=arista(nuevoNodo,destinoNodoArista(aux),distancia(aux));
end
end
% La lista de las nuevas ARISTAS, formadas por la modificación del NODO es
% listRes...
% Siguiente paso es comprobar que la posicion elegida para modificar el
% Nodo no está ocupada por otro Nodo o por un Servicio.
% Antes de insertar el Nodo hago un control de posiciones por si la nueva
% posición ya está ocupada por un Nodo o por un Servicio.
% Compruebo que esa posicion no esta ya ocupada por un SERVICIO anteriormente.
% Para ello lo que hago es:
% 1º creo una lista con las posiciones de los servicios (LISTA DE NODOS).
lisPosServ=verticeNodo();
for i=1:length(MY_SERVICIOS)
lisPosServ(i)=posicionServ(MY_SERVICIOS(i));
end
% 2º Compruebo si la posición dada está en la lista de posiciones de Servicios del Grafo.
if posicionLibre(lisPosServ,coordenadaX(nuevoNodo),coordenadaY(nuevoNodo)) == 1
posLibreServ=1;
end
% 3º Compruebo si la posición dada está en la lista de posiciones de Nodos del Grafo.
if posicionLibre(MY_NODOS,coordenadaX(nuevoNodo),coordenadaY(nuevoNodo)) == 1
posLibreNodo=1;
end
% En este caso la posición (X,Y) donde quiero introducir el Servicio no
% está libre. (HAY UN NODO Y UN SERVICIO).
% Saco un mensaje por pantalla preguntando al usuario
% que quiere hacer. Si almacenar el Servicio aunque esté la posición
% ocupada por otro Servicio o no almacenarla.
if (posLibreNodo == 1) && (posLibreServ == 1)
% Posición Libre. NO HAY NODO INSERTADO NO HAY SERVICIO INSERTADO.
% Ahora elimino las ARISTAS formadas por el antiguo NODO.
MY_ARISTAS=eliminarArista(MY_ARISTAS,listArFormNodomdf);
% Ahora elimino el Antiguo Nodo que ya he modificado, lo saco de la lista
% de NODOS.
MY_NODOS=eliminarVerticeNodo(MY_NODOS,objNodoModificar);
% Inserto el nuevo NODO
MY_NODOS=anadirVerticeNodo(MY_NODOS,nuevoNodo);
% Añado las nuevas Aristas a la lista de ARISTAS.
MY_ARISTAS=anadirArista(MY_ARISTAS,listRes,MY_NODOS);
Por cierto me puedes enseñar la parte donde especificas la carga del fichero?