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

3,198 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,198
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
187
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Programación en AutoCAD con Visual LlSP
  2. 2. 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ÉXICONUEVA 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
  3. 3. 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 lainformació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 comoguí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-2Depósito legal: M. 1.003-2003Editor: Carmelo Sánchez GonzálezDiseño de cubierta: Luis Sanz CanteroCompuesto en Marasán, S. A.Impreso en Fareso, S. A.IMPRESO EN ESPANA - PRINTED IN SPAIN
  4. 4. 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.
  5. 5. Prólogo ................................................................................. xiii . .Agradecimientos................................................................. xivAcerca de los autores ....................................................... xiv PARTE 1 INTRODUCCI~NCapítulo 1. Antecedentes .......................................... 3I . 1. Visual LISP: Los orígenes ....................................... 51.2. Aplicaciones desarrolladas sobre Visual LISP ....... 61.3. ¿Por qué Visual LISP? ............................................. 61.4. Resumen ..................................................................... 9Capítulo 2. Para comenzar ...................................... 11 Un caso real ............................................................ 12 Organizar nuestro proyecto .................................... 12 Estructura del proyecto ........................................... 13 Análisis del problema ............................................. 16 Un DICCIONARIO personalizado ........................ 17 Función de Cálculo ................................................. 20 La función de Dibujo ............................................. 21 La Interfaz de Usuario ........................................... 22 Colocar la rotulación .............................................. 24 Actualización del DICCIONARIO ........................ 24 En caso de error ..................................................... 27 Compilar nuestro programa .................................... 28 Resumen ................................................................... 29 . . . Ejercicios ................................................................. 29
  6. 6. vi¡¡ Contenido PARTE 2 EL LENGUAJE Y SU ENTORNO DE DESARROLLOCapí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 ...............................................................
  7. 7. Contenido ¡X7.4. Control de la entrada mediante INITGET ............................................... 1427.5. Solicitud de números enteros .................................................................... 1447.6. Entrada de valores angulares .................................................................... 1467.7. Diálogo para búsqueda de archivos ........................................................ 1467.8. Resumen ...................................................................................................... 1487.9. Ejercicios .................................................................................................... 149Capítulo 8. Operaciones con archivos ............................................... 1518.1. Apertura de archivos ................................................................................. 1528.2. Lectura de archivos .................................................................................... 1538.3. Escritura de archivos ................................................................................. 1558.4. Archivos y carpetas ............................................................................... 1588.5. Resumen ................................................................................................. 1638.6. Ejercicios .................................................................................................... 164Capítulo 9. Depurar el código Visual LlSP ......................................... 1679.1. Encontrar el origen del error ................................................................... 1689.2. La sesión de Depuración ........................................................................... 1709.3. Herramientas para la inspección de datos ............................................. 1739.4. Rastreo de Errores ..................................................................................... 1789.5. Resumen ...................................................................................................... 178 PARTE 3 CONTROLAR AUTOCAD DESDE VISUAL LlSPCapí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 ........................................................... 24811.5. Conjuntos de selección ActiveX ........................................................... 2501 1.6. Resumen .................................................................................................... 25711.7. E.jercicios .................................................................................................. 257
  8. 8. Contenido7.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 ......................................... Encontrar el origen del error ....................................................................9.1.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 LlSPCapí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 .......................................................11.1. Los conjuntos de selección .....................................................................11.2. Crear conjuntos de selección ..................................................................11.3. Conjuntos preseleccionados ....................................................................11.4. Modificar conjuntos de selección ...........................................................11.5. Conjuntos de selección ActiveX ............................................................11.6. Resumen ....................................................................................................11.7. Ejercicios ..................................................................................................
  9. 9. x ContenidoCapí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 ..................................................................................................
  10. 10. ContenidoCapí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 APLICACIONESCapí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 .............................................................
  11. 11. xi i Contenido19.3. Geometría Computacional ................................................................... 52119.4. Envolvente Convexa de una nube de puntos ........................................ 52419.5. Triangulación de DELAUNAY sobre una nube de puntos ................. 53519.6. Resumen ............................................................................................. 545 PARTE 5 PROGRAMACIÓN ORIENTADA A EVENTOSCapítulo 20. Responder a Eventos: los Reactores ......................... 54920.1. Las funciones VLR .................................................................................. 55020.2. Tipos de reactor ....................................................................................... 55020.3. Acciones .................................................................................................... 55920.4. Una aplicación que utiliza reactores .................................................... 56420.5. Resumen .................................................................................................... 57020.6. Ejercicios .................................................................................................. 573Capítulo 21 . DCL: La lnterfaz Gráfica del Usuario .......................... 5752 1 .1. El lenguaje DCL ...................................................................................... 57621.2. Programar un diálogo en el Editor .................................................... 57821.3. . . Controlar el dialogo ................................................................................. 58621.4. El programa de dibujo paramétrico ....................................................... 5932 1.5. Resumen .................................................................................................... 59721.6. Ejercicios .................................................................................................. 597Capítulo 22. ObjectDCL .............................................................................. 59922.1. El programa ObjectDCL..................................................................... 60022.2. Una aplicación desarrollada con ObjectDCL ........................................ 60722.3. Resumen .................................................................................................... 62822.4. Ejercicios .................................................................................................. 628 PARTE 6 APÉNDICESApéndice 1 . Bibliografía .......................................................................... 633Apéndice 2. Resumen de las Funciones Visual LISP ............................... 637Epílogo .................................................................................................................. 671Indice .................................................................................................................... 673
  12. 12. Visual LISP es la puesta al día de AutoLSSP, el lenguaje deprogramación que durante más de quince años ha permitido a losusuarios de AutoCAD hacer de esta aplicación una herramientamejor adaptada a sus necesidades específicas. AutoLISP es un lenguaje de programación diseñado paraextender y personali-rar la funcionalidad de AutoCAD. Se basa enel lenguaje programación LISP, cuyos orígenes se remontan afines de la década de los 50. Seguramente la elección, allá por 1985, de LSSP como modelo del lenguaje de programación paraAutoCAD pudo parecer por lo menos extraña. Se trataba de unlenguaje peculiar, de uso casi exclusivo en entornos tan elitistascomo las investigaciones sobre inteligencia artificial. Pero segúnafirmaba 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 objetoscon que uno trabaja en CAD. Al contrcrrio que la programaciónnumérica, el CAD constantemerlte trabaja sobre colecciones deobjetos heterogéneos en grupos de tamaño variable. LISP esexcelente en este aspecto". El éxito de AutoLISP sin duda le dio la razón. Fuimosmuchos 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 dediseñ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 ofLISP Confereiice, Nov. 1998, Berkeley, California. xiii
  13. 13. xiv Prólogo Las limitaciones que presentaba AutoLISP hacían pensar que terminaría por sersustituido 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 LISPha venido a demostrar que no es así. Este libro intenta demostrar las capacidades, tanto nuevas como antiguas, queunidas hacen de este nuevo entorno de desarrollo para la personalización de Auto-CAD la solución idónea para muchas aplicaciones.AGRADECIMIENTOSQueremos 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, los deque tantas cosas hemos aprendido. En el libro hemos dejado constancia de la autoríade algunas ideas o incluso de fragmentos de código fuente que de ahí provienen. Enotros 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 incluimosví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 AUTORESReinaldo Togores Fernández, Arquitecto titulado en la Universidad de La Habana.Participó en el plan masivo de construcciones escolares desarrollado en Cuba durantelos 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 contactocon 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 laFacultad de Arquitectura y el Instituto Superior de Diseño Industrial, ambos en LaHabana. Desde 1995 es profesor asociado de Técnicas de Expresión Gráfica en laUniversidad 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 paraAutoCAD 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 revistaespañola AutoCAD Magazine y mantuvo una sección fija sobre programación VisualLISP en la desaparecida revista argentina CadXPress. Forma parte del Grupo de Investigación EGI-CAD, miembro del AutodeskDevelopers Network (ADN), donde atiende los temas relacionados con el desarrollode aplicaciones para Cartografía y Sistemas de Información Geográfica sobre la pla-taforma AutoCAD-Autodesk MAP.
  14. 14. Prólogo Xv César Otero González, Doctor Ingeniero de Caminos por la Universidad deCantabria (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 asignaturasde CAD en los estudios renovados de Ingeniería Industrial, Telecomunicación yCaminos (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 deMaterias Básicas Científico-Técnicas; en concreto, en el ámbito del Diseño Asistidopor 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 enla Ingeniería, en la línea CAD), centrándose en la Investigación de temas relacionadoscon la Computación Gráfica y la Geometría de Estructuras Espaciales; dentro delGrupo, una línea de actividad de Innovación Tecnológica importante se refiere aldesarrollo de software y consultoría CAD y SIG, actividad en la que ha colaboradocon Organismos y Empresas diversos. El Grupo EGI-CAD está reconocido en laactualidad como investigador o desarrollador en diversos programas de algunas de lasfirmas de CAD más extendidas en el mercado mundial.
  15. 15. IntroducciónThe ~pirit of L i ~ phacking 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
  16. 16. Antecedentes
  17. 17. 4 Programación AutoCAD con Visual LISPAparte de las razones apuntadas por Walker, la facilidad con que pudimos acceder ala programación LISP, incluso careciendo de una formación previa en el campo de laprogramación informática, se debe a la peculiar sintaxis de este lenguaje, que no esotra que la de las funciones matemáticas, ya conocidas desde los estudios en laenseñanza secundaria. Todos sabemos cómo resolver una expresión como (8 * ((1 7 + 3) 1 4)). Primerohallaríamos el resultado de 17 + 3, que entonces dividiríamos entre 4, para el resultadomultiplicarlo por 8. Es decir, que iríamos resolviendo los paréntesis más interiores ypasando 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 esa lo que en LISP llamamos una lista. La solución de la expresion 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. Enla 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 elresultado: 40 Ya estamos usando LISP. Tan sencillo como eso. AutoCAD ha interpretado lafunción recibida y ha devuelto el resultado de su evaluación, que aparece impreso enla pantalla. Así hemos accedido al mecanismo fundamental de LISP. Las expresionescomo la que acabamos de escribir son las unidades básicas del lenguaje, que operamediante 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 usuariosal que me estoy refiriendo): otros lenguajes de programación nos obligarían a unaserie de preparativos relacionados con la gestión de la memoria. Deberíamos preverlos tipos de datos a emplear y disponer por anticipado los contenedores adecuadospara esos tipos de datos (declaración de variables, etc.). En LISP la memoria esgestionada 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 entrenombres de variables. Así resultó que el éxito de AutoLISP como medio para extender las posibilidadesde AutoCAD fue arrollador. Quizás hoy no estemos conscientes de que algunas de lasherramientas que consideramos indispensables no estuvieron disponibles en el progra-ma original y que fueron surgiendo, diseñadas en principio para el uso personal de suscreadores, como macros y programas AutoLISP. Si revisamos el AutoCAD Producti-vity Book de Schaefer y Brittain , publicado en 1986, nos encontraremos con la macrode menú COPYPARA cuya función era realizar, utilizando expresiones AutoLISP, unacopia 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 T o Circle) conel 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
  18. 18. 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. Eltítulo del libro era muy preciso en cuanto a lo que AutoLISP brindaba al usuario: unamanera de incrementar su productividad automatizando cualquier tarea repetitiva. AutoLISP no era más que un pequeño subconjunto del lenguaje de programaciónoriginal2, tanto como pudiera caber en los 64 Kb de memoria para ello entoncesdisponible. Que además debía incluir funciones propias que permitieran controlar eleditor de dibujo de AutoCAD.1.1. VISUAL LISP: LOS OR~GENESVisual 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 limitacionesde 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 propiedadintelectual sobre el código fuente. A partir de la versión 10 tuvimos la posibilidad deprogramar en lenguaje C empleando una colección de rutinas que reproducían, deforma un tanto mecánica, cada una de las funciones AutoLISP. Esta solución decompromiso se hizo pronto obsoleta, ante la introducción con la versión 13c4 de laprogramación orientada a objetos C++ mediante la tecnología ObjectARX. Pero un grupo de programadores trabajando desde Moscú en la empresa BasisSoftware "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 deLISP se han enriquecido con la introducción de nuevas funciones y estructuras dedatos, y disponen además de eficientes compiladores que hacen posible guardar yejecutar 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 manerainmediata cada línea de código, la asignación dinámica del tipo de dato y la gestiónautomática de la memoria. El dialecto XLISP, desarrollado por David Betz. Información tomada de http://ww.telent.net/cliki/succes storieay 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 VLISPes la técnica conocida como byte-code o p-code, en la que se traducen las instrucciones en un vectorde bytes que es interpretado por una máquina virtual. Este proceso no está documentado por razonesde seguridad.
  19. 19. 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 sedistribuyera con la versión comercializada en Estados Unidos hizo que ACOMP notuviera 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 sedispuso por fin de un LISP moderno capaz de emular al AutoLISP nativo asegurandola 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 queya estaba en el mercado, se ofreció como programa complementario a un preciosustancialmente más bajo que el de BASIS Software.1.2. APLICACIONES DESARROLLADAS SOBRE VISUAL LISPEl no formar parte del núcleo de AutoCAD R14 obligaba al programador a incluir consu programa un RTS o Sistema de Tiempo de Ejecución (Runtime System) que debíacargarse para ejecutar los programas Visual LISP. Esta necesidad fue cubierta demanera sumamente práctica mediante la posibilidad de empaquetar todos los archivosde la aplicación, tanto los LISP compilados (archivos FAS) como los que debenpermanecer en formato de texto (los DCL, por ejemplo) junto con el RTS en unejecutable 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 delprograma. Con lo que ya no será necesario suministrar un RTS con la aplicacióndesarrollada, 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 yDCL) ocupan unos 102 Kb resulta, una vez compilado como ARX (Versión 14), unarchivo de 602 Kb, mientras que compilado como Ejecutable Visual LISP (archivoVLX) 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á VisualLISP 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 puedencrearse 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 AutoLISPdesarrollado por la firma Western Sierra Software y que estaba disponible como freeware en Internet.
  20. 20. Capítulo 1 . Antecedentes 7programación modernos, desde Visual Basic hasta Java. No entraremos a discutir losméritos relativos de cada uno de estos lenguajes de programación. Nos limitaremosa comprobar qué otras ventajas aporta Visual LISP.Nuevas Funciones LISPEn 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 primitivasAutoLISP mediante el prefijo VL- y suman unas 70, entre las que se incluyen variaspara 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 delos errores en tiempo de ejecución, y otras para tratamiento y conversión de tipos dedatos LISP como símbolos, cadenas y listas.Extensiones ActiveX de Visual LISPLas extensiones ActiveX suministradas con Visual LISP incluyen funciones para lamedició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 encuentranuna mayor velocidad de ejecución y una funcionalidad más amplia. Permiten empleartambié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 aVisual LISP, por sus prefijos. Las tenemos de dos tipos: Funciones VLA-, las que corresponden directamente a los métodos ActiveXnativos de AutoCAD . Funciones VLAX-, las que son funciones especializadas exclusivas de VisualLISP 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 otrasaplicaciones. De esta manera se facilita la posibilidad de interactuar con otras apli-caciones, cosa hasta ahora casi imposible para los programadores AutoLISP.ReactoresOtro grupo de nuevas funciones, que se identifican mediante el prefijo VLR-, tienecomo 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ásrecientemente como norma ANSI. 1163 funciones en nuestra versión española de AutoCAD 2002. 118 funciones en la misma versión.
  21. 21. 8 Programación AutoCAD con Visual L/SPaplicación reciba de AutoCAD un aviso cuando tienen lugar determinadas acciones,lo que permitirá programar una determinada respuesta a ese evento. Son cuatro lostipos de reactores que corresponden a las categorías generales de eventos a los cualesuna 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 necesariamenteutilizar las nuevas funciones ActiveX de Visual LISP en lugar de recurrir a la viejafunción command de AutoLISP.El Entorno de DesarrolloPor ú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 haceruna enumeración exhaustiva, que corresponde a capítulos posteriores, haremos unbreve 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
  22. 22. 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 comoVisual BASIC, Delphi, C++, Java e incluso otras implementaciones de LISP O . Paraun programador con experiencia en cualquiera de estos entornos el aprender VisualLISP sería útil aunque no imprescindible. Pero de la misma manera, un programadorAutoLISP 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 quesiguen. " Existen implementaciones disponibles como software gratuito en Internet. Para más informaciónse 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ónperfectamente adecuadas para el aprendizaje del lenguaje. CLISP es gratuito.

×