06.04.2014 Views

Programando con AutoLISP Para muchos, la simple idea de ...

Programando con AutoLISP Para muchos, la simple idea de ...

Programando con AutoLISP Para muchos, la simple idea de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programando</strong> <strong>con</strong> <strong>AutoLISP</strong><br />

<strong>Para</strong> <strong>muchos</strong>, <strong>la</strong> <strong>simple</strong> <strong>i<strong>de</strong>a</strong> <strong>de</strong> escuchar el término programación les genera que una sensación <strong>de</strong> frío corra<br />

por su espalda. Quizás recuerdan a aquellos compañeros <strong>de</strong> <strong>la</strong> escue<strong>la</strong> que todos <strong>con</strong>si<strong>de</strong>raban nerds o los<br />

matados, escribiendo miles <strong>de</strong> líneas <strong>de</strong> código que nadie sino ellos entendía.<br />

Programar en AutoCAD en el lenguaje LISP es re<strong>la</strong>tivamente sencillo para todos los usuarios <strong>de</strong> AutoCAD <strong>de</strong><br />

nivel medio a avanzado. La lógica <strong>de</strong> <strong>la</strong> programación es re<strong>la</strong>tivamente sencil<strong>la</strong> y <strong>con</strong> un breve análisis y <strong>muchos</strong><br />

ejercicios, poco a poco podremos ir dominando el lenguaje <strong>de</strong> programación <strong>de</strong> <strong>AutoLISP</strong>.<br />

Antes que nada, permítanme <strong>de</strong>cirles que no soy programador. Lo único que he programado en mi vida son<br />

comandos <strong>de</strong> AutoCAD, nunca he hecho nada mayor a esto. Sin embargo, esto es para comprobar <strong>la</strong> re<strong>la</strong>tiva<br />

facilidad <strong>con</strong> <strong>la</strong> que un usuario pue<strong>de</strong> comenzar a crear o modificar sus propios comandos y funciones en<br />

AutoCAD.<br />

Es necesario <strong>con</strong>si<strong>de</strong>rar algunos requisitos básicos antes <strong>de</strong> comenzar a analizar el lenguaje <strong>de</strong> programación <strong>de</strong><br />

<strong>AutoLISP</strong>:<br />

1. Ser un usuario <strong>de</strong> AutoCAD <strong>de</strong> nivel intermedio o avanzado. Nadie que no sepa utilizar AutoCAD podrá<br />

hacer algo en <strong>AutoLISP</strong>, ya que lo que programaremos es el workflow operativo <strong>de</strong> AutoCAD. Es<br />

indispensable que dominemos los comandos <strong>de</strong> AutoCAD y que <strong>con</strong>ozcamos el <strong>con</strong>cepto <strong>de</strong> <strong>la</strong>s<br />

variables, y principalmente, el trabajo en <strong>la</strong> barra <strong>de</strong> comandos.<br />

2. Ser muy analítico. Si eres <strong>de</strong> los usuarios que les gusta hacer <strong>la</strong>s cosas como se <strong>la</strong>s enseñaron y punto,<br />

<strong>la</strong> programación no es para tí. Es necesario tener hambre <strong>de</strong> saber cómo funcionan <strong>la</strong>s cosas, enten<strong>de</strong>r<br />

los procedimientos e incluso, tener <strong>la</strong> capacidad <strong>de</strong> proponer nuevos. <strong>Para</strong> programar en cualquier<br />

lenguaje se requiere <strong>de</strong>smenuzar mentalmente una función en sus acciones principales y po<strong>de</strong>r generar<br />

instrucciones lógicas en el or<strong>de</strong>n a<strong>de</strong>cuado.<br />

3. Tiempo y Paciencia. <strong>Para</strong> <strong>la</strong> programación en general se requiere muchísimo tiempo y sobre todo,<br />

paciencia. No siempre <strong>la</strong>s cosas salen a <strong>la</strong> primera y en ocasiones pue<strong>de</strong> ser bastante frustrante.<br />

4. Or<strong>de</strong>n. A fin <strong>de</strong> asegurar un código bien estructurado, el cual podamos analizar en el futuro sin<br />

problemas, se requiere que seamos bastante or<strong>de</strong>nados al momento <strong>de</strong> generarlo. El localizar un error<br />

entre <strong>la</strong>s líneas <strong>de</strong> código pue<strong>de</strong> ser <strong>de</strong>salentador, mas si son cientos o miles. Sin embargo, <strong>la</strong> tarea se<br />

simplifica si mantenemos un or<strong>de</strong>n lógico y estructuramos bien el código.<br />

5. Concentración. Deducir cómo funcionan <strong>la</strong>s cosas requiere <strong>con</strong>centración. Describir cómo queremos<br />

que funcione también. Ni hab<strong>la</strong>r <strong>de</strong> proponer nuevos métodos o alternativas. Es necesario en<strong>con</strong>trarse<br />

en un entorno que nos permita lograr nuestra máxima <strong>con</strong>centración en lo que estamos haciendo.<br />

Analicemos ahora un poco el lenguaje <strong>de</strong> programación <strong>de</strong> LISP y su variante, <strong>AutoLISP</strong>.<br />

Historia <strong>de</strong> LISP y <strong>AutoLISP</strong><br />

LISP es un lenguaje <strong>de</strong> programación que surgió en 1958 en el MIT. Su nombre se <strong>de</strong>riva <strong>de</strong> LISt Procesing<br />

(proceso <strong>de</strong> listas) ya que este lenguaje se fundamenta esencialmente en el manejo <strong>de</strong> listas. De inmediato es<br />

notable que toda <strong>la</strong> sintaxis se compone <strong>de</strong> listas estructuradas, <strong>la</strong>s cuales se re<strong>con</strong>ocen rápidamente por el<br />

manejo <strong>de</strong> los paréntesis.<br />

<strong>AutoLISP</strong> es el lenguaje <strong>de</strong> programación <strong>de</strong>rivado <strong>de</strong> LISP que Auto<strong>de</strong>sk adoptó para generar rutinas para el<br />

manejo <strong>de</strong> AutoCAD y sus <strong>de</strong>rivados, permitiendo generar soluciones específicas para los distintos problemas


particu<strong>la</strong>res <strong>de</strong> los usuarios. Se inrodujo en <strong>la</strong> versión 2 <strong>de</strong> AutoCAD alre<strong>de</strong>dor e 1986. Puesto que <strong>AutoLISP</strong> nos<br />

permite crear <strong>de</strong>s<strong>de</strong> una <strong>simple</strong> línea, hasta gran<strong>de</strong>s cálculos matemáticos y <strong>con</strong> <strong>la</strong> posibilidad <strong>de</strong> <strong>con</strong>vertirlos<br />

en trazos gráficos, ha permitido que algunos campos <strong>de</strong> <strong>la</strong> ingeniería aprovechen estas capacida<strong>de</strong>s para<br />

<strong>de</strong>sarrol<strong>la</strong>r aplicaciones especializadas para resolver problemas específicos.<br />

Aunque hoy en día <strong>la</strong> ten<strong>de</strong>ncia es hacia lenguajes <strong>de</strong> programación mas “<strong>de</strong> moda”, Auto<strong>de</strong>sk sigue<br />

manteniendo <strong>AutoLISP</strong>, por <strong>la</strong> sencillez <strong>de</strong> operación y manejo por los usuarios <strong>de</strong> AutoCAD.<br />

En mi humil<strong>de</strong> opinión personal... La programación en <strong>AutoLISP</strong> es una herramienta principalmente enfocada a<br />

usuarios <strong>de</strong> AutoCAD que no <strong>de</strong>sean profundizar en gran medida en <strong>la</strong> programación. Permite, <strong>con</strong> una ligera<br />

curva <strong>de</strong> aprendizaje, el <strong>de</strong>sarrol<strong>la</strong>r sencil<strong>la</strong>s aplicaciones para CAD que simplifican el trabajo diario.<br />

A<strong>de</strong>ntrémonos ahora hacia los fundamentos <strong>de</strong> <strong>AutoLISP</strong>.<br />

Fundamentos <strong>de</strong> <strong>AutoLISP</strong><br />

Como comentamos anteriormente, existen algunos fundamentos esenciales <strong>de</strong> programación y <strong>de</strong> <strong>AutoLISP</strong><br />

que es necesario compren<strong>de</strong>r y dominar:<br />

• Una vez que cuentas <strong>con</strong> AutoCAD o alguno <strong>de</strong> sus <strong>de</strong>rivados, no requieres ningún otro programa<br />

adicional para <strong>la</strong> programación en <strong>AutoLISP</strong>, ya que el mismo block <strong>de</strong> notas <strong>de</strong> Windows te permitirá<br />

generar el código correspondiente.<br />

• No se requiere compi<strong>la</strong>r. El código se almacena como un <strong>simple</strong> archivo <strong>de</strong> texto. Sin embargo, para que<br />

AutoCAD lo re<strong>con</strong>ozca como tal, se cambia <strong>la</strong> extensión <strong>de</strong>l texto a .LSP<br />

• <strong>AutoLISP</strong> es otro lenguaje <strong>de</strong> programación, por lo que tiene su propio vocabu<strong>la</strong>rio característico, que le<br />

permite realizar distintas funciones <strong>de</strong>pendiendo <strong>de</strong> <strong>la</strong>s acciones solicitadas.<br />

• <strong>AutoLISP</strong> administra listas estructuradas <strong>de</strong> datos, funciones, variables, etc.<br />

• Se utilizan paréntesis para <strong>la</strong> organización <strong>de</strong>l código.<br />

• El código se or<strong>de</strong>na <strong>de</strong> forma secuencial. Es <strong>de</strong>cir, el sistema lo “lee” <strong>de</strong> arriba hacia abajo, por lo que<br />

hay que escribirlo en el or<strong>de</strong>n en que <strong>de</strong>seamos que se ejecuten <strong>la</strong>s acciones.<br />

• Es posible escribir y evaluar código <strong>de</strong> <strong>AutoLISP</strong> sobre <strong>la</strong> misma línea <strong>de</strong> comando <strong>de</strong> AutoCAD.<br />

A<strong>de</strong>más <strong>de</strong> <strong>la</strong>s <strong>con</strong>si<strong>de</strong>raciones anteriores, existen otros términos que <strong>de</strong>bemos <strong>de</strong> <strong>con</strong>si<strong>de</strong>rar para cualquier<br />

lenguaje <strong>de</strong> programación:<br />

Todo lenguaje se basa en una sintaxis. Un or<strong>de</strong>n lógico en el cual se estructura una expresión. Tal como en el<br />

español utilizamos <strong>la</strong>s pa<strong>la</strong>bras en el or<strong>de</strong>n a<strong>de</strong>cuado, en <strong>la</strong> programación se requiere que nuestras expresiones<br />

estén estructuradas en base a una lógica <strong>de</strong>finida por el mismo lenguaje.<br />

En los lenguajes <strong>de</strong> programación existe el <strong>con</strong>cepto <strong>de</strong> Variable. Las variables son pequeños <strong>con</strong>tenedores<br />

virtuales que almacenan valores que usaremos posteriormente. A modo <strong>de</strong> ejemplo, supongamos que vamos a<br />

crear <strong>muchos</strong> círculos <strong>de</strong> 1.545896 m <strong>de</strong> diámetro. En lugar <strong>de</strong> especificar el diámetro en cada círculo, po<strong>de</strong>mos<br />

asignar el valor a una variable y luego “l<strong>la</strong>mar<strong>la</strong>” <strong>de</strong>s<strong>de</strong> <strong>la</strong> programación. Dicho <strong>de</strong> un modo mas práctico,<br />

genero una variable l<strong>la</strong>mada DIAM1 a <strong>la</strong> cual le asigno el valor 1.545896. Al generar el círculo, en lugar <strong>de</strong><br />

teclear <strong>de</strong> forma manual el número, selecciono <strong>la</strong> variable, <strong>la</strong> cual ya <strong>con</strong>tiene el valor <strong>de</strong>seado. A lo <strong>la</strong>rgo <strong>de</strong>l<br />

análisis veremos que es posible generar variables <strong>de</strong> distintos modos, tanto por texto directo en el<strong>la</strong>, como por<br />

propieda<strong>de</strong>s específicas <strong>de</strong> objetos seleccionados.


Existen diferentes tipos <strong>de</strong> valores o tipos <strong>de</strong> datos que <strong>de</strong>berán <strong>de</strong> ser tomados en cuenta al momento <strong>de</strong><br />

programar, estos diferentes tipos <strong>de</strong> campos nos permiten tener mayor <strong>con</strong>trol en los resultados, simplificar el<br />

trabajo <strong>de</strong> proceso <strong>de</strong>l equipo, y <strong>con</strong>struír expresiones lógicas para validar información. Estos tipos <strong>de</strong> datos<br />

son:<br />

• Enteros ( Integers o Fixed Numbers ): Como el término lo dice, representan números enteros, sin<br />

<strong>de</strong>cimales. Sirven para hacer referencia a objetos íntegros que no se pue<strong>de</strong>n <strong>de</strong>scomponer en<br />

<strong>de</strong>cimales. Ejemplos: 2, 1548, -895 – Ejemplos erróneos: 0.7, 2.54, 3.1416<br />

• Números reales ( Real numbers o Floated Numbers ): Son números reales que sí <strong>con</strong>tienen <strong>de</strong>cimales<br />

(hasta 16 en AutoCAD) Son mas pesados para el procesamiento, por lo que <strong>de</strong>bemos asegurarnos <strong>de</strong><br />

usarlos únicamente don<strong>de</strong> realmente se necesiten. Ejemplos: 2.54, 3.1416, 0.1256548754<br />

• Ca<strong>de</strong>nas <strong>de</strong> valores (Strings): Esto se podría traducir como <strong>simple</strong>mente texto. Se usan para escribir<br />

texto y se encierran en comil<strong>la</strong>s. Aunque se pue<strong>de</strong>n usar números, estos no tienen verda<strong>de</strong>ro valor<br />

numérico, por lo que no se <strong>de</strong>ben usar para operaciones matemáticas. Ejemplo: “Esto es una ca<strong>de</strong>na <strong>de</strong><br />

texto <strong>de</strong> 44 caracteres”<br />

• Valores Booleanos (Booleans): Son <strong>con</strong>diciones <strong>de</strong> verdad que hacen posible que nuestro programa<br />

tome <strong>de</strong>cisiones, <strong>de</strong>pendiendo <strong>de</strong> los resultados <strong>de</strong> un análisis o una operación. Existen dos valores,<br />

Verda<strong>de</strong>ro o Falso, los cuales se expresan en <strong>AutoLISP</strong> como T (True) o nil (False) don<strong>de</strong> True equivale a<br />

que se ha cumplido una <strong>con</strong>dición requerida y nil equivale al no cumplimiento <strong>de</strong> esa <strong>con</strong>dición.<br />

Ejemplo: Si el valor <strong>de</strong> <strong>la</strong> variable DIAM1 es mayor a 1, entonces trazar el círculo, si no, fin <strong>de</strong>l<br />

programa.<br />

• Listas (Lists): Son el fundamento <strong>de</strong> <strong>AutoLISP</strong>. Correspon<strong>de</strong>n a valores enca<strong>de</strong>nados o “enganchados”<br />

como si se tratara <strong>de</strong> vagones en un tren (Gracias a Dave Espinoza por el ejemplo tan c<strong>la</strong>ro al respecto).<br />

En un tren tenemos una máquina o locomotora que siempre va al frente, posteriormente tenemos<br />

tantos vagones como se requieran, <strong>de</strong> los cuales uno <strong>de</strong> ellos siempre irá al final. En <strong>AutoLISP</strong> <strong>la</strong>s listas<br />

correspon<strong>de</strong>n a listas <strong>de</strong> valores o variables organizadas y estructuradas. Es posible recuperar los<br />

valores <strong>de</strong> cada “vagón” para el cálculo y trabajo <strong>de</strong> programación.<br />

Hasta ahora hemos analizado los fundamentos principales <strong>de</strong> LISP. En <strong>la</strong> siguiente parte comenzaremos a<br />

programar. Así es... <strong>con</strong> estos fundamentos básicos y nuestro <strong>con</strong>ocimiento <strong>de</strong> AutoCAD ya podremos realizar<br />

pequeños comandos para ir probando su funcionalidad en AutoCAD.<br />

Como siempre, siéntanse libres <strong>de</strong> expresar sus dudas y escribir a natanvg@gmail.com<br />

__<br />

Natán Vil<strong>la</strong>rreal<br />

CAD Manager<br />

Diseño, Coppel S.A <strong>de</strong> C.V.<br />

natanvg@gmail.com<br />

Con información <strong>de</strong> Wikipedia.com<br />

LISP: http://es.wikipedia.org/wiki/Lisp<br />

<strong>AutoLISP</strong>: http://es.wikipedia.org/wiki/Autolisp

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!