Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semillero de Investigación
en Control e Instrumentación
1
Universidad Tecnológica de Pereira
1 Adaptación del texto "Aprenda Matlab 6 como si estuviera en primero" escrito por Javier Atencia
y Raúl Nestar.
CAPÍTULO 1
Objetos Gráficos
Son los elementos que componen la GUI. En MATLAB se encuentran organizados según su
importancia y tipo. Al igual que muchos otros objetos, los gráficos poseen propiedades con las
cuales se pueden modificar su apariencia y funcionamiento.
Cada acción del usuario sobre los objetos de la interfaz se conoce como evento y se activan de
acuerdo a las posibilidades del objeto y a los requerimientos del programa.
Estos últimos son componentes de otros programas diferentes a MATLAB que pueden incluirse
en la Interfaz. Para utilizarlos adecuadamente es necesario tener información del desarrollador
1
CAPÍTULO 1. OBJETOS GRÁFICOS 2
del componente ActiveX. Por lo tanto, no se mencionan en este documento. La figura 1.1
muestra cada uno de los objetos que tiene MATLAB según su importancia (jerarquía).
El objeto más general es la pantalla. Este objeto es la raíz de todos los demás y sólo puede
haber uno. La pantalla puede contener una o más ventanas. A su vez cada una de las ventanas
puede tener uno o más ejes de coordenadas en los que se representan otros objetos de más
bajo nivel. Una ventana puede tener también controles (uicontrol) como botones, cajas de
edición, listas, menús desplegables entre otros y menús de usuario (uimenu). Finalmente, los
ejes pueden contener otros tipos de elementos gráficos como líneas, rectángulos, polígonos,
superficies, imágenes y texto.
En esta jerarquía se llama padre (parent) al objeto que se encuentra arriba de otro e hijo
(children) al que se encuentra debajo. Cuando por alguna circunstancia se borra un objeto,
automáticamente se borran todos los objetos que son sus descendientes.
1.2 Identificadores
Debido a que una GUI puede tener muchos objetos gráficos se hace necesario diferenciar a cada
uno de ellos. Esta es la razón por cual MATLAB asigna un número diferente a cada objeto
conocido como identificador o handle. Por ejemplo, el objeto raíz (pantalla) es siempre único
y su identificador es el cero. El identificador de las ventanas es un entero, el cual aparece en la
barra de título de la ventana. Los identificadores de otros elementos gráficos son números de
punto flotante.
MATLAB puede tener varias ventanas abiertas, pero siempre hay una y sólo una que es la
ventana activa. A su vez una ventana puede tener varios ejes (axes), pero sólo unos son los
CAPÍTULO 1. OBJETOS GRÁFICOS 3
ejes activos. Los identificadores de la ventana activa, de los ejes activos y del objeto activo
se pueden obtener respectivamente con los comandos gcf (get current figure), gca (get current
axes) y gco (get current object):
Estos valores de retorno pueden ser almacenados en variables para un uso posterior. En
ocasiones el handle es un vector de valores, como por ejemplo al crear una superficie que
consta de líneas y polígonos. Los comandos anteriores han abierto una ventana y dibujado
sobre ella dos líneas cruzadas de color amarillo y un triángulo de color verde.
MATLAB dispone de las funciones set y get para modificar y consultar respectivamente el
valor de las propiedades de un objeto. Las funciones set(handle) lista en pantalla todas las
propiedades del objeto (sólo los nombres, sin los valores de las propiedades). La función
get(handle) produce un listado de las propiedades y sus valores actuales.
Ejemplo: Pregunte las propiedades del objeto línea 1 del ejemplo anterior. En este caso el
identificador se encuentra almacenado en la variable li1.
» set(li1)
Color
EraseMode: [ normal | background | xor | none ]
LineStyle: [ - | – | : | -. | none ]
LineWidth
Marker: [ + | o | * | . | x | square | diamond | v | ˆ | > | < | pentagram |
hexagram | none ]
MarkerSize
MarkerEdgeColor: [ none | auto ] -or- a ColorSpec.
MarkerFaceColor: [ none | auto ] -or- a ColorSpec.
XData
YData
ZData
ButtonDownFcn
Children
Clipping: [ on | off ]
CreateFcn
DeleteFcn
BusyAction: [ queue | cancel ]
HandleVisibility: [ on | callback | off ]
HitTest: [ on | off ]
Interruptible: [ on | off ]
Parent
Selected: [ on | off ]
SelectionHighlight: [ on | off ]
Tag
UIContextMenu
UserData
Visible: [ on | off ]
Las propiedades que tienen un conjunto finito de valores presentan estos valores entre corchetes
[ ] separados por barras verticales. La opción por defecto se muestra entre llaves {}.
CAPÍTULO 1. OBJETOS GRÁFICOS 5
Ejemplo: Pregunte las propiedades del objeto línea 1 del ejemplo anterior con sus valores
actuales.
» get(li1)
Color = [0 0 1]
EraseMode = normal
LineStyle = -
LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [0 5]
YData = [0 5]
ZData = []
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [12.0001]
Selected = off
SelectionHighlight = on
Tag =
Type = line
UIContextMenu = []
UserData = []
Visible = onYData = [0 5]
Para conocer el valor de una propiedad particular de un objeto se utiliza la función la misma
función get de la forma get(id,’propiedad’). Las propiedades de un objeto pueden ser cambiadas
o modificadas (a excepción de las que son solo lectura) con la función set(id,’propiedad’,’valor’).
CAPÍTULO 1. OBJETOS GRÁFICOS 6
Es interesante hacer pruebas con los distintos tipos de objetos gráficos que se pueden crear y
manipular con MATLAB modificando sus propiedades.
Ejemplo: Ejecútense los siguientes comandos observando cómo va cambiando el grosor de las
líneas y sus colores.
» close(gcf)
» fig=figure
» li1=line([0,5],[0,5])
» li2=line([0,5],[5,0],’color’,’w’)
» po1=patch([1,4,3],[1,1,4],’g’)
» pause(3)
» set(li1,’LineWidth’,2), pause(1);
» set(li2,’LineWidth’,2,’color’,’r’), pause(1);
» set(po1,’LineWidth’,2,’EdgeColor’,’w’,’FaceColor’,’b’)
El comando set permite cambiar varias propiedades a la vez, poniendo sus nombres entre
comillas simples seguidos de sus valores. Los ejemplos anteriores demuestran que es esencial
disponer de los identificadores de cada objeto si se desea modificar un gráfico o utilizar propiedades
distintas a las que están por defecto.
CAPÍTULO 2
Creando GUIs
• Creando cada uno de los objetos desde un script o función, lo cual hace la creación de la
GUI bastante complicada y lenta si se piensa que esta puede tener muchos objetos. Lo
anterior sugiere la necesidad de programar dos scripts o funciones. Uno solo para generar
los objetos gráficos y otro que permita atender los eventos provenientes de cada uno de
los objetos.
• Creando todos los objetos de la GUI mediante el asistente que incluye MATLAB para
esta tarea. Así, el diseño de la GUI se puede hacer muy fácilmente y solo es necesario
programar el archivo que atiende los eventos de GUI. Aunque el asistente existe desde la
versión 5.3, es a partir de la versión 6.5 que ha mejorado considerablemente haciendo la
creación de GUIs más fácil.
7
CAPÍTULO 2. CREANDO GUIS 8
Una vez se ejecuta el asistente aparece la ventana que se muestra en la figura 2.1.
En esta ventana se da la posibilidad de construir una GUI en blanco (desde cero), utilizar
algunos diseños predeterminados (plantillas) o abrir una GUI previamente diseñada. Una vez
se selecciona la opción aparece una segunda ventana con el entorno de trabajo de acuerdo a
opción activada.
• Barra de Alineación: Esta opción permite alinear los objetos que se encuentra en el
área de trabajo de manera personalizada.
• Archivo .m: Muestra el archivo .m (en este caso una función) que maneja la GUI.
• Buscador de Objetos: Muestra en forma de árbol todos los objetos que tiene la GUI.
• Área de Trabajo: Espacio sobre el cual se ubican los objetos que componen la GUI.
• nombreGUI.fig: Contiene todos los objetos gráficos de la GUI. Este archivo solo se puede
abrir y modificar con el asistente GUIDE.
• nombreGUI.m: Contiene las subfunciones que reciben todos los eventos de los objetos en
la GUI (Callbacks). Adicionalmente crean la GUI cada vez que se ejecuta este archivo.
El archivo se puede abrir y modificar con el editor .m (Editor/Debugger).
El archivo .m que controla la GUI tiene una estructura bien definida. La programación de la
GUI se basa en el conocimiento de cada una de las partes que tiene este archivo.
CAPÍTULO 2. CREANDO GUIS 10
• Parte de Inicialización: Es un código que permite abrir el archivo .fig y crear la GUI.
Adicionalmente revisa las entradas de la función que controla la GUI para operar con
ellas si la aplicación lo necesita.
• Subfunciones de llamado (Callbacks): Son las subfunciones que atienden los eventos
de la GUI. Su cantidad depende del número de objetos que se tengan y de los eventos
habilitados para cada uno de ellos.
Cuando el archivo .m se ejecuta por primera vez el código de inicialización hace aparecer la
GUI, revisando al tiempo las subfunciones de apertura y salida. Dado que los objetos gráficos
trabajan por eventos, las subfunciones de llamado del archivo .m no se ejecutan hasta tanto
ocurre uno.
Todas las demás utilidades de MATLAB como funciones de librerias (Toolboxes), scripts y
funciones definidas por usuario, otras GUIs e inclusive Simulink son accesibles desde cualquier
GUI. Por lo tanto, las Interfaces Gráficas de Usuario o GUI’s en MATLAB permiten extender
las capacidades de scripts y funciones, adicionando un entorno gráfico. Este entorno le da al
usuario la posibilidad de ingresar valores y recibir resultados del programa de manera sencilla
y "amigable" sin intervención de la ventana de comandos.
CAPÍTULO 3
Ejercicio
function onda_seno(amp,freq,fase)
% Esta función grafica una onda seno
% Vector de tiempo para visualizar dos ciclos
t=0:2/(100*freq):2/freq;
% Vector de valores en el eje y
y=amp*sin((2*pi)*(freq*t)+fase*(pi/180));
% Grafique
plot(t,y);
% Activa regilla
grid on;
11
CAPÍTULO 3. EJERCICIO 12
Al ejecutar desde la ventana de comandos, la función entrega la siguiente gráfica para una
amplitud de 2, una frecuencia de 1000Hz y una fase de 30 grados.
En el caso de necesitar graficar la onda seno con otros parámetros diferentes, muy probablemente
se requiera cambiar en la ventana de comandos los valores de entrada de la función onda_seno
y ejecutarla de nuevo. Si se diseña una GUI para esta función se puede mejorar esta situación
un poco. La figura 3.2 muestra el diseño de la GUI en el asistente.
Una vez terminado el diseño de la GUI, se puede ejecutar desde el botón en el asistente para
verificar si la apariencia es la que se espera sin necesidad de escribir el programa que controla
la GUI. En esta parte se puede dar lugar a los eventos pero no se realiza ninguna tarea ya que
no se ha prgramado. La figura 3.3 muestra la apariencia de la interfaz.
gui_mainfcn(gui_State, varargin:);
end
% –- Subfuncion para apertura de la GUI
function ondaGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% Asigna variables de salida
handles.output = hObject;
% Actualiza la estructura de handles
guidata(hObject, handles);
% –- Subfuncion para salida de la GUI
function varargout = ondaGUI_OutputFcn(hObject, eventdata, handles)
% Asigna variables de salida
varargout1 = handles.output;