Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

24

Transcript of Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Page 1: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]
Page 2: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Programación en AutoCAD con Visual LlSP

Page 3: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Programación en AutoCAD con Visual LlSP

Reinaldo Togores Fernández Arquitecto

Profesor Asociado Departamento de Ingeniería Geográfica y Técnicas de Expresión Gráfica

Universidad de Cantabria

César Otero González Dr. Ingeniero de Caminos

Profesor Titular Departamento de Ingeniería Geográfica y Técnicas de Expresión Gráfica

Universidad de Cantabria

MADRID BUENOS AIRES CARACAS GUATEMALA LISBOA MÉXICO NUEVA YORK PANAMÁ SAN JUAN SANTAFÉ DE BOGOTÁ SANTIAGO SAO PAULO

AUCKLAND HAMBURGO LONDRES MILÁN MONTREAL NUEVA DELHI P A R ~ S SAN FRANCISCO SIDNEY SINGAPUR ST. LOUIS TOKIO TORONTO

Page 4: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

La información contenida en este libro procede de una obra original entregada por los autores. No obstante, McGraw-Hill Interamericana de España no garantiza la exactitud o perfección de la información publicada. Tampoco asume ningún tipo de garantía sobre los contenidos y las opi- niones vertidas en dichos textos.

Este trabajo se publica con el reconocimiento expreso de que se está proporcionando una infor- mación, pero no tratando de prestar ningún tipo de servicio profesional o técnico. Los procedi- mientos y la información que se presentan en este libro tienen sólo la intención de servir como guía general.

McGraw-Hill ha solicitado los permisos oportunos para la realización y el desarrollo de esta obra.

No está permitida la reproducción total o parcial de este libro, ni su tratamiento informática, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito de los titulares del Copyright.

McGraw-Hillllnteramericana de España, S. A. U.

DERECHOS RESERVADOS O 2003, respecto a la primera edición en español, por McGRAW-HILLIINTERAMERICANA DE ESPAÑA, S. A. U. Edificio Valrealty, 1 ." planta Basauri, 17 28023 Aravaca (Madrid)

ISBN: 84-481 -3694-2 Depósito legal: M. 1.003-2003

Editor: Carmelo Sánchez González Diseño de cubierta: Luis Sanz Cantero Compuesto en Marasán, S. A. Impreso en Fareso, S. A.

IMPRESO EN ESPANA - PRINTED IN SPAIN

Page 5: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

A Teté, por la vida y las ilusiones compartidas. A mis hijos, Alina y Rei.

R. T .

A mis padres: eso si ha sido dedicación.

C . O.

Page 6: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Prólogo ................................................................................. . . ................................................................. Agradecimientos

Acerca de los autores .......................................................

PARTE 1

INTRODUCCI~N

Capítulo 1 . Antecedentes ..........................................

I . 1 . Visual LISP: Los orígenes ....................................... ....... 1.2. Aplicaciones desarrolladas sobre Visual LISP

............................................. 1.3. ¿Por qué Visual LISP? 1.4. Resumen .....................................................................

Capítulo 2 . Para comenzar ...................................... ............................................................ Un caso real

Organizar nuestro proyecto .................................... Estructura del proyecto ........................................... Análisis del problema ............................................. Un DICCIONARIO personalizado ........................

................................................. Función de Cálculo ............................................. La función de Dibujo

La Interfaz de Usuario ........................................... .............................................. Colocar la rotulación

Actualización del DICCIONARIO ........................ ..................................................... En caso de error

.................................... Compilar nuestro programa Resumen ................................................................... . . . Ejercicios .................................................................

xiii

xiv

xiv

3

5 6 6 9

11

12 12 13 16 17 20 21 22 24 24 27 28 29 29

Page 7: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

vi¡¡ Contenido

PARTE 2

EL LENGUAJE Y SU ENTORNO DE DESARROLLO

................................................................ Capítulo 3 . El IDE Visual LlSP ................................................................. 3.1 La interfaz de usuario Visual LISP

3.2 Interactividad: La Consola Visual LISP ................................................... ......................................................................... 3.3 El Editor de Programación

3.4 Interacción entre el Editor y la Consola .................................................. ....................................................................................................... 3.5 Resumen

Capítulo 4 . Evaluación de expresiones ................................................

Datos ......................................................................................................... Expresiones ............................................................................................... Símbolos y asignación ............................................................................. Listas ......................................................................................................... Variables y tipos de datos ......................................................................

...................................................... Acceso a los elementos de una lista Procesamiento de listas ........................................................................... Lambda .....................................................................................................

.................................................................................................... Resumen Ejercicios ..................................................................................................

Capítulo 5 . Funciones definidas por el usuario ...............................

........................................................................................................... Defun Cargar y ejecutar funciones de usuario ................................................... Variables globales y locales ..................................................................... Predicados y Condicionales ......................................................................

.................................................................................................... Recursión Iteración ......................................................................................................

...................................................................................................... Resumen Ejercicios ....................................................................................................

Capítulo 6 . Estructuras y Datos ActiveX .............................................

6.1. Matrices (Arrays) ....................................................................................... ....................................................................................................... 6.2. Variants

6.3. Objetos VLA y Colecciones ..................................................................... 6.4. Gestionar excepciones ...............................................................................

...................................................................................................... 6.5. Resumen .................................................................................................... 6.6. Ejercicios

Capítulo 7 . Entrada de datos ...................................................................

7.1. Control de errores integrado ..................................................................... 7.2. Valores predeterminados ........................................................................... 7.3. Solicitud de datos con opciones ...............................................................

Page 8: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Contenido ¡X

............................................... 7.4. Control de la entrada mediante INITGET 142 7.5. Solicitud de números enteros .................................................................... 144 7.6. Entrada de valores angulares .................................................................... 146 7.7. Diálogo para búsqueda de archivos ........................................................ 146

...................................................................................................... 7.8. Resumen 148 7.9. Ejercicios .................................................................................................... 149

Capítulo 8 . Operaciones con archivos ............................................... 151

8.1. Apertura de archivos ................................................................................. 152 .................................................................................... 8.2. Lectura de archivos 153

8.3. Escritura de archivos ................................................................................. 155 8.4. Archivos y carpetas ............................................................................... 158 8.5. Resumen ................................................................................................. 163 8.6. Ejercicios .................................................................................................... 164

Capítulo 9 . Depurar el código Visual LlSP ......................................... 167

9.1. Encontrar el origen del error ................................................................... 168 9.2. La sesión de Depuración ........................................................................... 170 9.3. Herramientas para la inspección de datos ............................................. 173 9.4. Rastreo de Errores ..................................................................................... 178 9.5. Resumen ...................................................................................................... 178

PARTE 3

CONTROLAR AUTOCAD DESDE VISUAL LlSP

Capítulo 10 . Dibujar con Visual LlSP ................................................... 181

Tres maneras de dibujar ........................................................................ La interfaz COMMANDNL-CMDF .................................................... Crear entidades con ENTMAKE .......................................................... Creación de entidades complejas ......................................................... Uso de la interfaz ActiveX ................................................................... Objetos complejos con métodos ActiveX ........................................... ... Objetos no-graticos ................................................................................ Objetos-VLA y utilización de la memoria disponible .......................

.................................................................................................. Resumen ................................................................................................ Ejercicios

....................................................... Capítulo 11 . Seleccionar Entidades 231

..................................................................... Los conjuntos de selección 232 .................................................................. Crear conjuntos de selección 234

.................................................................... Conjuntos preseleccionados 247 ........................................................... Modificar conjuntos de selección 248

1 1 .5 . Conjuntos de selección ActiveX ........................................................... 250 .................................................................................................... 1 1.6. Resumen 257

1 1.7. E.jercicios .................................................................................................. 257

Page 9: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Contenido

7.4. Control de la entrada mediante INITGET ............................................... 7.5. Solicitud de números enteros .................................................................... 7.6. Entrada de valores angulares .................................................................... 7.7. Diálogo para búsqueda de archivos .........................................................

...................................................................................................... 7.8. Resumen .................................................................................................... 7.9. Ejercicios

Capítulo 8 . Operaciones con archivos ................................................. 8.1. Apertura de archivos .................................................................................

.................................................................................... 8.2. Lectura de archivos 8.3. Escritura de archivos ................................................................................. 8.4. Archivos y carpetas ................................................................................... 8.5. Resumen ...................................................................................................... 8.6. Ejercicios ....................................................................................................

Capítulo 9 . Depurar el código Visual LlSP ......................................... 9.1. Encontrar el origen del error .................................................................... . . 9.2. La sesion de Depuración ........................................................................... 9.3. Herramientas para la inspección de datos ............................................... 9.4. Rastreo de Errores ..................................................................................... 9.5. Resumen ......................................................................................................

PARTE 3

CONTROLAR AUTOCAD DESDE VISUAL LlSP

Capítulo 10 . Dibujar con Visual LlSP .................................................... Tres maneras de dibujar ........................................................................ La interfaz COMMANDIVL-CMDF .................................................... Crear entidades con ENTMAKE .......................................................... Creación de entidades complejas ......................................................... Uso de la interfaz ActiveX ................................................................... Objetos complejos con métodos ActiveX ........................................... Objetos no-gráficos ................................................................................ Objetos-VLA y utilización de la memoria disponible .......................

.................................................................................................. Resumen ................................................................................................ Ejercicios

Capítulo 11 . Seleccionar Entidades .......................................................

1 1.1. Los conjuntos de selección ..................................................................... 11.2. Crear conjuntos de selección .................................................................. 11.3. Conjuntos preseleccionados .................................................................... 1 1.4. Modificar conjuntos de selección ........................................................... 1 1.5. Conjuntos de selección ActiveX ............................................................ 1 1.6. Resumen .................................................................................................... 1 1.7. Ejercicios ..................................................................................................

Page 10: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

x Contenido

Capítulo 12 . Modificar entidades ............................................................

12.1. Modificar propiedades mediante COMMANDNL-CMDF .................. ...................................................... 12.2. Edición de propiedades geométricas

12.3. La función ENTMOD ............................................................................. 12.4. Datos codificados como valores binarios .............................................. 12.5. Entidades 2D y 3D ..................................................................................

................................ 12.6. Modificar entidades con las extensiones ActiveX 12.7. Matrices de transformación ..................................................................... 12.8. Resumen .................................................................................................... 12.9. Ejercicios ..................................................................................................

... Capítulo 13 . VLAX-CURVE medir curvas y algo más .................

... .......................... Las Extensiones VLAX.CURVE de Visual LISP ¿Qué curvas? .......................................................................................... Argumentos comunes ............................................................................ Determinar la longitud de una curva ................................................... Medir Areas ............................................................................................ Cálculo de la primera y segunda derivadas ........................................ Determinar puntos sobre una curva ..................................................... Conversión de una SPLINE o ELIPSE en polilínea .......................... Determinar intersecciones .....................................................................

.................................................................................................. Resumen ................................................................................................ Ejercicios

Capítulo 14 . Datos en el dibujo ..............................................................

............................................................................................. Antecedentes Medios de asociar información a los objetos gráficos ......................... Información Asociada Mediante Datos de Entidad Extendidos

.................................................................................................. (XDATA) Entidades XRECORD y Diccionarios .................................................... Funciones ActiveX para XDATA. XRECORD y Diccionarios .......... Diccionarios LDATA .............................................................................. Acceso a bases de datos externas ..........................................................

.................................................................................................... Resumen .................................................................................................. Ejercicios

Capítulo 15 . Visual LISP como cliente ActiveX ............................. .............................................................................. 15.1. De AutoCAD a Excel

. . 15.2. El Cuadro de Dialogo .............................................................................. 15.3. Organización de las funciones utilizadas .............................................. 15.4. Implantar un nuevo Comando AutoCAD ..............................................

.................................................................................................... 15.5. Resumen .................................................................................................. 15.6. Ejercicios

Page 11: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Contenido

Capítulo 16 . VLX: el Ejecutable Visual LlSP ......................................

Administración de una Aplicación ......................................................... La Función VLISP-COMPILE ............................................................... Modos de Optimización .......................................................................... El Gestor de Proyectos VLISP ............................................................... Errores Generados al Compilar .............................................................. Los Espacios de nombre separados .......................................................

.................................................................................................... Resumen .................................................................................................. Ejercicios

PARTE 4

ALGORITMOS Y APLICACIONES

Capítulo 17 . Aplicaciones geométricas y de tipo general ............

Consideraciones relacionadas con el entorno de trabajo ................... Funciones geométricas y trigonométricas ............................................ Aplicaciones geométricas ...................................................................... ORTOCENTRO de un triángulo .......................................................... EJE RADICAL de dos circunferencias: Un problema geométrico

..................................................................................................... clásico Funciones de naturaleza cíclica ............................................................ Curvas de persecución ........................................................................... CAGD: Diseño Geométrico Asistido por Computador ...................... La curva SPLINE .................................................................................. Algoritmo de DE CASTELJAU para aproximación de un polígono de control ................................................................................................ Interpolación mediante arcos de SPLINE CARDINAL .....................

.................................................................................................. Resumen

Capítulo 18 . Aplicaciones en Cartografía y Sistemas de Infor- mación Geográfica ...................................................................................

18.1. Partir líneas que se cruzan ...................................................................... 18.2. Unión automática de líneas para formar polilíneas .............................. 18.3. Asociar textos que representan valores de cota a los puntos que re-

fieren su ubicación ................................................................................... 18.4. Redes de transporte ................................................................................. 18.5. Uso de una Matriz de Adyacencia .........................................................

.................................................................................................... 18.6. Resumen

Capítulo 19 . Funciones recursivas de búsqueda y ordena- ción y su aplicación a la Geometría Computacional ..................

...................................................................................... 19.1. Búsqueda binaria 19.2. Ordenación mediante Quicksort .............................................................

Page 12: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

xi i Contenido

19.3. Geometría Computacional ................................................................... 521 19.4. Envolvente Convexa de una nube de puntos ........................................ 524 19.5. Triangulación de DELAUNAY sobre una nube de puntos ................. 535 19.6. Resumen ............................................................................................. 545

PARTE 5

PROGRAMACIÓN ORIENTADA A EVENTOS

Capítulo 20 . Responder a Eventos: los Reactores ......................... 549

.................................................................................. 20.1. Las funciones VLR 550 20.2. Tipos de reactor ....................................................................................... 550 20.3. Acciones .................................................................................................... 559 20.4. Una aplicación que utiliza reactores .................................................... 564

.................................................................................................... 20.5. Resumen 570 20.6. Ejercicios .................................................................................................. 573

Capítulo 21 . DCL: La lnterfaz Gráfica del Usuario .......................... 575

...................................................................................... 2 1 . 1. El lenguaje DCL 576 21.2. Programar un diálogo en el Editor .................................................... 578 . . 21.3. Controlar el dialogo ................................................................................. 586 21.4. El programa de dibujo paramétrico ....................................................... 593 2 1.5. Resumen .................................................................................................... 597 21.6. Ejercicios .................................................................................................. 597

Capítulo 22 . ObjectDCL .............................................................................. 599

22.1. El programa ObjectDCL ..................................................................... 600 22.2. Una aplicación desarrollada con ObjectDCL ........................................ 607

.................................................................................................... 22.3. Resumen 628 22.4. Ejercicios .................................................................................................. 628

PARTE 6

APÉNDICES

Apéndice 1 . Bibliografía .......................................................................... 633

............................... Apéndice 2 . Resumen de las Funciones Visual LISP 637

Epílogo .................................................................................................................. 671

Indice .................................................................................................................... 673

Page 13: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Visual LISP es la puesta al día de AutoLSSP, el lenguaje de programación que durante más de quince años ha permitido a los usuarios de AutoCAD hacer de esta aplicación una herramienta mejor adaptada a sus necesidades específicas.

AutoLISP es un lenguaje de programación diseñado para extender y personali-rar la funcionalidad de AutoCAD. Se basa en el lenguaje programación LISP, cuyos orígenes se remontan a fines de la década de los 50. Seguramente la elección, allá por 1985, de LSSP como modelo del lenguaje de programación para AutoCAD pudo parecer por lo menos extraña. Se trataba de un lenguaje peculiar, de uso casi exclusivo en entornos tan elitistas como las investigaciones sobre inteligencia artificial. Pero según afirmaba entonces John Walker, uno de los creadores de Auto- CAD,

"Ningún otro entre los principales lenguajes de programu- ción es capaz de manipular tan fúcilmente los tipos de objetos con que uno trabaja en CAD. Al contrcrrio que la programación numérica, el CAD constantemerlte trabaja sobre colecciones de objetos heterogéneos en grupos de tamaño variable. LISP es excelente en este aspecto'".

El éxito de AutoLISP sin duda le dio la razón. Fuimos muchos los arquitectos, ingenieros, topógrafos o simples delinean- tes que llegamos al mundo de la programación desde la platafor- ma que AutoCAD nos brindaba para crear una herramienta de diseño a la medida de nuestras necesidades.

' John Walker, The Autodesk File, interna1 memo. Citado en Carr, H.; Holt, R. The AutoLISP Platform for Computer Aided Design. 40th Anniversary of LISP Confereiice, Nov. 1998, Berkeley, California.

xiii

Page 14: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

xiv Prólogo

Las limitaciones que presentaba AutoLISP hacían pensar que terminaría por ser sustituido por otros lenguajes de programación, especialmente desde que con la ver- sión 14.01 se incorpora a AutoCAD un entorno de desarrollo VBA. Pero Visual LISP ha venido a demostrar que no es así.

Este libro intenta demostrar las capacidades, tanto nuevas como antiguas, que unidas hacen de este nuevo entorno de desarrollo para la personalización de Auto- CAD la solución idónea para muchas aplicaciones.

AGRADECIMIENTOS

Queremos expresar nuestro agradecimiento a los participantes de los foros de discu- sión que sobre este tema funcionan en Internet y muy especialmente a los que con- tribuyen con sus preguntas y respuestas en autodesk.autocad.customization, de los que tantas cosas hemos aprendido. En el libro hemos dejado constancia de la autoría de algunas ideas o incluso de fragmentos de código fuente que de ahí provienen. En otros casos seguramente hemos seguido vías allí propuestas incluso sin tener concien- cia de ello. Serían demasiados los nombres a mencionar. En el CD-ROM incluimos vínculos a los sitios web que muchos de estos amigos mantienen. Queremos recono- cer en especial la ayuda de Luis Esquivel, que vía e-mail desde San Diego, California, contribuyó con sus opiniones y su experiencia al programa de ejemplo que propone- mos en el capítulo dedicado al uso de reactores.

ACERCA DE LOS AUTORES

Reinaldo Togores Fernández, Arquitecto titulado en la Universidad de La Habana. Participó en el plan masivo de construcciones escolares desarrollado en Cuba durante los años setenta. A partir de 1980 se dedica a la investigación sobre métodos avan- zados de elaboración de proyectos. Estas investigaciones le llevaron a tomar contacto con AutoCAD, herramienta con la que ha trabajado ya desde sus versiones primeras.

Vinculado a la docencia desde 1970, ha sido Profesor Titular de Diseño en la Facultad de Arquitectura y el Instituto Superior de Diseño Industrial, ambos en La Habana. Desde 1995 es profesor asociado de Técnicas de Expresión Gráfica en la Universidad de Cantabria e instructor de Diseño Asistido por Computador del Insti- tuto de Formación y Estudios Sociales.

Ha participado en calidad de consultor y desarrollador de aplicaciones para AutoCAD y Autodesk MAP en proyectos realizados para varias empresas e institu- ciones del norte de España. Como escritor sobre temas CAD colabora con la revista española AutoCAD Magazine y mantuvo una sección fija sobre programación Visual LISP en la desaparecida revista argentina CadXPress.

Forma parte del Grupo de Investigación EGI-CAD, miembro del Autodesk Developers Network (ADN), donde atiende los temas relacionados con el desarrollo de aplicaciones para Cartografía y Sistemas de Información Geográfica sobre la pla- taforma AutoCAD-Autodesk MAP.

Page 15: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Prólogo Xv

César Otero González, Doctor Ingeniero de Caminos por la Universidad de Cantabria (España), es Profesor Titular en esta misma Universidad desde 1986.

Fue encargado a finales de la década de los 80 de crear las nuevas asignaturas de CAD en los estudios renovados de Ingeniería Industrial, Telecomunicación y Caminos (Civil), a cuya enseñanza se dedica desde entonces.

Ha publicado diversos libros de CAD como apoyo a esa docencia, y desarrolló entre los años 1996 a 1998 un proyecto subvencionado por la Comisión Interminis- terial de Ciencia y Tecnología (CICYT) para la creación de Materiales Docentes de Materias Básicas Científico-Técnicas; en concreto, en el ámbito del Diseño Asistido por Computador. Parte de esa experiencia se ofrece como curso de CAD que man- tiene dentro del Aula Virtual de la Universidad de Cantabria.

Creó en el año 1998 el Grupo de Investigación EGI-CAD (Expresión Gráfica en la Ingeniería, en la línea CAD), centrándose en la Investigación de temas relacionados con la Computación Gráfica y la Geometría de Estructuras Espaciales; dentro del Grupo, una línea de actividad de Innovación Tecnológica importante se refiere al desarrollo de software y consultoría CAD y SIG, actividad en la que ha colaborado con Organismos y Empresas diversos. El Grupo EGI-CAD está reconocido en la actualidad como investigador o desarrollador en diversos programas de algunas de las firmas de CAD más extendidas en el mercado mundial.

Page 16: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Introducción

The ~pirit of L i ~ p hacking can be expressed in two sentences. Progrumming should be fun. Progranz~ should be beatiful.

Paul Graham, en el prólogo a ANSI Common Lisp.

1

Page 17: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Antecedentes

Page 18: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

4 Programación AutoCAD con Visual LISP

Aparte de las razones apuntadas por Walker, la facilidad con que pudimos acceder a la programación LISP, incluso careciendo de una formación previa en el campo de la programación informática, se debe a la peculiar sintaxis de este lenguaje, que no es otra que la de las funciones matemáticas, ya conocidas desde los estudios en la enseñanza secundaria.

Todos sabemos cómo resolver una expresión como (8 * ( ( 1 7 + 3) 1 4)). Primero hallaríamos el resultado de 17 + 3, que entonces dividiríamos entre 4, para el resultado multiplicarlo por 8. Es decir, que iríamos resolviendo los paréntesis más interiores y pasando los resultados a las operaciones representadas en los paréntesis que los con- tienen.

Los datos numéricos y el signo de la operación matemática a que se deben some- ter están agrupados mediante paréntesis. A una secuencia de datos entre paréntesis es a lo que en LISP llamamos una lista. La solución de la expresio'n anterior consistió, como hemos visto, en el procesamiento sucesivo de cadu una de estas listas. De ahí el nombre de LISP, derivado del inglés LISt Processing, Procesamiento de Listas. En la notación propia de LISP el operador aparece siempre al inicio de la lista.

( * 8 ( / ( + 3 17 ) 4 ) ) sería la expresión LíSP equivalente. Esto, teclea- do directamente en la línea de comandos de AutoCAD (ver Figura 1.1) devolvería el resultado: 40

Ya estamos usando LISP. Tan sencillo como eso. AutoCAD ha interpretado la función recibida y ha devuelto el resultado de su evaluación, que aparece impreso en la pantalla. Así hemos accedido al mecanismo fundamental de LISP. Las expresiones como la que acabamos de escribir son las unidades básicas del lenguaje, que opera mediante la repetida lectura, evaluación e impresión de resultados, lo que en la ter- minología propia del lenguaje se conoce como bucle de lectura-evaluación-impresión (read-eval-print loop).

Una ventaja adicional (al menos desde el punto de vista del colectivo de usuarios al que me estoy refiriendo): otros lenguajes de programación nos obligarían a una serie de preparativos relacionados con la gestión de la memoria. Deberíamos prever los tipos de datos a emplear y disponer por anticipado los contenedores adecuados para esos tipos de datos (declaración de variables, etc.). En LISP la memoria es gestionada de manera automática, y no resultan necesarias más que algunas precau- ciones mínimas por parte del programador en cuanto a posibles interferencia entre nombres de variables.

Así resultó que el éxito de AutoLISP como medio para extender las posibilidades de AutoCAD fue arrollador. Quizás hoy no estemos conscientes de que algunas de las herramientas que consideramos indispensables no estuvieron disponibles en el progra- ma original y que fueron surgiendo, diseñadas en principio para el uso personal de sus creadores, como macros y programas AutoLISP. Si revisamos el AutoCAD Producti- vity Book de Schaefer y Brittain ', publicado en 1986, nos encontraremos con la macro de menú COPYPARA cuya función era realizar, utilizando expresiones AutoLISP, una copia paralela de la Iínea designada, es decir, lo que hoy con ventaja realizamos me- diante el comando EQDIST (OFFSET). O el programa LTC (Line To Circle) con el que se lograba dibujar líneas tangentes a dos círculos, programa hoy innecesario

' Schaefer, A.T.: Brittain, J., The AutoCAD Productivity Book. Ventana Press, Piedmont, Califor- nia, 1986. ISBN: 0-940087-00-6

Page 19: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Capítulo 1. Antecedentes 5

Figura 1.1. Evaluación de una expresión LISP.

gracias a la introducción del modo diferido de la referencia a objeto TANGENTE. El título del libro era muy preciso en cuanto a lo que AutoLISP brindaba al usuario: una manera de incrementar su productividad automatizando cualquier tarea repetitiva.

AutoLISP no era más que un pequeño subconjunto del lenguaje de programación original2, tanto como pudiera caber en los 64 Kb de memoria para ello entonces disponible. Que además debía incluir funciones propias que permitieran controlar el editor de dibujo de AutoCAD.

1.1. VISUAL LISP: LOS OR~GENES

Visual LISP es, en realidad, un viejo conocido de los desarrolladores profesionales. Eran ellos los que desde hace mucho pedían una solución a las evidentes limitaciones de AutoLISP. Dos eran las exigencias fundamentales. La primera, velocidad de pro- cesamiento, especialmente en lo que se refiere a los cálculos numéricos más comple- jos. La segunda, una manera más segura de proteger sus derechos de propiedad intelectual sobre el código fuente. A partir de la versión 10 tuvimos la posibilidad de programar en lenguaje C empleando una colección de rutinas que reproducían, de forma un tanto mecánica, cada una de las funciones AutoLISP. Esta solución de compromiso se hizo pronto obsoleta, ante la introducción con la versión 13c4 de la programación orientada a objetos C++ mediante la tecnología ObjectARX.

Pero un grupo de programadores trabajando desde Moscú en la empresa Basis Software "exploraba otra vía. AutoLISP había permanecido sin grandes cambios des- de su introducción en 1985-86. Pero el lenguaje LISP del cual se deriva había expe- rimentado durante esos años grandes avances. Las modernas implementaciones de LISP se han enriquecido con la introducción de nuevas funciones y estructuras de datos, y disponen además de eficientes compiladores que hacen posible guardar y ejecutar el código como instrucciones en lenguaje de máquina4, sin perder las ven- tajas del lenguaje original entre las cuales figuran la posibilidad de evaluar de manera inmediata cada línea de código, la asignación dinámica del tipo de dato y la gestión automática de la memoria.

' El dialecto XLISP, desarrollado por David Betz. ' Información tomada de http://ww.telent.net/cliki/succes storiea y de http://xarch.tu-graz.ac.at/au-

tocad/wiki/BasisSoftware. Basis Software estableció más tarde su sede en Pennsylvania <http: //www.basissoftware.com>.

Existen varias posibles implementaciones para un compilador. La que utiliza en particular VLISP es la técnica conocida como byte-code o p-code, en la que se traducen las instrucciones en un vector de bytes que es interpretado por una máquina virtual. Este proceso no está documentado por razones de seguridad.

Page 20: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

6 Programación AutoCAD con Visual LlSP

La propuesta inicial de este grupo fue el compilador ACOMP, que se distribuyó con las versiones internacionales 10, 11 y 12 de AutoCAD. El hecho de que no se distribuyera con la versión comercializada en Estados Unidos hizo que ACOMP no tuviera mucha difusión.

BASIS Software introdujo Vital LISP en la primavera de 1995 como un produc- to independiente para las versiones 12 y 13 de AutoCAD. Además del compilador, esta aplicación incorporaba un Entorno de Desarrollo completo. Con Vital LISP se dispuso por fin de un LISP moderno capaz de emular al AutoLISP nativo asegurando la compatibilidad con cualquier aplicación anteriormente desarrollada.

El éxito de Vital LISP llevó a AutoCAD a comprarlo a fines de 1997, renom- brándolo como Visual LISPS. Sin la posibilidad de incorporarlo a la versión 14 que ya estaba en el mercado, se ofreció como programa complementario a un precio sustancialmente más bajo que el de BASIS Software.

1.2. APLICACIONES DESARROLLADAS SOBRE VISUAL LISP

El no formar parte del núcleo de AutoCAD R14 obligaba al programador a incluir con su programa un RTS o Sistema de Tiempo de Ejecución (Runtime System) que debía cargarse para ejecutar los programas Visual LISP. Esta necesidad fue cubierta de manera sumamente práctica mediante la posibilidad de empaquetar todos los archivos de la aplicación, tanto los LISP compilados (archivos FAS) como los que deben permanecer en formato de texto (los DCL, por ejemplo) junto con el RTS en un ejecutable de formato ARX (AutoCAD Runtime extension) similar a los desarrolla- dos con C++ mediante la API de ObjectARX.

Ahora, con AutoCAD 2000, Visual LISP forma parte de la versión standard del programa. Con lo que ya no será necesario suministrar un RTS con la aplicación desarrollada, lo que redunda en una considerable reducción del tamaño de los progra- mas. Según nuestra experiencia, de una aplicación cuyas fuentes (archivos LSP y DCL) ocupan unos 102 Kb resulta, una vez compilado como ARX (Versión 14), un archivo de 602 Kb, mientras que compilado como Ejecutable Visual LISP (archivo VLX) para AutoCAD 2000 o posterior sólo ocupa 46 Kb.

1.3. ¿POR QUÉ VISUAL LISP?

Las dos demandas más perentorias de un programador, velocidad y seguridad, que- dan en buena medida resueltas. Además, su trabajo será más llevadero con estas herra- mientas que acabo de enumerar. Pero queda una cuestión por responder: ¿Dará Visual LISP una respuesta adecuada como lenguaje para las aplicaciones que hoy necesi- tamos?

Esta pregunta no es trivial. Allá por 1986 no había otra opción. Pero hoy pueden crearse aplicaciones que gestionen AutoCAD con casi cualquiera de los lenguajes de

Visual LISP fue, antes de que lo comprara Autodesk, la marca de un Editor para AutoLISP desarrollado por la firma Western Sierra Software y que estaba disponible como freeware en Internet.

Page 21: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Capítulo 1 . Antecedentes 7

programación modernos, desde Visual Basic hasta Java. No entraremos a discutir los méritos relativos de cada uno de estos lenguajes de programación. Nos limitaremos a comprobar qué otras ventajas aporta Visual LISP.

Nuevas Funciones LISP

En primer término Visual LISP aumenta de manera significativa el número de fun- ciones disponibles, incluyendo muchas que ya forman parte desde hace bastante tiem- po de la norma del Common LZSP6. Estas funciones se distinguen de las primitivas AutoLISP mediante el prefijo VL- y suman unas 70, entre las que se incluyen varias para lectura y escritura en el registro de Windows o que permiten gestionar el alma- cenaje en archivos y carpetas, algunas utilizables para un tratamiento más efectivo de los errores en tiempo de ejecución, y otras para tratamiento y conversión de tipos de datos LISP como símbolos, cadenas y listas.

Extensiones ActiveX de Visual LISP

Las extensiones ActiveX suministradas con Visual LISP incluyen funciones para la medición de curvas, la conversión de datos, la manipulación de objetos, propiedades, colecciones y diccionarios.

Estas nuevas funciones brindan una serie de ventajas, entre las que se encuentran una mayor velocidad de ejecución y una funcionalidad más amplia. Permiten emplear también tipos de datos que no están disponibles en AutoLISP, como lo son los arrays. Estas funciones se distinguen, al igual que las otras nuevas funciones incorporadas a Visual LISP, por sus prefijos. Las tenemos de dos tipos:

Funciones VLA-, las que corresponden directamente a los métodos ActiveX nativos de AutoCAD '.

Funciones VLAX-, las que son funciones especializadas exclusivas de Visual LISP

Esta interfaz ActiveX permite a Visual LISP actuar como cliente y como servi- dor en el entorno Windows, permitiéndole controlar o ser controlado desde otras aplicaciones. De esta manera se facilita la posibilidad de interactuar con otras apli- caciones, cosa hasta ahora casi imposible para los programadores AutoLISP.

Reactores

Otro grupo de nuevas funciones, que se identifican mediante el prefijo VLR-, tiene como objetivo el de implementar reactores. Los reactores hacen que una determinada

' Definidas en las ediciones 1 y 2 del libro de Guy Steele, Common LISP, Thr Lnnguage, y más recientemente como norma ANSI.

' 1163 funciones en nuestra versión española de AutoCAD 2002. 118 funciones en la misma versión.

Page 22: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

8 Programación AutoCAD con Visual L/SP

aplicación reciba de AutoCAD un aviso cuando tienen lugar determinadas acciones, lo que permitirá programar una determinada respuesta a ese evento. Son cuatro los tipos de reactores que corresponden a las categorías generales de eventos a los cuales una aplicación puede responder:

Reactores del Editor, que notificarán cada vez que se invoque un comando de AutoCAD. Reactores de la Base de Datos, vinculados a entidades u objetos específicos de la base de datos de un dibujo. Reactores de Objeto, que notificarán si determinadas acciones se realizan sobre una entidad dentro de AutoCAD. Reactores de Vínculo, que notifican a la aplicación cuando se carga o descarga una aplicación ARX.

Este es un tema sumamente complejo que ya abordaremos en un próximo capí- tulo. Las rutinas de respuesta llamadas desde los reactores deberán necesariamente utilizar las nuevas funciones ActiveX de Visual LISP en lugar de recurrir a la vieja función command de AutoLISP.

El Entorno de Desarrollo

Por último, y no por ello menos importante, tenemos las herramientas para la progra- mación que se incluyen en el Entorno de Desarrollo (IDE) Visual LISP. Sin hacer una enumeración exhaustiva, que corresponde a capítulos posteriores, haremos un breve recorrido por sus principales características.

Entre los componentes del IDE encontramos:

Un verificador de sintaxis que reconoce expresiones erróneas y argumentos inadecuados en llamadas a las funciones primitivas de AutoLISP. Un compilador de archivos que incrementa la velocidad de ejecución y sumi- nistra una plataforma segura y eficiente para la distribución de aplicaciones. El compilador es capaz de procesar archivos tanto aislados como agrupados en proyectos Un depurador del código fuente diseñado específicamente para AutoLISP, que permite recorrer paso a paso el código en la ventana del Editor al mismo tiempo que se muestran los resultados de su ejecución en la ventana gráfica de AutoCAD. Un Editor de texto que codifica por color las fuentes AutoLISP y DCL, al tiempo que brinda otras ayudas a la verificación de la sintaxis. Un formateador AutoLISP que reestructura el programa para mejorar su legi- bilidad. Útiles de Inspección y Seguimiento que facilitan el acceso a los valores que asumen las variables y expresiones permitiendo su revisión y modificación.

IDE: siglas de Integrated Development Environment

Page 23: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]

Capítulo 1. Antecedentes 9

Pueden ser utilizados para examinar los datos AutoLISP así como las entida- des de AutoCAD. Una ayuda sensible al contexto que suministra información sobre las funcio- nes AutoLISP y una potente utilidad Aproximación (Apropos) para la búsque- da de nombres de símbolos. Un sistema de gestión de proyectos que facilita el mantenimiento de aplica- ciones que abarcan varios archivos. La posibilidad de empaquetar los archivos AutoLISP compilados en un mó- dulo único, junto a las correspondientes definiciones de diálogos (DCL). Una Consola LISP inteligente que permite evaluar de manera inmediata el código y provee otra serie de funciones de gran utilidad en el proceso de desarrollo de los programas.

1.4. RESUMEN

Hemos querido hacer un recuento de las nuevas potencialidades que se introducen con Visual LISP. Debe quedar claro que hoy las aplicaciones que gestionan AutoCAD y sus dibujos pueden desarrollarse en lenguajes de programación tan dispares como Visual BASIC, Delphi, C++, Java e incluso otras implementaciones de LISP ' O . Para un programador con experiencia en cualquiera de estos entornos el aprender Visual LISP sería útil aunque no imprescindible. Pero de la misma manera, un programador AutoLISP no tiene por qué echar ahora en falta las prestaciones de esos otros lengua- jes de programación. Esperamos que esto quede demostrado en los capítulos que siguen.

"' Existen implementaciones disponibles como software gratuito en Internet. Para más información se recomienda acceder a los siguientes sitios WEB:

Xanalys LispWorks: http:l/www.xanalys.com/software~tools/productslindex.html Allegro Common Lisp: http:ll.www.franz.comlproductsl Corman Common Lisp: http:llwww.corman.net/index.html CLISP: http:/lclisp.cons.orgl

Los primeros tres son productos comerciales, pero todos ofrecen versiones gratuitas de evaluación perfectamente adecuadas para el aprendizaje del lenguaje. CLISP es gratuito.

Page 24: Programacion%20en%20 autocad%20con%20visual%20lisp 1[1]