|
MÓDULO TRECE
Entorno de programación Visual Lisp
TRECE.1. Visual Lisp ES...
Visual Lisp es un entorno de desarrollo diseñado para proporcionar herramientas de ayuda en
la creación y modificación de programas fuente de AutoLISP, y herramientas de chequeo y depuración durante la prueba y
simulación de los programas. Además, permite controlar objetos ARX desde AutoLISP. En este MÓDULO TRECE se
estudia su entorno.
TRECE.2. PROCESO DE CREACIÓN DE UN PROGRAMA
El proceso de creación de un programa en AutoLISP se puede desglosar en una serie de etapas
características. El entorno de Visual Lisp interviene en cada una de la manera explicada a continuación:
· Generación de archivos de código fuente.
Visual Lisp proporciona:
-
- Editor de texto de AutoLISP y DCL, con códigos de colores y herramientas para
evidenciar la sintaxis de las expresiones.
-
- Formateador de AutoLISP para proporcionar al texto un formato y anidación adecuados.
-
- Ayuda sensible al contexto para recordar sintaxis de funciones de AutoLISP y
detección de símbolos de funciones o variables.
· Ensayo y depuración de programas. Visual Lisp proporciona:
-
- Corrector de sintaxis que reconoce construcciones de expresiones erróneas y
argumentos impropios.
-
- Simulación paso a paso de ejecución del programa, mostrando simultáneamente las
líneas del código fuente y su efecto en AutoCAD.
-
- Acceso a valores de variables y expresiones para examinar la estructura de
datos del programa. También se incluye el acceso a datos de los objetos de dibujo de AutoCAD.
· Utilización de programas. Visual Lisp
proporciona:
-
- Compilador de archivos para aumentar la eficiencia y seguridad de utilización de los
programas.
-
- Gestión de proyectos para trabajar con varios programas relacionados a la vez.
-
- Empaquetamiento de varios archivos compilados en un único módulo ADS o ARX.
TRECE.3. INSTALACIÓN E INICIACIÓN
Visual Lisp no funciona de manera independiente sino que necesita que haya una sesión de AutoCAD
ejecutándose, como ocurría con el módulo VBA. El módulo de Visual Lisp se instala desde un CD-ROM, creando su propio grupo
de programas y una carpeta específica Visual Lisp dentro del directorio de AutoCAD. El módulo se ha diseñado como una aplicación ARX, por lo que se
debe cargar desde AutoCAD, desde el menú
Herr.>Cargar aplicación, archivo VLIDE.ARX.
Nada más cargarse, se muestra la ventana de aplicación de
Visual Lisp.
Dicha ventana contiene una serie
de áreas de trabajo que son las siguientes:
· Barra de menús. Serie de menús
desplegables con los comandos y utilidades de Visual Lisp. Las
opciones de los menús pueden cambiar según el proceso de
trabajo. Los menús son:
Menú Función
File Operaciones con archivos de programas.
Edit Operaciones de edición de textos, cambios, comandos Visual Lisp, etc.
Search Búsqueda de texto, marcas, saltos a línea, etc.
View Activación de ventanas de trabajo, barras de herramientas, etc.
Project Gestión de proyectos y programas compilados.
Debug Herramientas de depuración de programas.
Tools Herramientas generales.
Window Gestión de ventanas de trabajo.
Help Ayuda en línea.
· Barras de herramientas. Hay un total de
cinco, con los comandos y utilidades más empleados. Son Debug,
Edit, Find, Inspect y Run.
· Escritorio. Superficie donde se despliegan
las diferentes ventanas de trabajo de Visual Lisp. La de Consola
se muestra desde el principio, la del Editor de texto cada
vez que se carga un archivo fuente (al principio se carga VLIDE.LSP), y la de Trace aparece minimizada hasta
que se activa el rastreo. El resto se activan durante el trabajo
o expresamente desde el menú View.
· Ventana de Consola. En ella se introducen
los comandos de Visual Lisp y las funciones de AutoLISP. Equivale
al historial de comandos de AutoCAD. Ofrece un prompt
o señal con el aspecto _$.
· Editor de texto: se abre una ventana por
cada archivo fuente cargado. Allí se muestran las expresiones de
AutoLISP mediante colores, para distinguir visualmente los
diferentes tipos de símbolos.
· Línea de estado: línea en la parte
inferior de la pantalla, con información permanente.
TRECE.3.1. Carga y ejecución
de programas
Los archivos con el código
fuente se pueden abrir o cargar. En el primer caso (menú File>Open
File) se muestra el listado en una ventana de Editor de
texto. En el segundo caso (menú File>Load File), se
cargan además en memoria según se abren, tal como se haría
desde AutoCAD mediante Herr.>Cargar aplicación.
Si existen errores en el programa, la Consola muestra mensajes de
advertencia. Se puede cargar el programa abierto actualmente,
desde un icono de la barra Tools.
Si todo es correcto, se puede
utilizar el programa llamando a la nueva función o comando de AutoCAD
directamente desde la Consola de Visual Lisp. Ésta pasa
automáticamente a AutoCAD y allí se especifican los
datos o puntos solicitados por el programa. Cuando éste termina,
se regresa a Visual Lisp. Si AutoCAD se encuentra
minimizado o no está en ejecución, Visual Lisp muestra en el
puntero del ratón un cursor con un par de paréntesis. Esto
significa que no puede comunicarse con AutoCAD. Se debe
abrir una sesión de dibujo o maximizar AutoCAD para
seguir trabajando.
Durante el trabajo, resulta muy
habitual alternar entre Visual Lisp y AutoCAD. Esto se
puede hacer mediante los procedimientos estándar de Windows
pero, para facilitar la tarea, Visual Lisp dispone de un botón
específico para pasar a AutoCAD. A su vez, el comando VLIDE de AutoCAD permite pasar directamente a
Visual Lisp.
Se pueden ejecutar expresiones
individuales y trozos del archivo fuente, para examinar su
funcionamiento. Para ello se seleccionan en el Editor de texto y
se elige la opción de menú Tools>Load selection o el
icono correspondiente.
Para salir de Visual Lisp, se
elige el menú File>Exit. Si ha habido modificaciones
en los archivos abiertos, se solicita si se desea guardar los
cambios. La próxima vez que se entre en Visual Lisp, los
últimos archivos utilizados serán automáticamente abiertos.
TRECE.4. ESCRITURA DEL
CÓDIGO FUENTE
Se examinan en esta sección las
dos ventanas básicas de trabajo en Visual Lisp: Consola y Editor
de texto. Además, se estudian también las herramientas que
inciden en el proceso de escritura y corrección del código
fuente.
TRECE.4.1. Ventana de Consola
Como ya se ha adelantado,
contiene el prompt de Visual Lisp _$ y un
historial de comandos. La última línea es la línea de comando,
donde se introducen las instrucciones o expresiones que evaluar.
Las características de la Consola son:
-
- Se introducen directamente
expresiones y variables de AutoLISP para evaluar sus
resultados (no es necesario el carácter ! como en AutoCAD para evaluar
variables). Si una expresión no cabe en una línea,
mediante CTRL+INTRO se establece una
continuidad con la siguiente. El código de colores es el
mismo que en el Editor de texto.
-
- Se puede copiar e
intercambiar texto entre la Consola y el Editor de texto.
Si se selecciona un texto del historial en la Consola
(arrastrando el cursor hasta iluminarlo) y después se
pulsa INTRO, ese texto se copia a la línea
de comando.
-
- Se pueden recuperar
comandos del historial de Visual Lisp, mediante las
teclas de TAB (hacia arriba) y SHIFT+TAB (hacia abajo).
-
- Si se utilizan las teclas
anteriores después de haber empezado una expresión en
la Consola, por ejemplo (SETQ, se recuperan hacia arriba y hacia
abajo todas las expresiones que comienzan igual.
-
- La tecla ESC elimina el texto actual en la línea de
comando de la Consola. La combinación SHIFT+ESC empieza una nueva línea de
comando, pero mantiene el texto de la anterior sin
evaluar, por si se desea recuperar más tarde.
-
- Existe un menú flotante
contextual desde el botón derecho del ratón (también
desde SHIFT+F10), con las opciones indicadas en
la tabla siguiente:
Opción de menú Descripción
Cut Corta el texto seleccionado hacia el portapapeles.
Copy Copia el texto seleccionado al portapapeles.
Paste Pega el texto del portapapeles en la posición del cursor.
Clear Console Window Vacía de texto la ventana de Consola.
Find Busca un texto especificado en la ventana de Consola
Inspect Abre el cuadro de diálogo de Inspección.
Add Watch Abre la ventana de seguimiento de expresiones.
Apropos Window Abre la ventana de localización de símbolos y funciones.
Symbol service Abre el cuadro de diálogo para establecer rastreos de
símbolos.
Undo Deshace la última operación.
Redo Rehace los efectos de la última operación deshecha.
AutoCAD Mode Activa la transferencia automática a línea de comando de
AutoCAD.
Toggle Console Log Abre/cierra un archivo de registro para escribir el historial
de Consola.
Existe una ayuda sensible al
contexto, a la que se accede desde el botón correspondiente en
la barra de herramientas de Tools. Se puede invocar tras
seleccionar un símbolo o expresión.
Si se ha activado AutoCAD Mode, el prompt pasa a ser Command:. Ahora todas las expresiones se transfieren
automáticamente a AutoCAD. Además, es posible escribir
comandos de AutoCAD en Visual Lisp.
TRECE.4.2. Editor de texto
Es una ventana que contiene el
texto de un archivo abierto. Si se abren varios archivos a la
vez, habrá una ventana por archivo. Los archivos que se pueden
abrir son de cuatro tipos: LSP, DCL, SQL y C/C++. En
este apartado se consideran fundamentalmente los archivos de
AutoLISP. El Editor de texto va sangrando las expresiones
conforme se escriben, en función del número de paréntesis que
se van abriendo. Para ello, se puede utilizar la tecla INTRO de tres maneras:
1) Pulsando INTRO sin más, el cursor cambia de línea y sangra su
posición de acuerdo con los paréntesis que van quedando
abiertos.
2) Pulsando SHIFT+INTRO, el cursor cambia de línea sin sangrar su
posición, quedándose al mismo nivel que la línea de texto
anterior.
3) Pulsando CTRL+INTRO, el cursor cambia de línea retrocediendo hasta
la posición inicial sin sangrado, y no tiene en cuenta el nivel
de anidación actual.
La tecla TAB
inserta tabuladores y la combinación SHIFT+TAB
(se puede usar incluso en mitad de una línea) elimina las
tabulaciones al principio de la línea. El tamaño de las
tabulaciones se puede modificar desde el menú Tools>Window
Attributes>Configure Current.
Es posible deshacer y rehacer
sucesivas veces las últimas modificaciones en el texto, pero
haciéndolo de forma continua. Si se escriben, por ejemplo, tres
líneas de texto, se pueden deshacer las tres seguidas y
recuperar de nuevo las tres seguidas. Pero si se deshace una y
después se escribe una nueva, ya no es posible rehacer la
eliminada.
Conviene ir guardando el texto
de cuando en cuando para evitar que un suceso imprevisto ocasione
su pérdida. Existe un mecanismo de copia de seguridad similar al
de AutoCAD, de manera que se genera un archivo de copia
con el contenido del archivo sobrescrito. La extensión de la
copia de seguridad se forma con el carácter _
y los dos primeros de la extensión original. Así, para los
archivos de AutoLISP .LSP, la extensión es ._LS. Si
se desea desechar las últimas modificaciones, la opción File>Revert
recupera el contenido del archivo .LSP tal
como se había guardado la última vez.
El código de colores empleado
en el Editor de texto se ofrece en la siguiente tabla:
Color Símbolo de AutoLISP
Rojo Paréntesis
Azul Funciones propias de AutoLISP y símbolos protegidos
Magenta Cadenas de texto
Verde Valores numéricos enteros
Verde azulado Valores numéricos reales
Negro Símbolos no reconocidos (como las funciones y variables de
usuario)
Magenta en fondo gris Comentarios
Estos colores se pueden
modificar desde el menú Tools>Window
Attributes>Configure Current. Aparece un cuadro de
diálogo donde es posible seleccionar el elemento que vamos a
modificar en una lista desplegable, y después especificar
colores de fondo y primer plano. También se puede indicar el
intervalo del tabulador (ya comentado) y un margen izquierdo.
Igual que en la Consola, se
puede utilizar el mismo botón de ayuda sensible al contexto.
También existe un menú flotante con algunas opciones idénticas
a la Consola, añadiéndose dos específicas:
Opción de menú Descripción
Go to Last Edited Mueve el cursor a la posición del último texto editado.
Toggle Breakpoint Sitúa un punto de ruptura en la posición del cursor o lo
elimina si existía.
Existen dos herramientas muy
útiles a la hora de ir escribiendo los símbolos y funciones,
para completar una palabra:
-
- Coincidencia (Match):
Se utiliza para funciones y variables existentes en el
archivo. Consiste en escribir los primeros caracteres de
la palabra y pulsar sucesivas veces las teclas ALT+/ en el teclado inglés o ALT+Ç en el teclado español. Visual Lisp va
ofreciendo todas aquellas funciones y variables
existentes en el archivo cuyos primeros caracteres
coinciden, para que el usuario elija.
-
- Tabla de símbolos de
AutoLISP (Apropos): Se utiliza para funciones de
AutoLISP. Tras escribir los primeros caracteres de la
palabra, se pulsa CTRL+SHIFT+/ en el teclado inglés o CTRL+SHIFT+Ç en el teclado español. Existe
un botón de herramienta que realiza esta misma función.
Visual Lisp escribe la función o símbolo de AutoLISP
más próximo que empieza por esos caracteres. Si se
vuelve a pulsar la combinación y hay más funciones
posibles, se ofrece una lista para seleccionar la
deseada. Si hay más de 15 funciones posibles, o no se ha
empezado ninguna palabra, se abre automáticamente la
ventana de Apropos, explicada en el siguiente
apartado.
TRECE.4.2.1. La herramienta Apropos
Esta herramienta, cuyo empleo se
ha explicado para completar una función de AutoLISP empezada en
el Editor de texto, presenta una utilidad más general. Consta de
un cuadro de diálogo para establecer la búsqueda, y una ventana
con las funciones encontradas.
Al cuadro de diálogo se accede
desde el menú View>Apropos Window, desde la opción
homónima del menú flotante, desde el botón de herramienta
correspondiente, o pulsando CTRL+SHIFT+/ (teclado inglés) o CTRL+SHIFT+Ç (teclado español), siempre que no haya texto
empezado en la posición del cursor o texto seleccionado. Las
opciones del cuadro son:
Opción Descripción
Caracteres de búsqueda Uno o más caracteres para realizar la búsqueda. Por
defecto, se ofrecen los de la última búsqueda.
Match by Prefix Si se activa, sólo se localizan las funciones de
AutoLISP que empiezan por los caracteres de búsqueda. Si no
se activa, se localizan todas las funciones que presentan
esos caracteres aunque no sea al comienzo.
Use WCMATCH Permite utilizar caracteres comodín como el
asterisco, para localizar nombres que cumplan un patrón.
Downcase symbols Si se activa, la función seleccionada por el usuario,
entre las que han sido localizadas en la búsqueda, se
copiará en minúsculas. En caso contrario, se copiará en
mayúsculas tal como aparecen en la lista de localizadas.
Filter Value Abre un subcuadro para establecer un filtro que
condicione la búsqueda:
All: No hay filtro; se consideran por defecto sólo las
funciones de AutoLISP.
Null value: Sólo se consideran los símbolos cuyo
valor es nil.
Nonull value: Sólo se consideran los símbolos cuyo
valor no es nil.
Functions: Se consideran todas las funciones
(también las de usuario).
User function: Sólo se consideran las funciones de
usuario (no AutoLISP).
Built-in function: Sólo las funciones construidas en
Visual Lisp.
EXSUBR: Sólo las subrutinas externas.
Filter Flags Abre un subcuadro para establecer condiciones de
búsqueda a partir del tipo de atributo o señal de la
función.
OK Hace efectiva la búsqueda. Si existen funciones que
cumplen las condiciones se abre una ventana con las
encontradas.
Para seleccionar una de las
funciones localizadas, se ilumina en la ventana de Apropos y,
mediante el botón derecho del ratón, se elige Copy to
clipboard. Posteriormente, se pega mediante Paste en
la posición del cursor en el archivo de texto. La ventana de Apropos
presenta tres botones de herramientas: el primero invoca el
cuadro de diálogo por si se quiere repetir la búsqueda o
establecer nuevas condiciones, el segundo traslada la función
seleccionada a la ventana de rastreo Trace y el tercero
proporciona ayuda en línea. Por último, el menú flotante de la
ventana Apropos (botón derecho del ratón) contiene una
serie de opciones:
Opción Descripción
Copy to clipboard Copia la función seleccionada al portapapeles.
Inspect Abre una ventana de inspección con la función
seleccionada.
Print Pasa la función a la Consola para su evaluación.
Symbol Llama al cuadro de diálogo de Symbol service.
Copy Copia la función en la variable especial *obj* para
su uso posterior.
Add to Watch Añade la función a la lista en la ventana de Watch.
Help Proporciona ayuda en línea sobre la función.
TRECE.4.2.2. Utilidades de
gestión de texto
El contenido del archivo abierto
en el Editor de texto se puede modificar mediante una serie de
opciones y herramientas. La primera es un menú flotante especial
que se invoca mediante CTRL+E. Sus opciones son:
Opción de menú Descripción
Indent Block Sangra el bloque de texto seleccionado una posición de
tabulador.
Unindent Elimina una posición de tabulador del sangrado del bloque
de texto.
Prefix With Añade un texto al comienzo de todas las líneas del bloque
de texto.
Append With Añade un texto al final de todas las líneas del bloque de
texto.
Comment Block Convierte el bloque de texto en comentarios.
Uncomment Block Deshace la conversión del bloque de texto en comentarios.
Save Block As Copia el bloque de texto a un archivo (por defecto
extensión .LSP)
Upcase Convierte a mayúsculas todo el texto del bloque
seleccionado.
Downcase Convierte a minúsculas todo el bloque de texto.
Capitalize Pone en mayúsculas la primera letra de cada palabra.
Insert Date Inserta la fecha actual (por defecto en el formato
MM/DD/AA).
Insert Time Inserta la hora actual (por defecto en el formato
HH/MM/SS).
Format Date/Time Permite cambiar el formato de fecha y hora.
Sort Block Ordena alfabéticamente las líneas del bloque de texto.
Insert File Inserta en la posición del cursor el contenido de un archivo
de texto.
Delete to EOL Borra el texto desde la posición del cursor hasta el final de
la línea.
Delete Blanks Borra tabuladores y espacios en blanco sobrantes en la
línea actual.
En la siguiente tabla, se
enumeran las diferentes teclas aceleradoras para gestionar el
texto en la ventana del Editor:
Desplazamientos del cursor
Teclas Efecto
CTRL+ß y CTRL+à Una palabra hacia la izquierda o hacia la derecha.
INICIO y FIN Comienzo o final de línea.
CTRL+FIN y CTRL+INICIO Final del archivo de texto o inicio del archivo de
texto.
CTRL+á Desplaza una línea hacia arriba el contenido de la
ventana.
CTRL+â Desplaza una línea hacia abajo el contenido de la
ventana.
RE PÁG y AV PÁG Desplaza una página hacia arriba o abajo el
contenido de la ventana.
CTRL+[ (teclado inglés) Salta al paréntesis izquierdo abierto al mismo nivel
CTRL+ (teclado español) que la posición del cursor. Después, a los sucesivos, desde
los interiores a los exteriores.
CTRL+] (teclado inglés) Salta al paréntesis derecho cerrado al mismo nivel
CTRL+¡ (teclado español) que la posición del cursor. Después, a los sucesivos,
desde los interiores a los exteriores.
Selección de texto
Teclas Efecto
SHIFT+ß y SHIFT+à Añade o elimina de la selección un carácter a la
izquierda o a la derecha.
CTRL+SHIFT+ß y CTRL+SHIFT+à Añade o elimina de la selección una palabra a la
izquierda o a la derecha.
SHIFT+â y SHIFT+á Añade o elimina de la selección una línea hacia
abajo o hacia arriba.
CTRL+SHIFT+â y CTRL+SHIFT+á Añade o elimina el trozo de línea de abajo o arriba
hasta el cursor.
SHIFT+FIN y SHIFT+INICIO Amplía la selección hasta final o inicio de línea
actual y de las sucesivas.
SHIFT+RE PÁG y SHIFT+AV PÁG Añade o elimina de la selección una página arriba o
abajo de la ventana.
CTRL+SHIFT+[ (teclado inglés) Amplía la selección hasta el paréntesis izquierdo
CTRL+SHIFT+ (teclado español) abierto al mismo nivel del cursor. Después a los
sucesivos desde los interiores a los exteriores.
CTRL+SHIFT+] (teclado inglés) Amplía la selección hasta el paréntesis derecho
CTRL+SHIFT+¡ (teclado español) cerrado al mismo nivel del cursor. Después a los
sucesivos desde los interiores a los exteriores.
ALT+INTRO Salta el cursor al principio o final del texto
seleccionado.
Corrección de texto
Teclas Efecto
CTRL+RETROCESO Borra la palabra a la izquierda.
SHIFT+RETROCESO Borra la palabra a la derecha.
CTRL+SUPR Borra la palabra a la derecha.
CTRL+E Con su opción Delete to EOL borra desde cursor hasta final de
línea.
Un texto seleccionado en el
Editor se puede arrastrar mediante el ratón hasta otra posición
del archivo. Si se mantiene pulsada la tecla CTRL se copiará, en caso contrario se desplazará.
Para desplazar o copiar a otras ventanas, se utiliza el
portapapeles de Windows.
Para buscar o reemplazar texto
existen utilidades en el menú Search o en la barra de
herramientas del mismo nombre. Desde Search>Find, o el
botón correspondiente, se llama a un cuadro de diálogo con
opciones de búsqueda. Son las siguientes:
Opción Descripción
Find What Cadena de texto que se localizará.
Search Current selection Busca sólo en el texto seleccionado.
Search Current file Busca en todo el archivo de la ventana actual.
Search Find in project Busca en los archivos del proyecto especificado.
Search Find in files Busca en todos los archivos de la carpeta
especificada. Se puede indicar que incluya también los
subdirectorios.
Direction Se especifica la dirección de búsqueda (hacia arriba
o hacia abajo).
Match whole Word only Sólo se buscan palabras completas.
Match case Se tienen en cuenta las mayúsculas y minúsculas.
Mark instances Se añade una marca al texto localizado, para poder
volver a él.
Find Ejecuta la búsqueda, deteniéndose en el primer
texto localizado. Mediante F3 se pueden ir localizando los
siguientes textos que coincidan.
El texto localizado en cada
búsqueda, se añade a una lista desplegable en la barra de
herramienta de Find. Cualquiera de los textos de la lista
se puede seleccionar y efectuar una nueva búsqueda desde un
botón específico a la derecha.
Para buscar y reemplazar un
texto por otro, desde el menú Search>Replace, o el
botón correspondiente, se llama a un cuadro de diálogo similar
al de búsqueda, que añade una casilla para indicar el nuevo
texto y dos botones para reemplazar los textos uno a uno o todos
de una vez.
Una última herramienta para el
desplazamiento por el texto es la posibilidad de introducir hasta
32 marcas (Bookmarks) en diferentes posiciones, para
después localizarlas cómodamente. Cada ventana tiene su propio
gestor de marcas. Las opciones disponibles son:
Opción Descripción
Crear marca Para situar una marca en la posición del cursor se pulsa el
botón de herramienta correspondiente o las teclas ALT+. (punto).
Pulsando otra vez, se elimina la marca.
Mover el cursor
hasta la marca previa Se pulsa el botón de herramienta correspondiente o las
teclas CTRL+, (coma). El cursor salta hasta la marca
previa, en el orden en que se han creado, no el de posición
en el archivo.
Mover el cursor
hasta la marca
siguiente Se pulsa el botón de herramienta correspondiente o las
teclas CTRL+. (punto). El cursor salta hasta la marca siguiente, en
el orden en que se han creado, no el de posición en el archivo.
Seleccionar texto
hasta la marca previa Se pulsan las teclas CTRL+SHIFT+, (coma). El texto entre
posición del cursor y marca previa queda seleccionado.
Seleccionar texto
hasta la marca
siguiente Se pulsan las teclas CTRL+SHIFT+. (punto). El texto entre
posición del cursor y marca siguiente queda seleccionado.
Eliminar marca Se sitúa el cursor en la posición de la marca y se pulsa el
mismo botón de herramienta de creación o las teclas ALT+. (punto).
Para eliminar todas las marcas de una vez, existe un botón de
herramienta específico.
TRECE.4.2.3. Formateado del
código fuente
Formatear un texto consiste en
distribuirlo de una manera adecuada para su correcta legibilidad.
En Visual Lisp se puede actuar de dos maneras:
· Formatear todo el texto del archivo. Para
ello se elige la opción de menú Tools>Format AutoLISP in
Editor, o el botón de herramienta correspondiente.
· Formatear el texto seleccionado. Una vez
iluminado el texto, se elige la opción de menú Tools>Format
AutoLISP in Selection, o el botón de herramienta
correspondiente.
Durante el formateo se comprueba
el balance de paréntesis, mostrándose un mensaje de advertencia
si se detecta algún error. Sin embargo, los errores no se
corrigen; esto se hace mediante la herramienta de chequeo (Check)
explicada en la siguiente sección. Visual Lisp aplica
automáticamente cuatro estilos de formateo, según el tipo de
expresiones que encuentre:
-
- Formateo sencillo (Plane).
Todos los elementos se sitúan en la misma línea de
texto, separados por simples espacios. Visual Lisp lo
aplica cuando la expresión cabe en una línea (de
acuerdo con el valor de Right text margin del
cuadro de diálogo explicado más adelante), cuando no
sobrepasa el margen de impresión (de acuerdo con el
valor de Maximun length for plane expression del
cuadro de diálogo) y cuando no tiene comentarios que se
extienden más de una línea.
-
- Formateo ancho (Wide).
El primer argumento de cada función se mantiene en
línea, pero el resto de argumentos se sitúan en nuevas
líneas, debajo del primero. Visual Lisp lo aplica cuando
no se cumplen las condiciones del formateo sencillo y
además el primer elemento es una función y su longitud
no sobrepasa el valor de Maximun wide-style car length
del cuadro de diálogo.
-
- Formateo estrecho (Narrow).
Cada argumento, incluido el primero, se sitúa en nueva
línea debajo de la función, sangrados de acuerdo con el
valor de Narrow style indentation del cuadro de
diálogo. Visual Lisp lo aplica a determinadas funciones
como PROGN.
-
- Formateo en columna (Column).
Todos los elementos se sitúan en columna. Visual Lisp lo
aplica a funciones como COND.
El estilo de formateo se
controla desde el menú Tools>Environment
Options>AutoLISP Format options. Aparece un cuadro de
diálogo con las siguientes opciones:
Opción Descripción
Right text margin Número máximo de caracteres en una línea.
Narrow style
indentation Caracteres de sangrado para el formateo estrecho.
Maximun wide-style
car length Máximo sangrado para el formateo ancho.
Single semicolon
comment indentation Posición para los comentarios.
Closing paren style Controla la situación de los paréntesis de cierre.
Insert tabs Inserta tabuladores en los sangrados.
Save formatting
options in source file Inserta un comentario al final del archivo, con los
formateos efectuados.
Insert form-closing
comment Inserta un comentario al final de cada función que contiene
otras anidadas. Por ejemplo ;_end of DEFUN.
Form-closing comment
prefix Prefijo para los comentarios de la casilla anterior.
Por defecto es end of.
More options Despliega nuevas opciones ampliando el cuadro de diálogo.
Preserve existing
line breaks Si alguna expresión se encuentra partida al final de la línea,
se conserva esta partición al formatear.
Split comments Si hay comentarios al final de una línea, se subdividen para
que queden ajustados al margen derecho, distribuyéndose en varias
líneas.
Setting Case
for symbols Las funciones y símbolos de AutoLISP (Protected) y las de
usuario (UnProtected) pueden ser convertidas a minúsculas
(downcase) o mayúsculas (UPCASE) durante el formateo.
Longlist format style Controla el formateo de las expresiones con más de cinco
argumentos.
Para que las opciones de
formateo modificadas se mantengan en futuras sesiones de Visual
Lisp, se pueden guardar desde el menú Tools>Save Settings.
TRECE.4.2.4. Chequeo de
errores de sintaxis
Antes de proceder a la
depuración mediante la ejecución del programa, desde el Editor
de texto se puede realizar un primer chequeo para detectar si el
balance de paréntesis es correcto. Ya se ha visto en el apartado
anterior que al formatear un texto, se detectan los paréntesis
no balanceados. El formateador ofrece la posibilidad de añadir
esos paréntesis, pero lo hace generalmente al final de línea o
de expresión, sin permitir un control sobre la situación
adecuada de los mismos.
Incluso antes de realizar
ningún chequeo, el código de colores del Editor de texto
facilita una primera detección de errores evidentes. Por
ejemplo, si el color magenta se extiende más de lo previsto, es
porque hay una cadena de texto sin comillas de cierre. Si un
nombre de función aparece en negro y no en azul, es porque se ha
escrito mal y no se reconoce como función de AutoLISP. También
después de formatear, si aparecen una serie de expresiones en
columna, puede denotar la falta de algún paréntesis de cierre y
por ello se han considerado todas las expresiones como argumentos
de una función inicial no cerrada.
Se recuerda además que existen
teclas aceleradoras de desplazamiento de cursor, que ayudan a
evidenciar los anidamientos de paréntesis.
Una vez detectados estos errores
más evidentes, el usuario puede utilizar la herramienta de
chequeo (Check) de Visual Lisp. Existen dos opciones:
· Chequear todo el texto del archivo. Para
ello se elige la opción de menú Tools>Check Text in
Editor, o el botón de herramienta correspondiente.
· Chequear el texto seleccionado. Una vez
iluminado el texto, se elige la opción de menú Tools>Check
Selection, o el botón de herramienta correspondiente.
Durante el chequeo, Visual Lisp
examina todas las expresiones y detecta los errores de sintaxis
(no los de funcionamiento), escribiéndolos en una ventana
denominada Build Output que abre automáticamente. Los
errores se resaltan sobre un fondo de color ciano. Si se hace
doble clic sobre el mensaje de error, Visual Lisp vuelve al
Editor y sitúa el cursor al comienzo de la expresión que ha
producido el error, iluminándola entera. El usuario corrige la
expresión y vuelve a ejecutar el chequeo hasta que dejan de
detectarse errores.
La última operación, una vez
corregidos todos los errores de sintaxis, sería cargar y
ejecutar el programa para comprobar su correcto funcionamiento.
También aquí existen dos posibilidades:
· Cargar todo el texto del archivo. Para
ello se elige la opción de menú Tools>Load Text in Editor,
o el botón de herramienta correspondiente.
· Cargar el texto seleccionado. Una vez
iluminado el texto, se elige la opción de menú Tools>Load
Selection, o el botón de herramienta correspondiente.
El resultado es que se cargan en
memoria las expresiones indicadas. Si contienen instrucciones de
ejecución directa, éstas se realizan. Si contienen definiciones
de función, debe llamarse a éstas desde la Consola para
ejecutarlas. Los errores de funcionamiento que se puedan
detectar, requieren de las herramientas de depuración para su
corrección. Esto se explica en la sección siguiente.
TRECE.5. DEPURACIÓN DE
PROGRAMAS
Un procedimiento de depuración
sencillo de un programa se podría resumir en una serie de etapas
características:
1) Situar en el texto fuente,
uno o más puntos de ruptura (Breakpoints) en los sitios
donde se desea examinar en detalle la rutina.
2) Ejecutar todo o parte del
programa. Este se detendrá en el primer punto de ruptura.
3) Seleccionar las funciones o
variables que se desea examinar y añadirlas a la lista de la
ventana de seguimiento Watch.
4) Ejecutar las expresiones paso
a paso mediante las herramientas Step.
5) En la ventana Watch ir
comprobando los valores que adoptan las funciones y variables
seleccionadas.
6) Una vez comprobado el
funcionamiento en detalle de esas determinadas zonas del
programa, continuar con el resto o abortarlo mediante las
herramientas de Continue, Quit y Reset.
El proceso de depuración más
elemental, consiste pues en situar puntos de ruptura. El trabajo
con dichos puntos dispone de una serie de opciones:
· Creación y eliminación. Cada punto se
crea (o elimina si ya existiera) desde el menú Debug>Toggle
Breakpoint o desde el botón correspondiente. Existe una
opción Debug>Clear All Breakpoints para eliminar todos
los puntos de ruptura. Al ejecutar un programa, se detiene en
cada punto de ruptura y entra en la modalidad de Break Loop
explicada más adelante.
· Desactivación. Si un punto no va a
ser usado en este momento, pero se desea mantenerlo para usarlo
más adelante, se puede desactivar. Para ello, se sitúa el
cursor sobre él, se pulsa el botón derecho del ratón y, en el
menú flotante, se elige la opción Breakpoint service.
Aparece un cuadro de diálogo con botones para desactivar,
eliminar o mostrar el punto de ruptura.
· Control de colores. El punto de ruptura se
muestra con un rectángulo rojo para su fácil identificación.
Si está desactivado, se muestra con un fondo gris. Estos colores
se puede modificar desde el menú Tools>Windows
Attributes>Configure Current escogiendo :BPT-ACTIVE
o :BPT-DISABLE en la lista desplegable.
· Gestión de todos los puntos. Todos los
puntos de ruptura de todos los archivos abiertos se pueden
gestionar desde el menú View>Breakpoints Window. Se
muestra un cuadro de diálogo con una lista de todos los puntos,
ofreciendo el archivo fuente y la posición (con signo más los
activados y signo menos los desactivados). El botón Edit
muestra el cuadro de Breakpoint service ya explicado. El
botón Show muestra la posición del punto seleccionado en
la lista, desplazando el cursor hasta él. El botón Delete
elimina el punto seleccionado, y Delete All elimina
todos los puntos de la lista.
Los puntos de ruptura se pierden
si se elimina el trozo de texto donde están, si se edita el
archivo fuente con otra aplicación diferente de Visual Lisp, y
también si se formatea el texto con alguna de las herramientas
de Visual Lisp. Si se modifica el texto fuente y se ejecuta
después sin haber cargado de nuevo en memoria el archivo,
aparece un mensaje de advertencia y no se permite continuar con
la depuración. Es preciso cargar de nuevo el programa.
Para otros procesos de
depuración más completos o específicos, Visual Lisp
proporciona dos modos de depuración (Break Loop y Trace)
que incluyen las siguientes herramientas:
· Modo Break Loop. Detiene le
ejecución del programa en un punto de ruptura y permite examinar
paso a paso el valor de las funciones y variables.
· Facilidad Trace Stack.
Permite examinar las últimas acciones del programa antes de
detenerse en un punto de ruptura o abortarse al surgir un error.
· Modo Trace. Corresponde a la
función de AutoLISP TRACE, que marca con atributos de rastreo las
funciones definidas en el programa.
· Ventana Watch. Proporciona
en tiempo real los valores de funciones y variables.
· Servicio de Símbolos. Proporciona
asistencia para la depuración de símbolos.
· Inspector. Proporciona información
detallada de un elemento, descendiendo al máximo nivel de
anidación si así se solicita.
TRECE.5.1. Modo de
depuración Break Loop
La estructura básica en los
programas de AutoLISP son las expresiones. La ejecución normal
de un programa consiste en leer, evaluar y escribir resultados a
partir de funciones y variables. Esto es lo que se conoce como
nivel primario de ejecución o Top Level. Cuando desde
Visual Lisp se interrumpe la ejecución de un programa mediante
alguna de las herramientas disponibles, se entra en un ciclo de
ruptura o break loop . El control pasa a la Consola y el prompt
muestra el nivel de anidación del ciclo de ruptura, por ejemplo:
_1_$
Desde un nivel de ruptura se
puede iniciar otro anidado y así sucesivamente. Mientras se
permanece en esta modalidad, el usuario puede examinar y
modificar los valores de variables dentro de la porción de
programa involucrada en la ruptura, para analizar su
comportamiento (por ejemplo mediante funciones SETQ introducidas desde la Consola). Pero no se puede
modificar el texto fuente ni pasar a AutoCAD. Cuando
finaliza el examen, una serie de herramientas permiten salir al
nivel superior de ruptura o directamente al nivel primario, o
bien continuar la ejecución del resto del programa. Sólo cuando
la ruptura se debe a un error, no se permite continuar la
ejecución del mismo y se debe salir forzosamente del ciclo de
ruptura.
Las opciones disponibles para
especificar el tipo de ruptura son:
Opción Descripción
Toggle Breakpoint Consiste en situar manualmente puntos de ruptura
en las expresiones deseadas del programa, como ya se ha
explicado.
Stop Once Se activa desde el menú Debug>Stop Once y hace
que Visual Lisp rompa incondicionalmente la ejecución de un
programa al encontrar la primera expresión depurable.
Break on Function Entry Consiste en marcar expresamente funciones para su
depuración. Visual Lisp provocará una ruptura cada vez que
se encuentre con esas funciones durante la ejecución de un
programa. Las marcas de depuración se colocan, tras
seleccionar una función o variable en el Editor, desde el
menú View>Symbol Service activando la casilla Trace.
Modo de depuración Top Level Hace que las rupturas para depuración se produzcan
durante la propia carga del archivo de programa, antes de
evaluar las funciones de anidamiento más exterior (como
DEFUN). Se activa desde el menú Tools>Environment
Options>General Options, desde la pestaña Diagnostic,
desactivando la casilla Do not debug top-level.
Modo Animate Ejecuta el programa paso a paso, ofreciendo en la
ventana Watch los resultados de todas las funciones y
variables según se producen. Se activa desde el menú
Debug>Animate. La velocidad de ejecución paso a paso se
controla desde el menú Tools>Environment Options>General
Options, desde la pestaña Diagnostic, indicando el valor en
milisegundos en la casilla Animation delay.
Break on Error Se activa desde el menú Debug>Break On Error y
hace que Visual Lisp entre automáticamente en el modo Break Loop en cuanto se produce un error, sin necesidad de haber creado puntos de ruptura.
Mientras se permanece dentro de
un ciclo de ruptura, la ejecución del programa se controla
mediante una serie de opciones o botones. Son:
Opción Descripción
Continue Continúa la ejecución del programa hasta el
siguiente punto de ruptura, o hasta el final si no hay más.
Quit Sale del actual nivel de ruptura hasta el inmediato superior.
Reset Sale directamente al nivel primario (Top Level).
Step into Evalúa la siguiente expresión anidada en el punto de
ruptura y, sucesivamente, las siguientes expresiones incluyendo las
anidadas, una a una.
Step over Evalúa las siguientes expresiones del mismo nivel de
anidamiento que el punto de ruptura, sin pasar por las interiores
que pudieran tener anidadas.
Step out Evalúa de golpe todo el bloque desde el punto de
ruptura hasta el final de la función en cuyo interior se ha
producido.
Last Break Ilumina el último trozo de texto fuente evaluado
durante el modo de ruptura.
Stopped Informa, mediante una línea roja en el propio botón,
si la última evaluación ha finalizado en un paréntesis de apertura
o de cierre.
TRECE.5.2. Modo de
depuración Trace
Visual Lisp dispone de una
herramienta de depuración denominada Trace Stack.
Consiste en una pila donde va almacenando todas las evaluaciones
efectuadas cuando se ejecuta una función o una expresión desde
la Consola. De esta manera, cuando ocurre una interrupción
debido a un error o por haberse encontrado un punto de ruptura,
el historial de lo ocurrido en el programa antes de la
interrupción se encuentra a disposición del usuario en una
serie de registros en el Stack. Estos pueden ser de cinco
tipos:
· Llamada de función. Se muestra el nombre
y los valores de cada argumento.
· Origen de los registros. Palabra
clave que indica el origen de los registros de Trace Stack.
Se sitúa al principio o final de la lista de registros y puede
ser :TOP-COMMAND, :USER-INPUT, :BREAK-POINT,
:ERROR-BREAK, etcétera.
· Registro primario (Top).
Indica una acción iniciada expresamente en la Consola en el
nivel Top o durante la carga de un programa o texto
seleccionado.
· Registro Lambda. Cuando se trata de
la llamada a una función LAMBDA.
· Funciones especiales. Las llamadas
a FOREACH y REPEAT no
muestran los valores de los argumentos.
Para examinar la ventana de Trace
Stack se elige el menú View>Trace Stack o el
botón correspondiente. Esta ventana tiene dos botones de
herramienta propios: actualizar el contenido y copiar la lista de
elementos a la ventana de Trace (que ofrece así un
historial de todas las veces que se ha utilizado el Trace
Stack). Además, una vez seleccionado un elemento, existe un
menú flotante accesible desde el botón derecho del ratón con
las siguientes opciones:
Opción de menú Descripción
Inspect Invoca el cuadro de diálogo de inspección (Inspector).
Print Escribe el elemento en la Consola.
Function Symbol Si el elemento es una llamada de función, muestra
el cuadro de diálogo de Symbol Service.
Copy Copia el valor del elemento a la variable de sistema *obj*.
Local Variables Si el elemento es una llamada de función, muestra
el cuadro de diálogo de Frame Binding con los valores de
variables en la llamada a la función. Esta ventana tiene su
propio menú flotante, con opciones similares.
Source Position Sitúa el cursor en la posición del elemento que ha
originado la depuración (por ejemplo, donde está el punto
de ruptura o donde se ha producido el error) en el texto
fuente, iluminando éste.
Call point Source Sitúa el cursor en la posición del elemento en el texto
fuente.
Además de la ventana de Trace
Stack, existe una ventana de Trace donde se muestran
todas las llamadas a las funciones que han sido marcadas con un
atributo de rastreo.
TRECE.5.3. Ventana de
seguimiento Watch
Consiste en una ventana a la que
se añaden las funciones o variables que se desea someter a
seguimiento. Esto se hace situando el cursor sobre el nombre de
la función o variable (en la ventana del Editor, en la Consola,
etc.) y escogiendo la opción Add Watch del menú
desplegable Debug o del menú flotante (botón derecho del
ratón), y también mediante el botón correspondiente de barra
de herramientas.
En la ventana Watch se
ofrece en tiempo real los valores que van adoptando todas las
funciones y variables, durante la ejecución o depuración del
programa. Esta ventana tiene cuatro botones de herramienta
propios: añadir otro elemento a la lista, eliminar todos los
elementos para empezar una lista nueva, ordenar alfabéticamente
la lista y copiar la lista a la ventana de Trace. Además,
cuando hay un elemento seleccionado en la lista, el botón
derecho del ratón despliega un menú flotante específico, con
las opciones:
Opción Descripción
Inspect value Invoca el cuadro de diálogo de inspección (Inspector).
Copy value Copia el valor del elemento a la variable de sistema *obj*.
Print value Escribe el valor del elemento en la Consola, precedido de (QUOTE).
Symbol... Llama al cuadro de diálogo de Symbol Service.
Apropos... Llama al cuadro de diálogo de Apropos.
Remove from Watch Elimina el elemento de la lista.
TRECE.5.4. Cuadro de diálogo
de servicio de símbolos Symbol Service
Proporciona una herramienta para
facilitar la depuración de símbolos como nombres de funciones y
variables. Se accede situando el cursor sobre un nombre o
iluminando éste en el Editor, y escogiendo el menú View>Symbol
Service o el botón correspondiente. También se accede desde
opciones del menú flotante contextual en las ventanas de Trace
Stack o de Watch, como ya se ha explicado. Este cuadro
tiene cuatro botones de herramienta propios: añadir el símbolo
a la ventana Watch, llamar al cuadro de diálogo de Inspect,
mostrar la definición del símbolo y una ayuda en línea.
Sus opciones son:
Opción Descripción
Name Nombre del símbolo que depurar.
Value Valor del símbolo o su cadena de definición interna.
Trace Marca una función de usuario con un atributo de rastreo
(Tr). Durante la ejecución del programa, todas las llamadas a esta
función se mostrarán en la ventana de Trace.
Debug on Entry Origina un punto de ruptura en cada llamada a la función
(atributo De)
Protect Assign Asigna una protección al símbolo para que no pueda ser
sobreescrito (mediante SETQ o DEFUN, por ejemplo). Todas las
funciones y símbolos propios de AutoLISP están protegidos (atributo
Pa).
Export to ACAD Exporta el símbolo a AutoCAD, que lo tratará como una
subrutina externa (atributo Ea).
TRECE.5.5. Ventana de
inspección de objetos Inspect
Permite examinar y modificar los
objetos de AutoLISP (listas, números, cadenas, variables...) y AutoCAD
(entidades de dibujo, conjuntos de selección...). Se accede
situando el cursor sobre un nombre, o iluminando éste, y
escogiendo el menú View>Inspect o el botón
correspondiente. También se accede desde opciones del menú
flotante contextual en las ventanas de Trace Stack o de Watch,
o desde un botón de otros cuadros como Simbol Service,
cosa que ya se ha explicado. Si no se selecciona ningún
símbolo, se solicita el nombre de éste ofreciendo una lista
desplegable con los 15 últimos símbolos inspeccionados.
Cada objeto inspeccionado abre
una nueva ventana de inspección. Desde el menú Window>Close
Windows>Inspectors se cierran de una vez todas las
ventanas de inspección. La ventana de inspección de objetos
ofrece tres elementos:
· Caption. Es el título del propio cuadro,
donde se ofrece el tipo del objeto que se está inspeccionando.
· Object line. Muestra una representación
del objeto en caracteres imprimibles. Existe un menú contextual
específico (botón derecho del ratón) con opciones estándar.
· Element list. Lista de elementos
componentes del objeto. Cada componente presenta el nombre (entre
corchetes cuando puede ser modificado y entre llaves cuando no) y
el valor. Cada elemento de la lista puede ser a su vez
inspeccionado, desde un menú contextual (botón derecho del
ratón) que contiene una serie de opciones estándar.
Los tipos de objetos y los
valores se ofrecen en la siguiente tabla:
Tipo de objeto Descripción
INT Número entero. La lista de componentes muestra
representaciones del número en binario, octal, hexadecimal, etc.
REAL Número real. La lista de componentes se muestra vacía.
STRING Cadena de texto. La lista de componentes muestra los
caracteres. Cada uno puede examinarse como un entero a
partir de su código ASCII.
SYMBOL Símbolo. La lista muestra el valor, el nombre imprimible y
los atributos (Tr, Pa, De o Ea), explicados en Symbol Service.
LIST Lista de elementos. Se muestran todos los elementos. Si la
lista no es propia de AutoLISP, se muestra el resultado de CAR y
CDR aplicados a ella
FILE Descriptor de archivo. Se muestra el nombre, atributos de
apertura, ID del archivo, posición en el archivo y señal de final
EOF.
SUBR, EXSUBR y USUBR Funciones de AutoLISP externas y de usuario. Se muestra
el nombre y los argumentos.
ENAME Nombre de entidad de dibujo. Se muestra la lista de datos
completa.
PICKSET Conjunto de selección. Se muestra la lista de nombres de
todos los objetos del conjunto.
Para examinar la lista de datos
de un objeto de dibujo de AutoCAD, se puede llamar a la
ventana de Inspección para una variable que contenga un nombre
de entidad. La lista de componentes de Inspect mostrará
todos los datos de la entidad, siempre que desde el menú Tools>Environment
Options>General Options, en la pestaña Diagnostic,
esté activada la casilla Inspect drawing objects verbosely.
Para abrir una ventana de
inspección de todos los objetos del dibujo actual de AutoCAD,
se puede hacer desde el menú View>Browse Drawing Database.
Existen opciones para examinar todas las entidades de dibujo,
tablas de símbolos, definiciones de bloques, objetos designados
o datos extendidos. En cada caso se mostrará una lista con todos
los objetos encontrados. A partir de cada elemento de la lista,
mediante el menú contextual (botón derecho del ratón) se
pueden inspeccionar sus componentes (por ejemplo los vértices de
una polilínea o entidades de un bloque) y así sucesivamente.
TRECE.6. CONSTRUCCIÓN Y
GESTIÓN DE APLICA-CIONES
Los programas e instrucciones de
AutoLISP son sometidos a una compilación inmediata cuando se
ejecutan desde Visual Lisp. Se trata de un mecanismo semejante al
intérprete de expresiones que tiene AutoCAD. Sin embargo,
Visual Lisp proporciona una importante herramienta de
compilación de archivos, que permite encriptar y proteger el
programa, y además ejecutarlo desde fuera del entorno de Visual
Lisp. Los archivos de programas compilados tienen la extensión .FAS.
Cuando el usuario diseña una
aplicación compleja, con varios archivos diferentes de programas
que funcionan en paralelo, Visual Lisp introduce el concepto de
proyecto, que se estudiará un poco más adelante.
TRECE.6.1. Compilación de
archivos de programa
La compilación de un archivo de
AutoLISP se hace mediante un comando Visual Lisp-COMPILE, desde la Consola. La sintaxis es:
(Visual Lisp-COMPILE modo
"Archivo_Fuente" ["Archivo_Salida"])
Donde modo se debe indicar precedido de apóstrofo (QUOTE). El archivo fuente es el de AutoLISP y el de
salida el compilado que obtener. Si no se indica éste último,
su nombre será el mismo que el del fuente. Los modos son los de
la siguiente tabla:
Modo Descripción
st Modo estándar. Produce el archivo de salida más pequeño. Es el más
indicado para programas que ocupan un solo archivo.
lsm Modo optimizado. Con compactación de nombres de funciones y
variables, pero sin vínculos.
lsa Modo optimizado. Con vínculos entre funciones.
Durante la compilación la
ventana de salida de aplicaciones Build Output,
ofrece las incidencias y errores encontrados. Si se produce
alguno, un doble clic sobre el mensaje sitúa el cursor
automáticamente en el Editor, sobre el punto del código fuente
que ha originado el error.
Como ya se ha dicho, un archivo
individual compilado tiene la extensión .FAS.
Estos archivos se cargan y ejecutan desde Visual Lisp como los no
compilados, desde el menú File>Load File o mediante LOAD. Es posible compilar varios archivos .FAS y .DCL que formen parte de una misma
aplicación, en un archivo ejecutable .VLX.
Todos estos archivos necesitan el Run Time System (RTS)
de Visual Lisp para su ejecución. Por lo tanto, para ser
utilizados desde AutoCAD, deberá cargarse la aplicación VLRTS.ARX o VLARTS.ARX
(ésta última con
metodología ActiveX). Por último, es posible incluir
todos los archivos de una aplicación en un módulo ARX. Este se
carga desde AutoCAD como cualquier otra aplicación ARX, y
por lo tanto no necesita del RTS de Visual Lisp para su
ejecución.
Cuando un programa en AutoLISP
llama a otras subrutinas externas definidas mediante aplicaciones
ADS o ARX, debe crearse un archivo de definición de funciones
externas .XDF (generalmente con el mismo nombre que la
aplicación y en el mismo directorio, aunque también pueden
definirse archivos genéricos XLOAD.XDF
y ARXLOAD.XDF en al carpeta de Visual Lisp). Esto se
puede hacer proporcionando el nombre de la aplicación externa,
con el comando externo MAKE-XDF que debe ejecutarse desde AutoCAD,
tras cargar el archivo MAKE-XDF.LSP. El archivo .XDF
creado contiene el número de versión de AutoCAD, el
nombre de la aplicación externa y los nombres de subrutinas
externas que contiene de dicha aplicación.
Los pasos para ejecutar desde AutoCAD
un archivo compilado son:
1) Cargar el RTS
de Visual Lisp. Desde AutoCAD se carga la aplicación VLRTS.ARX o VLARTS.ARX.
2) Inicializar el RTS. Se
ejecuta la función (VLRTS-INIT) o (VLARTS-INIT).
3) Cargar el archivo compilado.
Se hace mediante el comando externo VL-LOAD.
Permite cargar archivos .LSP, .FAS y .VLX. Todas las funciones de los archivos cargados,
que hayan sido exportadas a AutoCAD, podrán ser
utilizadas a partir de ese momento como nativas de AutoCAD.
Si no han sido exportadas hay que utilizar el comando externo VL-EVAL.
TRECE.6.2. Creación de
módulos de aplicación
Un módulo ejecutable ARX
contiene todos los archivos con programas y además el RTS
de Visual Lisp. Esto permite ejecutarlo desde AutoCAD sin
necesidad de cargar e inicializar el RTS. Para crear
módulos, Visual Lisp dispone de un completo asistente en el
menú File>Make Application. La opción New
Application Wizard llama a un asistente para crear un archivo
de descripción .MKP que después se usará al construir la
aplicación (tanto ARX como VLX). Este asistente guía paso a
paso en la creación del archivo de descripción. Posteriormente,
la opción Build Application from Make File creará la
aplicación (ARX o VLX) utilizando el archivo de descripción.
Hay una tercera opción Existing Application Wizard para
modificar un archivo de descripción existente y después volver
a construir la aplicación modificada.
TRECE.6.3. Gestión de
proyectos
El concepto de proyecto en
Visual Lisp engloba básicamente una serie de archivos fuente y
una serie de archivos con instrucciones sobre su compilación.
Todos los tipos de archivos se resumen en la siguiente tabla:
Tipo de archivo (extensión) Descripción
.DSK Datos del entorno de Visual Lisp y especificaciones
de sus ventanas.
.FAS Archivos de AutoLISP compilados en Visual Lisp.
.LSP Archivos fuente de AutoLISP.
.DCL Archivos fuente de cuadros de diálogo en DCL.
.OB Códigos de compilación, usado internamente por Visual Lisp.
.PDB Base de datos de proyectos, usado internamente por Visual
Lisp.
.PRJ Definición de proyecto, con todos los archivos que
incluye y ciertos parámetros y reglas para la
compilación final.
._XX Copias de seguridad de los archivos fuente, como
._LS (para archivos .LSP) o ._DC (para archivos
.DCL), por ejemplo.
.ARX y .VLX Archivos resultantes de la compilación.
.C , .CPP, .CCH, .HPP, .HH Archivos fuente de códigos de los lenguajes.
.MKP Describe el contenido de la aplicación.
.SQL Instrucciones SQL; son reconocidas desde el Editor de
Visual Lisp.
.XDF Lista de funciones externas para ser llamadas desde
aplicaciones.
.XDV Lista de funciones de inicialización generadas
durante la compilación.
Las opciones para crear y
gestionar proyectos (que son archivos .PRJ) se
encuentran en el menú Project. Al crear un nuevo
proyecto, se muestra el cuadro de diálogo de propiedades para
especificar los archivos que se quieren incluir y el orden de los
mismos, además de una serie de parámetros de creación.
Al cargar un proyecto existente,
se abre una ventana con los nombres de todos los archivos
incluidos y una serie de botones de herramienta para mostrar el
cuadro de diálogo de propiedades, cargar los archivos compilados
.FAS del proyecto, cargar los archivos fuente
no compilados, compilar de nuevo los archivos que han sido
modificados y compilar de nuevo todos los archivos del proyecto
(modificados o no). Además, existe un menú contextual (botón
derecho del ratón) con opciones para actuar sobre cada elemento
de la lista. Es posible seleccionar varios elementos a la vez.
TRECE.7. Utilización de
objetos ActiveX
ActiveX Automation es un
mecanismo por el que las aplicaciones de Windows que lo integran,
entre ellas AutoCAD, pueden ser gestionadas desde
lenguajes de programación orientados a objeto como C++ o Visual
Basic. En el MÓDULO DOCE de este curso se dan más
detalles sobre la estructuración ActiveX de los objetos
de AutoCAD, las propiedades de cada uno y los métodos o
eventos que pueden realizar. Aquí simplemente se muestran los
pasos para Visual Lisp a la hora de establecer la conexión del
entorno con los objetos por medio de ActiveX Automation.
Estos pasos nos sonarán a los que utilizábamos con el VBA de AutoCAD:
Primero hemos de establecer una
conexión con la aplicación AutoCAD para que sus objetos
sean utilizables desde ActiveX. Esto se hace desde Visual
Lisp mediante la función VLAX-GET-ACAD-OBJECT. Por ejemplo:
(SETQ AcadObj
(VLAX-GET-ACAD-OBJECT))
La variable AcadObj contiene ahora la conexión ActiveX de la
aplicación AutoCAD. Este tipo de datos se denomina VLA-OBJECT.
Segundo tenemos que establecer
la siguiente conexión en la jerarquía de objetos de AutoCAD,
que es el documento de dibujo activo:
(SETQ AcadDoc
(VLA-GET-ACTIVEDOCUMENT AcadObj))
Tercero establecer la conexión
al Espacio (Modelo o Papel) de AutoCAD (en el ejemplo
Espacio Modelo):
(SETQ AcadEsp
(VLA-GET-MODELSPACE AcadDoc))
4 Establecer la última
conexión al objeto de dibujo deseado (en este caso un círculo):
(SETQ ObjCir (VLA-ADDCIRCLE
AcadEsp cen rad))
TRECE.7.1. Funciones Visual
Lisp
Visual Lisp proporciona una
serie de funciones propias (empiezan todas por VL) para trabajar con objetos ActiveX. Muchas
de ellas tienen un nombre y sintaxis similar a las funciones
homónimas de Visual Basic explicadas a lo largo del MÓDULO
DOCE. Aquí se ofrece una tabla resumen de dichas
funciones:
Sintaxis de función Descripción
(vl-acad-defun función) Define una función de Visual Lisp como función
nativa de AutoLISP.
(vl-acad-undefun función) Deshace la definición de una función de Visual Lisp
como función nativa de AutoLISP.
(vl-consp lista) Determina si una lista existe o es nil.
(vl-directory-files [dir patrón
subdir]) Devuelve los archivos del directorio indicado o del
actual. Admite caracteres comodín en patrón. El
modo subdir puede ser: -1 = sólo subdirectorios; 0
= archivos y subdirirectorios; 1 = sólo archivos.
(vl-every condición lista1
[lista2...]) Examina si la condición se cumple para cada lista
de argumentos.
(vl-exe-filename) Devuelve el camino completo del archivo ejecutable
actual en Visual Lisp.
(vl-file-copy fuente destino [add]) Copia un archivo sobre otro, sobrescribiendo o
añadiendo (si add es diferente de nil).
(vl-file-delete archivo) Borra un archivo.
(vl-file-directory-p nombre) Determina si nombre es un directorio.
(vl-file-rename antiguo nuevo) Renombra un archivo de nombre antiguo
cambiándolo a nuevo.
(vl-file-size archivo) Devuelve el tamaño en bytes de un archivo.
(vl-file-systime archivo) Devuelve la hora de la última modificación de
archivo.
(vl-filename-base archivo) Devuelve el nombre del archivo indicado, eliminando
el camino.
(vl-filename-directory archivo) Devuelve el camino completo del archivo indicado,
eliminando nombre y extensión.
(vl-filename-extension archivo) Devuelve la extensión del archivo indicado,
eliminando camino y nombre.
(vl-filename-mktemp [patrón
directorio ext]) Calcula nombre de archivo temporal indicando
patrón, directorio y extensión (si no, es $VL...).
(vl-init) Equivale a inicializar AutoLISP cuando se abre o se
inicia un dibujo en AutoCAD.
(vl-list* objeto1 [objeto2...]) Construye una lista con los objetos indicados.
(vl-list->string lista_ascii) Construye una cadena de texto a partir de una lista
de enteros, tomándolos como valores ASCII.
(vl-list-length lista) Devuelve la longitud de una lista.
(vl-member-if condición lista) Determina si la condición se cumple para uno de los
elementos de la lista.
(vl-member-if-not condición lista) Determina si la condición no se cumple para uno de
los elementos de la lista.
(vl-position símbolo lista) Devuelve el índice de posición del elemento
símbolo en la lista.
(vl-prin1-to-string objeto) Devuelve la representación impresa de un objeto
AutoLISP tal como haría PRIN1.
(vl-princ-to-string objeto) Devuelve la representación impresa de un objeto
AutoLISP tal como haría PRINC.
(vl-registry-delete clave [nombre]) Borra la clave o nombre de valor indicados del
registro de Windows.
(vl-registry-descendents clave
[nombre]) Devuelve una lista de descendientes de la clave o
valor indicados en el registro de Windows.
(vl-registry-read clave [nombre]) Devuelve los datos almacenados en el registro de
Windows para la clave o valor indicados.
(vl-registry-write clave [nombre
datos]) Crea una clave en el registro de Windows con el
nombre y datos indicados.
(vl-remove elemento lista) Elimina el elemento indicado de la lista.
(vl-remove-if condición lista) Devuelve una lista con todos los elementos de la
lista indicada que fallan la condición.
(vl-remove-if-not condición lista) Devuelve una lista con todos los elementos de la
lista indicada que no fallan la condición.
(vl-some función lista1
[lista2...]) Examina si una de las listas de argumentos no hace
nil la función.
(vl-sort lista función_orden) Devuelve una lista con los elementos de la lista
indicada ordenados según la función de orden.
(vl-sort-i lista función_orden) Devuelve una lista con los índices de posición de
los elementos para que estuvieran ordenados.
(vl-string->list cadena) Convierte la cadena de texto en una lista de
números con los códigos ASCII de cada carácter.
(vl-string-elt cadena posición) Devuelve el código ASCII del carácter que ocupa la
posición indicada en la cadena de texto.
(vl-string-left-trim lista_car
cadena) Elimina de la cadena de texto los caracteres
especificados en la lista.
(vl-string-mismatch cad1 cad2 [pos1
pos2 may]) Devuelve la longitud del mayor trozo común entre
dos textos a partir de las posiciones indicadas,
pudiendo especificar si se tienen en cuenta las
mayúsculas.
(vl-string-position ascii cad
[inicio final]) Examina si el carácter cuyo ASCII se indica está en
la cadena entre dos posiciones dadas.
(vl-string-right-trim lista_car
cadena) Elimina de la cadena los caracteres indicados en la
lista desde el final de la cadena.
(vl-string-search patrón cadena
[inicio]) Localiza el patrón en la cadena indicada a partir
de una posición de inicio.
(vl-string-subst nuevo antiguo cad
[inicio]) Sustituye el texto antiguo por el nuevo en la
cadena indicada a partir de una posición dada.
(vl-string-translate ls_fuente
ls_dest cad) Reemplaza cada carácter de una lista fuente por los
de una lista destino en la cadena.
(vl-string-trim lista_car cadena) Elimina de la cadena los caracteres indicados en la
lista, desde el principio y final de la cadena.
(vl-symbol-name símbolo) Devuelve una cadena con el nombre del símbolo.
(vl-symbol-value símbolo) Devuelve el valor actual de un símbolo.
(vl-symbolp objeto) Examina si el objeto es un símbolo.
(vlax-3D-point lista_pto |
x y [z]) Crea un punto 3D de AutoCAD pudiendo
especificarse una lista de punto o las coordenadas.
(vlax-add-cmd comando función
[local att]) Crea un comando a partir de una función AutoLISP,
pudiendo tener un nombre local y atributos.
(vlax-curve-getArea obj_curva) Calcula el área interior del objeto de curva.
(vlax-curve-getDistAtParam
obj_curva pto) Calcula la longitud de la curva a partir del punto
indicado hasta el final.
(vlax-curve-getDistAtPoint
obj_curva pto) Calcula la longitud de la curva desde el inicio
hasta el punto indicado.
(vlax-curve-getEndParam obj_curva) Devuelve el parámetro de punto final de la curva.
(vlax-curve-getEndPoint obj_curva) Devuelve el punto final de la curva en coordenadas
de SCU.
(vlax-curve-getParamAtDist obj_curva
par) Calcula la longitud de la curva entre el inicio y
el punto con el parámetro indicado.
(vlax-curve-getParamAtPoint obj_curva
pto) Devuelve el parámetro de la curva en el punto
indicado.
(vlax-curve-getPointAtDist obj_curva
dis) Devuelve el punto situado a la distancia indicada,
medida a lo largo de la curva desde el inicio.
(vlax-curve-getPointAtParam obj_curva
par) Devuelve el punto de la curva que tiene el
parámetro indicado.
(vlax-curve-getStartParam obj_curva) Devuelve el primer parámetro de la curva.
(vlax-curve-getStartPoint obj_curva) Devuelve el punto inicial de la curva en
coordenadas de SCU.
(vlax-curve-isClosed obj_curva) Determina si la curva es cerrada.
(vlax-curve-isPeriodic obj_curva) Determina si la curva es periódica, o bien presenta
un rango infinito en ambas direcciones.
(vlax-curve-isPlanar obj_curva) Determina si la curva es plana.
(vlax-curve-getClosestPointTo
obj_curva pto [prolongar]) Devuelve el punto más cercano de la curva al punto
especificado, pudiéndose indicar que se tenga
en cuenta la prolongación de la curva por sus
extremos.
(vlax-curve-getClosestPointToProjection
obj_curva pto vector [prolongar]) Devuelve el punto más cercano de la curva al punto
especificado, proyectando éste en la dirección
del vector indicado, pudiéndose tener en cuenta la
prolongación por los extremos de la curva.
(vlax-curve-getFirstDeriv
obj_curva par) Calcula la primera derivada de la curva, en
coordenadas del SCU, en el punto de parámetro
indicado
(vlax-curve-getSecondDeriv
obj_curva par) Calcula la segunda derivada de la curva en
coordenadas del SCU, en el punto de parámetro
indicado.
(vlax-dump-object objeto) Lista los métodos y propiedades existentes para el
objeto indicado.
(vlax-ename->vla-object nombre_ent) Transforma el objeto de nombre de entidad
indicado en un objeto VLA accesible vía ActiveX.
(vlax-erased-p objeto) Determina si un objeto ha sido borrado.
(vlax-for símbolo colección
expr1 [expr2...]) Asigna el símbolo a cada objeto de la colección y
evalúa todas las expresiones de AutoLISP.
(vlax-get objeto propiedad) Devuelve el valor de la propiedad indicada al
objeto.
(vlax-get-acad-object) Devuelve el más alto nivel (Top Level) de la
aplicación AutoCAD en la actual sesión.
(vlax-invoke objeto método lista) Invoca el método indicado para un objeto,
proporcionando una lista de argumentos.
(vlax-ldata-delete diccionario
clave) Borra la entrada cuya clave se indica en un
diccionario.
(vlax-ldata-get diccionario
clave [defecto]) Devuelve los datos de un diccionario para la clave
indicada. Si ésta no se halla, devuelve defecto.
(vlax-ldata-list diccionario) Devuelve todos los datos de un diccionario.
(vlax-ldata-put diccionario
clave datos) Almacena los datos especificados en la clave
indicada de un diccionario.
(vlax-ldata-test datos) Determina si los datos indicados pueden ser
guardados en la sesión actual.
(vlax-map-collection colección
función) Aplica la función indicada a todos los objetos de
una colección.
(vlax-method-applicable-p objeto
método) Determina si un objeto soporta el método indicado.
(vlax-object-released-p objeto) Determina si un objeto ha sido liberado de
cualquier enlace con un objeto del dibujo.
(vlax-product-key) Devuelve los datos de registro de producto de
AutoCAD.
(vlax-property-available-p objeto
prop [T]) Determina si un objeto presenta una propiedad. Si
se indica T, examina si es modificable.
(vlax-put objeto prop valor) Asigna el valor indicado a la propiedad
especificada del objeto.
(vlax-read-enabled-p objeto) Determina si un objeto puede ser leído.
(vlax-reg-app registro coms carga
[nom [err]]) Registra una aplicación: datos de producto, lista
de comandos, número de carga, nombre, error.
(vlax-release-object objeto) Libera un objeto de dibujo de la variable indicada.
(vlax-remove-cmd nombre_global) Elimina el nombre de comando del grupo de la
sesión actual. Si se indica T elimina el grupo.
(vlax-tmatrix lista_de_cuatro) Toma una lista de cuatro listas con cuatro números
y devuelve una matriz de transformación de 4´4.
(vlax-typeinfo-available-p objeto) Determina si existe librería de información en
Visual Lisp con métodos y propiedades del objeto.
(vlax-vla-object->ename objeto) Transforma el objeto VLA indicado en un nombre de
entidad de AutoLISP.
(vlax-write-enabled-p objeto) Determina si un objeto de dibujo puede ser
modificado.
(vlisp-export-symbol símbolo) Asigna una variable nativa de AutoLISP al valor del
símbolo de Visual Lisp indicado.
(vlisp-import-exsubrs (nom fun1
fun2...)) Registra las funciones indicadas del nombre de
aplicación ADS o ARX dentro de Visual Lisp.
(vlisp-import-symbol símbolo) Asigna un símbolo de Visual Lisp al homónimo de
AutoLISP con el valor de éste.
(vlr-acdb-reactor datos llamadas) Construye un objeto reactor con los datos y
llamadas indicados. Cada llamada es un par
(evento . función).
(vlr-add objeto) Habilita un objeto reactor inhabilitado
previamente.
(vlr-added-p objeto) Examina si un objeto reactor se encuentra
habilitado.
(vlr-beep-reaction [argumentos]) Produce sonidos de computadora.
(vlr-current-reaction-name) Devuelve el nombre del evento actual.
(vlr-data objeto) Devuelve los datos específicos de aplicación
asociados a un objeto reactor.
(vlr-data-set objeto datos) Sobreescribe los datos específicos de aplicación de
un objeto reactor con los datos indicados.
(vlr-editor-reactor datos llamadas) Construye un reactor Editor con los datos y
llamadas indicados.
(vlr-linker-reactor datos llamadas) Construye un reactor Linker con los datos y
llamadas indicados.
(vlr-object-reactor objetos datos
llamadas) Construye un reactor Object con los objetos, datos
y llamadas indicados.
(vlr-owner-add reactor objeto) Añade el objeto indicado al reactor.
(vlr-owner-remove reactor objeto) Elimina el objeto indicado del reactor.
(vlr-owners reactor) Devuelve la lista de objetos del reactor.
(vlr-pers reactor) Convierte el reactor en persistente.
(vlr-pers-p reactor) Determina si el reactor es o no persistente.
(vlr-pers-release reactor) Elimina la persistencia de un reactor.
(vlr-reaction-names tipo_reactor) Devuelve la lista de eventos del tipo de reactor
indicado.
(vlr-reaction-set reactor evento
función) Añade o reemplaza un evento de una función en un
reactor.
(vlr-reactions reactor) Devuelve la lista de llamadas de un reactor. Cada
llamada es un par (evento . función).
(vlr-reactors tipo_reactor) Devuelve una lista con todos los reactor del tipo
indicado.
(vlr-remove reactor) Inhabilita el reactor indicado.
(vlr-remove-all reactor) Inhabilita todos los reactores del tipo
especificado.
(vlr-trace-reaction argumentos) Argumentos para que sean sometidos a rastreo en
la ventana Trace de Visual Lisp.
(vlr-type reactor) Devuelve el tipo de reactor.
(vlr-types) Devuelve una lista con todos los tipos de reactor.
Para: La Web del Programador
La Web del Programador
Autor: Jonathan Préstamo
Rodríguez
|