Anda di halaman 1dari 9

http://www.emagdalena.es/descargas/ emagdalena@ingenierosvigo.

com

Primeros pasos con AutoLISP

Objetivos del curso


Aprovechando que actualmente dispongo de algo ms de tiempo, me he decidido a desempolvar y re-editar algn curso que he creado hace ya bastante tiempo, tratar de actualizar el contenido para que funcione con las ltimas versiones de AutoCAD. Con este curso no se pretende formar a expertos programadores. Ms bien, se pretende acercar el lenguaje de programacin AutoLISP a los usuarios de AutoCAD, para que puedan crear utilidades y pequeas aplicaciones que les ahorren tiempo y clculos en sus trabajos. Para seguir el curso no son necesarios conocimientos de programacin, tan slo es preciso tener unas nociones bsicas de AutoCAD y del entorno Windows. Otro de los objetivos del curso es el de ver a AutoCAD no como un programa de dibujo, sino como una potente base de datos grficos. Y descubrir como funciona esa base de datos.

Cdigo de una macro en AutoLISP

Merece la pena aprender a programar sobre AutoCAD


Desde luego que puede merecer la pena. Puede agilizar y facilitar enormemente el trabajo con AutoCAD. Puede que existan en el mercado aplicaciones de diseo mucho ms potentes para trabajar en 3D de forma paramtrica, como SolidWorks o Catia, pero AutoCAD se sigue utilizando habitualmente en infinidad de aplicaciones. Para trabajar en 2D sigue siendo la aplicacin de CAD de referencia y su formato de archivo .DWG es un estndar en la importacin y exportacin de archivos convirtindose en uno de los formatos de archivo ms utilizados para intercambiar partes de un diseo con clientes, proveedores y colaboradores.

AutoLISP es un lenguaje sencillo de aprender y a diferencia de otros lenguajes de programacin se pueden crear programas interesantes y realmente tiles casi desde el primer momento. Muchas veces, la mayora del tiempo empleado en crear una macro o programa se emplea en depurar el cdigo (corregir errores). La planificacin y el anlisis previo de la macro es de suma importancia para evitarlo. El primer paso para escribir una macro consiste en escribir en un papel con un lenguaje simple lo que se desea que realice el programa, a esto se le denomina pseudocdigo. Un mtodo algo ms avanzado y eficaz es utilizar diagramas de flujo. Cuando ya empieces a programar en AutoLISP por ti solo, te ser muy til reunir todas las anotaciones sobre proyectos de aplicaciones y macros en una libreta o bloc de notas. Tambin puedes utilizar Evernote o cualquier otro sistema que te permita almacenar de informacin o gestionar las macros que has creado.

Interfaces de programacin
AutoCAD dispone varios entornos de programacin, la seleccin del tipo de interfaz a emplear para crear una aplicacin depender de las necesidades de la aplicacin y de la experiencia o conocimientos del programador/es:

AutoLISP es una adaptacin del lenguaje de programacin CommonLISP para AutoCAD. Es sencillo de aprender y al mismo tiempo potente. AutoCAD cuenta con un intrprete interno de LISP que permite introducir cdigo desde la lnea de comandos o cargar programas desde archivos externos. Puedes utilizar AutoLISP para automatizar tareas repetitivas y crear nuevos comandos de AutoCAD ActiveX Automation constituye una alternativa moderna al AutoLISP. Puedes acceder y controlar objetos de AutoCAD desde cualquier aplicacin que utilice un controlador Automation como Visual Basic y Delphi, o cualquiera de las aplicaciones que dispongan de Visual Basic for Applications (VBA) VBA es un entorno de programacin basado en objetos que utiliza ntegramente la sintaxis del lenguaje Visual Basic y permite usar controles ActiveX. Permite tambin la integracin con otras aplicaciones que utilizan VBA como MS Office o MS Project. Las ediciones de desarrollo de MS Visual Basic, que se adquieren por separado, complementan AutoCAD VBA con componentes adicionales como un dispositivo externo de base de datos y funcionalidades de escritura de informes ObjectARX es un entorno de programacin de lenguaje compilado para el desarrollo de aplicaciones de AutoCAD. El entorno de programacin ObjectARX incluye varias bibliotecas de vnculos dinmicos (DLL) que ofrecen acceso directo a las estructuras de la base de datos, el sistema de grficos y los dispositivos de geometra de AutoCAD

De momento nos centraremos en la programacin sobre AutoCAD utilizando el interprete interno de AutoLISP para pasar en breve al entorno de Visual LISP y posteriormente a la programacin en VBA.

Caractersticas de AutoLISP
El LISP fue desarrollado a finales de los aos 50 por John McCarthy, es el segundo lenguaje de programacin ms antiguo solo precedido por Fortran. Uno de los campos en los que es ms empleado es en la investigacin en inteligencia artificial. Su nombre proviene de LISt Procesing (Procesado de listas), pues se basa en el uso de listas en lugar de datos numricos. Aunque hay quien mantiene en tono jocoso que su nombre proviene de Lost In Stupid Parenthesis. AutoLISP aade al LISP algunas funciones especialmente diseadas para la manipulacin de las entidades de AutoCAD. AutoLISP es un lenguaje evaluado. El cdigo se convierte a lenguaje mquina (ceros y unos) y se almacena en la memoria temporal. No es tan lento como los lenguajes interpretados, ni tan rpido como los compilados:

en los lenguajes interpretados, se va traduciendo el programa a cdigo mquina (el idioma de los ordenadores) a medida que se ejecuta en los lenguajes compilados, el cdigo fuente (texto) del programa se traduce a cdigo mquina generando un archivo ejecutable (.EXE) que es el que ejecutar el programa

Hay quien dice que AutoLISP es lento comparndolo con otros lenguajes como Pascal o C, especialmente cuando se utilizan muchas funciones matemticas. Sin embargo, cuando se utiliza manipulando smbolos los resultados son muy distintos. Esto hace de AutoLISP un excelente lenguaje para la programacin de sistemas CAD, ya que un sistema CAD no es ms que un entorno de manipulacin de smbolos grficos. Una de las caractersticas ms importantes de AutoLISP es la posibilidad de acceder a la base de datos de los dibujos de AutoCAD. Donde podemos acceder a las capas, estilos de texto, sistemas de coordenadas personales (SCP) as como a todas las entidades del dibujo. Esta informacin se puede modificar, extraer e incluso aadir ms entidades al dibujo o informacin adicional. La mayora de los primeros lenguajes de programacin de alto nivel como C o Pascal son lenguajes procedimentales, se ejecutan una serie de instrucciones paso a paso a partir de unos datos. En AutoLISP en lugar de seguir instrucciones prefijadas, se puede acceder a la informacin de los objetos de AutoCAD para determinar de que informacin se dispone, preguntndole a los objetos por ellos mismos. AutoLISP no es estrictamente un lenguaje orientado al objeto, pero contiene bastantes caractersticas de estos tipos de lenguajes debido a que puede interactuar con los objetos contenidos en los dibujos. AutoLISP permite crear nuevos comandos para AutoCAD, que se ejecuten como cualquier otra orden. Es posible incluso redefinir los comandos de AutoCAD para que

funcionen de forma distinta, por ejemplo podramos redefinir el comando POLIGONO para que dibuje polgonos estrellados en lugar de los regulares. Una mencin especial merece el uso de AutoLISP en la realizacin de programas paramtricos y en el diseo semiautomtico, ya que entre el 60% y el 80% del diseo est dedicado a la modificacin de diseos previos. En los programas paramtricos, el usuario introduce una serie de datos o parmetros a partir de los cuales el programa realiza el diseo completo de un elemento u objeto. Esta puede ser sin ninguna duda una de las mayores aplicaciones de AutoLISP. AutoLISP se ha mejorado con la creacin de Visual LISP que ofrece un entorno de desarrollo integrado dentro de AutoCAD. Visual LISP incluye un compilador, un depurador y diversas utilidades para facilitar la programacin. Adems aade nuevos comandos para permitir la interaccin con objetos que utilizan ActiveX. Otra de las novedades que aporta Visual LISP son los reactores de objetos que permiten que AutoLISP responda a eventos. En los dos primeros captulos del curso se trabajar desde la ventana de comandos de AutoCAD. A partir del tercer captulo ya crearemos nuestras macros en archivos de texto utilizando el entorno de Visual LISP proporcionado por AutoCAD. Existen dos inconvenientes al emplear AutoLISP desde la ventana de comandos de AutoCAD:

en primer lugar el reducido espacio con el que se cuenta en la ventana de comandos de AutoCAD y la dificultad que supone el no tabular el cdigo, es decir escribir el cdigo todo seguido. Esto es debido a que cada vez que se pulsa Intro, AutoCAD evala lo que se ha escrito en segundo lugar, al terminar la sesin de trabajo en AutoCAD se perdern todos los datos almacenados en la memoria temporal

Expresiones y procedimientos de evaluacin


Un programa en AutoLISP consiste en una serie de expresiones del tipo (funcin argumentos). Cada expresin comienza con un parntesis de apertura al que sigue el nombre de una funcin de AutoLISP (o una funcin creada por el usuario) y una serie de argumentos (a veces opcionales) que dependen de la funcin indicada y van separados por al menos un espacio en blanco. Cada expresin termina con un parntesis de cierre, esto es muy importante pues el nmero de parntesis de apertura debe ser igual al de cierre. Cada expresin de AutoLISP devuelve un valor.

Un argumento tambin puede ser una expresin, crendose as una estructura formada por expresiones (listas) anidadas unas dentro de otras; de modo que la ms interior devolver su resultado como un argumento a la lista exterior. Cuando existen listas anidadas (unas dentro de otras), primero se evalan las ms interiores. Los primeros ejemplos que vamos a ver son sencillos y cortitos, as que puedes teclearlos directamente en la ventana de comandos de AutoCAD. Ejemplo: (+ 1 2) Ejecuta la funcin + que realiza la suma de los argumentos 1 y 2 devuelve el resultado 3. (+ 31 22 -3) Ejecuta la funcin + que realiza la suma de los argumentos 31, 22 y -3 devuelve el resultado 50. Prueba tambin: (- 17 2) (+ 2.5 22.8) (- 0.25 22.5) (+ 12 -2 31 -7.5) Ejemplo: (+ (* 2 3) 2) devuelve 8. Recuerda que primero evala la lista interior y devuelve su resultado a la exterior. (+ 7 (/ 5.0 2) -3) devuelve 6.5. Qu sucedera si al escribir la expresin (+ 1 (/ 5.0 2)) nos olvidsemos de escribir el ltimo parntesis? Haz la prueba, veras que AutoCAD te indica que falta 1 parntesis de cierre. Si el interprete de comandos de AutoCAD encuentra un parntesis de apertura, supone que todo lo que vaya a continuacin hasta el parntesis de cierre es una expresin de AutoLISP. De modo que enva esa expresin al interprete de AutoLISP para que la evale. En el siguiente captulo veremos algunas de las operaciones matemticas que se pueden realizar con AutoLISP.

Tipos de objetos y datos


Los elementos de las expresiones de AutoLISP pueden ser smbolos, valores concretos y tambin otras expresiones. Se pueden distinguir los siguientes tipos de elementos:

Smbolos: Cualquier elemento que no sea un valor concreto. Por ejemplo una variable, una funcin Enteros: Nmeros enteros comprendidos entre -32000 y 32000 Reales: Nmeros reales (180 es un nmero entero, pero 180.0 es un nmero real) Cadenas de texto: Texto con una longitud mxima de 132 caracteres Descriptores de archivo: Representan un archivo de texto ASCII abierto Nombres de entidades de AutoCAD: Nombre en hexadecimal de una entidad del dibujo Conjuntos designados por el usuario: Conjuntos de entidades de AutoCAD Funciones de usuario: Funciones definidas por el usuario Funciones de AutoLISP: Funciones o comandos predefinidos de AutoLISP

Ejemplo:

(+ 5 2) devuelve 7. (+ 5 2.0) devuelve 7.0. En el primer caso todos los argumentos son nmeros enteros, y el resultado de su suma es un nmero entero. En el segundo caso, tenemos un nmero real, as que el resultado es un nmero real. Para que comprendas la importancia de esta distincin, realiza el siguiente ejemplo: (/ 5 2) (/ 5 2.0) Una de las mayores virtudes de AutoLISP es que pueden ejecutarse expresiones en medio de un comando de AutoCAD. Ejemplo: Ejecuta el comando LINEA e indica el primer punto, activa el forzado ortogonal (F8) y teclea (+ 11 25) Esto devuelve el resultado de la suma al comando que se estaba ejecutando. Por eso dibuja una lnea de 36 mm de longitud en la direccin que indicaba el cursor. Prueba ahora indicando el radio de la circunferencia (- 70 25) al utilizar el comando llamado CIRCULO (mal llamado, pues debera ser circunferencia).

Podemos emplear tambin la constante PI = 3.14159 para realizar clculos. Por ejemplo, ejecuta de nuevo el comando CIRCULO y cuando pregunte el radio de la circunferencia, teclea (/ 6 (* 2 PI)). Obtendremos una circunferencia de permetro 6.

Notacin empleada
Para describir las funciones de AutoLISP que se expliquen a lo largo del curso se seguir la siguiente notacin: (FUNCIN Argumentos_necesarios [Argumentos_opcionales] ) Los nombres de las funciones de AutoLISP y el cdigo a teclear se mostrarn en negrita.

Convenciones recomendadas
En este apartado se indicarn una serie de convenciones recomendables a la hora de programar. Alguna de ellas puede que an no las entiendas, pero no te preocupes porque las iremos recordando a medida que avancemos en el curso.

para los comentarios incluidos en el cdigo, se recomienda utilizar el siguiente mtodo: o ;;; Antes del cdigo de las funciones, explicando su funcionamiento o ;; En medio del cdigo del programa o ; Para explicar una lnea de cdigo. A diferencia de las anteriores, esta no se inserta en la columna 1, se insertar al terminar el cdigo de la lnea que comenta es muy recomendable utilizar un formato tabulado para el cdigo evitar el uso de variables globales innecesarias utilizar los comandos de AutoCAD y sus opciones en Ingls y precedidos por ._ no abusar de la funcin SETQ no utilizar T, MIN, MAX, LAST como smbolos (nombres de variables y funciones) recuperar el valor inicial de las variables de sistema de AutoCAD que han sido modificadas aadir unas lneas al final del programa para indicar el nombre del nuevo comando, autor, etc. no introducir demasiado cdigo en la funcin principal incluir una funcin de tratamiento de errores evitar que el usuario pueda introducir datos errneos en general es recomendable que, tras ejecutar el nuevo comando, si se ejecuta el comando DESHACER (H) se deshagan todos los cambios realizados por el comando

Convenciones utilizadas en el curso

El cdigo en AutoLISP se mostrar en negrita y con los siguientes colores: o los parntesis de apertura y cierre se mostrarn en rojo ( ) o las funciones de AutoLISP se mostrarn en azul setq o los nmeros se mostrarn en verde 125.6 12 o los textos se mostrarn en rosa /nDesigne un punto: o los comentarios se mostrarn en prpura ;Esto es un comentario

las funciones de usuario se mostrarn en maysculas (GAR 90.0)