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:

· Ensayo y depuración de programas. Visual Lisp proporciona:

· Utilización de programas. Visual Lisp proporciona:

 

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:

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:

 

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:

    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