martes, 16 de diciembre de 2014

Programar en AutoLISP

Como ya hemos visto, AutoLISP es un lenguaje de programación diseñado para implementar y personalizar la funcionalidad de AutoCAD. AutoLISP nos permite automatizar muchos de los procesos y rutinas habituales de nuestros dibujos.

En las primeras versiones de AutoCAD, escribir código AutoLISP precisaba, además del programa AutoCAD, de un procesador de textos independiente. El código se escribía en el procesador como texto sin formato,  lo que requería de bastante atención, debido a la dificultad de compaginar las aperturas y cierres de paréntesis de las listas que forman los programas. Un paréntesis de menos, o un olvido en el cierre de unas comillas producía invariablemente el fracaso de la función. Depurar el código exigía bastante tiempo y con frecuencia había que añadir al programa declaraciones para imprimir los contenidos de variables en puntos estratégicos y comprobar sus resultados.



El proceso se ha simplificado enormemente, y hoy AutoCAD incluye un editor de  Visual LISP con todas las herramientas para simplificar el trabajo. El editor de Visual LISP incluye corrector de sintaxis, compilador de archivo, depurador de fuente, editor de texto, formateador de AutoLISP, inspección y revisión del contenido de las variables del programa, ayuda sensible al contexto y un sistema de administración del proyecto. De todo esto hablaremos más adelante, pero antes es necesario familiarizarse con AutoLISP.

¿Cómo trabaja AutoLISP?

Los programas de AutoLISP están formados por listas. Las listas son secuencias de elementos mostrados entre paréntesis y separadas por espacios.

Un ejemplo de una lista de AutoLISP puede ser: (3.00 7.53 2.34)

En el ejemplo precedente los elementos de la lista son números reales, pero veremos que las listas pueden estar formadas por cualquier clase de símbolos válidos para AutoCAD.

Cuando se teclea una secuencia en la línea de comandos de AutoCAD, y la secuencia comienza con un paréntesis abierto, AutoCAD asume que lo que sigue es una expresión de AutoLISP y lo envía al intérprete para su evaluación. El evaluador evalúa la función, la ejecuta y devuelve un valor de retorno. Cuando el valor de retorno es nada, esto es, ningún valor, AutoLISP devuelve nil.

 Símbolos de AutoLISP

Los símbolos son los componentes básicos de AutoLISP. Los símbolos o átomos son los componentes fundamentales de las listas que a su vez forman los programas y funciones. Los símbolos pueden ser números enteros, números reales (de coma flotante), cadenas, listas, descriptores de archivos, conjuntos designados o de selección, nombres de entidades, subrutinas y tablas de paginación.

Los símbolos constan de dos partes: el nombre propiamente dicho, normalmente una palabra, y el valor ligado al símbolo. Por decirlo así, el símbolo es el continente y el valor el contenido.Un símbolo puede estar ligado o bien a un valor o bien a una función.

En AutoCAD, para ver el valor asignado a un símbolo de AutoLISP se usa el signo de cierre de exclamación. Si el intérprete de órdenes encuentra un signo de cierre de exclamación, seguido inmediatamente de un símbolo, buscará para ver si ese símbolo ha sido definido anteriormente, y si lo encuentra mostrará en una nueva línea de pantalla el valor que le ha sido asignado.

Si la variable var1 está asociada a la cadena “mibloque”, cuando escriba en la línea de comandos var1, AutoLISP respondera "mibloque":

Comando: !var1
“mibloque”




Al escribir esa secuencia he asumido que se pulsa la tecla retorno de carro o espacio después de escribir var1.

El signo de cierre de exclamación sirve para indicarle al programa que la palabra introducida no se trata de una orden o comando de AutoCAD.

AutoLISP permite cualquier combinación de caracteres para los nombres de símbolo, excepto los paréntesis, el punto, las comillas y el punto y coma, que como veremos están reservados para la grafía de las propias rutinas de AutoLISP.

Para economizar memoria es preferible usar símbolos cortos, preferiblemente de menos de seis caracteres. Por el contrario, a veces los símbolos cortos pueden resultar más confusos a la hora de leer el programa. Si los símbolos tienen un significado para nosotros nos recordarán al leerlos el valor asociado. Si en el ejemplo anterior, en vez de usar el nombre var1 ligado a la cadena “mibloque” utilizásemos nomblk, es posible que al leerlo nos diésemos cuenta de que el contenido de la variable es un nombre de bloque de AutoCAD.

Valor ligado a un símbolo

El valor variable ligado a un símbolo puede estar definido global o localmente.

Las variables globales conservan su valor después de que finalice el programa que las ha definido. Esto puede ser deseable cuando se necesita acceder a posteriori a su valor o se pretenda reflejar un determinado estado, pero en ocasiones no es necesario y su utilización ocupa espacio en la memoria sin obtener ningún beneficio.

Las variables locales solo conservan su valor mientras se ejecuta la función que las ha definido. Cuando la función termina de ejecutarse, los valores de la variable local se desechan automáticamente, y el sistema vuelve a tener a su disposición la memoria que utilizaba la variable. Esto se conoce como recuperación automática de la memoria no usada. Las variables locales utilizan la memoria con más eficacia que las globales.


Otra ventaja de las variables locales es que facilitan la depuración y el mantenimiento de las aplicaciones. Con la variables globales es más difícil predecir en qué función se pueden modificar, sus efectos permanecen y pueden afectar a otras partes del programa.

No hay comentarios:

Publicar un comentario