Acerca Del Lenguaje de Programación AutoLisp
Acerca Del Lenguaje de Programación AutoLisp
Acerca Del Lenguaje de Programación AutoLisp
AutoLISP es un lenguaje de alto nivel, potente y flexible, muy apropiado para aplicaciones CAD. Es una adaptacin del lenguaje LISP (LISt Processing: Procesado de Listas) que se desarroll en los aos cincuenta para la investigacin de Inteligencia Artificial, basado en listas y smbolos, elementos fundamentales de AutoCAD lo que permite aadir nuevos comandos de una forma fcil y accesible. Una de las caractersticas principales de AutoLISP es el acceso a la base de datos de un dibujo de AutoCAD. La base de datos de AutoCAD se compone de toda la informacin del dibujo en el cual nos encontramos trabajando: ubicaciones de las entidades, capas, estilos de texto, etc. Mediante AutoLISP se puede obtener datos de esa base de datos o modificarla de acuerdo a nuestras necesidades. Los programas creados en AutoLISP son archivos de texto con extensin *.LSP que se pueden crear desde el Editor de VisualLisp incorporado en AutoCAD o desde cualquier otro editor de textos, ya sea desde el NOTEPAD de WINDOWS u otras aplicaciones gratuitas o de pago para este fin. Personalmente recomiendo Crimson Editor, en su versin Portable y gratuita, puedes descargar la aplicacin desde ste enlace o ste otro. AutoCAD cuenta con un intrprete interno que es el que se encarga de evaluar los programas escritos por el usuario; para eso se debe cargar el programa en la memoria de AutoCAD mediante el comando APPLOAD, mediante la carga, el intrprete evala la sintaxis del programa escrito y si encuentra un error en l, procede a informarlo mediante un mensaje que se muestra en la barra de comandos el cual indica el error generado y el bloque de instruccin que lo contiene. De esta manera le permite al usuario revisar y corregir las instrucciones creadas, hasta que se cargue sin ningn problema, aunque no asegura que el programa en plena ejecucin funcione de una manera correcta por lo que se debe ejecutar utilizando todas las instrucciones posibles. La carga de una aplicacin LISP solo tiene efecto para la sesin actual, si se inicia un nuevo dibujo o se sale de AutoCAD, la aplicacin LISP desaparece de la memoria, debindose cargar nuevamente. Debido a esto AutoCAD proporciona la manera de hacer que las aplicaciones se carguen de una manera automtica, debiendo para ello adicionar una instruccin con la funcin AUTOLOAD, en archivo ACAD.LSP. Ejem: (autoload "milisp" '("milisp")). En resumen AutoLISP es lenguaje muy potente y verstil que nos permitir reducir el tiempo empleado en la generacin de nuestros dibujos, ya que los nuevos comandos creados pueden ser utilizados en cualquier momento.
Si ests siguiendo este curso es porque quiz habrs tenido la oportunidad de observar el cdigo de una aplicacin lisp y habrs salido ms mareado de que cuando empezaste. Djame decirte que no tienes nada que temer, programar en AutoLisp es sumamente sencillo y no necesitas tener una inteligencia superior para hacerlo, eso s, necesitas mucha constancia, practica y deseo de mejorar tus conocimientos (internet, libros, etc). En este tema veremos como es una estructura de un programa lisp y cmo trabaja para hacer "lo que deseamos que haga en nuestro CAD". En primer lugar djame decirte que para crear un nuevo comando (rutina lisp) debes de ser tu quien escriba todas las llamadas (funciones) que ste necesita, lo menciono porque en otros lenguajes de programacin como por ejemplo Visual Basic, el sistema ayuda a escribir muchos de ellos. Bien, una rutina lisp es en realidad una funcin que a su vez tiene muchas otras funciones (depende de la complejidad de la rutina), la estructura de una funcin bsica tiene como contenedor a dos parntesis (abertura y cierre), por ejemplo: (alert "ConstrucGeek") El cdigo escrito en la lnea anterior representa una rutina, un programa, escribe esa lnea en la lnea de comandos de AutoCAD y habrs creado tu primera rutina siguiendo este curso. Como habrs notado la rutina anterior tiene un parntesis de abertura y otro de cierre, son necesarios ambos, de lo contrario la rutina estara mal estructura y generara un error, prueba escribiendo la misma rutina omitiendo el parntesis final (de cierre). El texto alert es el nombre de una funcin AutoLisp cuya funcin, valga la redundancia es mostrar un mensaje de alerta en la pantalla de AutoCAD en forma de cuadro de dilogo. El texto "ConstrucGeek" es un texto que bien hubiera sido cualquier otro, este texto es necesario para la funcin ALERT, porque como hemos visto arriba, esta funcin necesita un mensaje para mostrar en pantalla. A estos textos necesarios por las funciones se les llama "Argumentos". En este caso el texto "ConstrucGeek" va entre comillas porque es un argumento con valor de cadena de texto "string", ms adelante veremos los diferentes tipos de valores, por ahora prueba escribiendo la misma lnea de cdigo, pero sin las comillas en el texto "ConstrucGeek" de la siguiente manera: (alert ConstrucGeek) AutoCAD te mostrar el siguiente mensaje: ; error: bad argument type: stringp nil Este mensaje indica que el tipo de argumento que se le ha dado a la funcin ALERT es erroneo, que est necesitando una cadena de texto (stringp) y no lo encuentra (nil = nulo o no existe).
En resumen la estructura de una rutina lisp contiene todos estos datos, los cuales iremos viendo a medida que se desarrolla el curso:
Lista: Que contiene: Parntesis de apertura, espacios y parntesis de cierre que constituyen el lmite de accin de los programas. Elemento: Cualquier componente de una lista. Smbolo: Elementos sin un valor concreto como una variable. Enteros: Valores numricos sin punto decimal. Reales: Valores numricos con punto decimal. Cadenas: Valores de texto que deben de ir entre comillas.
Estimado usuario como podrs ver la unidad bsica de programacin en AutoLisp es slo dos parntesis en los cuales se escriben las funciones con sus argumentos, a medida que la rutina va creciendo, tambin va creciendo el nmero de parntesis de apertura y cierre, incluso algunos parntesis van dentro de otros. Lo importante es partir desde esta unidad bsica e ir generando rutinas complejas y avanzadas.
En el tema anterior habiamos creado una funcin que nos mostraba un mensaje mediante un cuadro de dilogo en la ventana de AutoCAD, esta vez crearemos una funcin que nos permitir mostrar otro mensaje, pero esta vez en la lnea de comandos. En la lnea de comandos de AutoCAD escribe lo siguiente:
(princ "ConstrucGeek")
Podrs observar que en la lnea de comandos, AutoCAD te devuelve el siguiente mensaje: ConstrucGeek"ConstrucGeek" Lo hace porque la funcin PRINC, tiene por finalidad mostrar un mensaje en la lnea de comandos de AutoCAD, generalmente para informar al usuario de alguna situacin de la rutina, por ejemplo:
(princ "Se modificaron 4 textos")
Se modificaron 4 textos"Se modificaron 4 textos" Como podrs observar, el mensaje se repite dos veces, lo cual no se debe a un error, la funcin PRINC devuelve el mensaje de esa manera, para "limpiar" el mensaje deberemos de escribir nuevamente la funcin PRINC sola, de esta manera:
(princ "Se modificaron 4 textos")(princ)
A continuacin iremos ms all y utilizaremos otra funcin sumamente importante y que hace la esencia de la programacin en s: El uso de variables. A continuacin escribe lo siguiente en la lnea de comandos de AutoCAD.
(setq texto "Se modificaron 4 textos")(princ texto)(princ)
Como puedes ver, en la lnea de cdigo de arriba estamos utilizando una nueva funcin llamada SETQ, esta funcin est encargada de crear una variable y almacenar un valor cualquiera en ella, la razn principal de usarla es que en la programacin "casi nada" es constante. Antes de continuar, te explicar la lnea de cdigo anterior, en primer lugar damos inicio a nuestro cdigo abriendo un parntesis (ya conoces que esto es la base de este lenguaje), escribimos la funcin SETQ para indicar que deseamos crear una variable, la nueva variable se llamar texto y el valor que esta variable tendr ser una cadena de texto siguiente: "Se modificaron 4 textos". Los dos procedimientos siguientes: (princ texto)(princ), nos periten mostrar el valor de la variable y limpiar el resultado de la repeticin de informacin. A continuacin crearemos otra funcin que sumara dos valores, la lnea de cdigo que escribirs en la lnea de comandos es la siguiente:
(setq valor1 5)(setq valor2 3)(setq resultado (+ valor1 valor2))(princ resultado)(princ)
En esta lnea la funcin SETQ est siendo utilizada para crear dos variables, valor1 y valor2 y almacenar los valores 5 y 3 respectivamente. Posteriormente utilizamos nuevamente SETQ para crear una nueva variable llamada resultado que almacenar la suma de las dos variables, aqu utilizamos una nueva funcin, la funcin suma, indicada por el signo +. El signo ms es un operador que como su nombre indica sirve para sumar dos datos, tambin se puede usar directamente sin variables, por ejemplo (+ 5 3), as como con "+" puedes sumar, tambin puedes multiplicar (*), dividir (/), etc. Estas funciones de Operadores las conocers posteriormente en este curso. Habrs notado que a medida que avanzamos, son muchos ms los parntesis y sub parntesis que usamos en nuestros ejemplos, si has abierto alguno de los archivos de las
rutinas lisp que compartimos en ConstrucGeek, habrs observados que son numerosas lnea de cdigo y mucho ms los parntesis que utilizamos. Debido a esto es que daremos un paso ms y agruparemos todos estos parntesis dentro de una funcin principal la cual podremos llamar desde la lnea de comando de AutoCAD, tan slo con encerrarla dentro de unos parntesis, esta vez no programaremos es una sola lnea de cdigo, sino que lo haremos en varias para as ordenar nuestra programacin, es un buen habito no solamente programar en varias lnea sino utilizar sangras en ellas, para resaltar las estructuras. Por ejemplo la lnea de cdigo siguiente:
(setq valor1 5)(setq valor2 3)(setq resultado (+ valor1 valor2))(princ resultado)(princ)
La transformaremos en esto:
1. (defun minuevafuncion() 2. (setq valor1 5) 3. (setq valor2 3) 4. 5. (setq resultado (+ valor1 valor2)) 6. (princ resultado) 7. 8. (princ) 9. )
Del ejemplo anterior observars que estamos utilizando una nueva funcin denominada DEFUN, esta nueva funcin nos permite definir (crear) una nueva funcin de usuario, esta funcin encerrar a otras funciones, aqu es vlido escribir en varias lnea para un mayor entendimiento de programa, todo lo escrito formar parte de la funcin principal. Las dems funciones ya han sido analizadas y por lo tanto conocemos que hace cada una de ellas. Escribe todo lo anterior en un archivo de texto plano utilizando el bloc de notas u otro editor gratuito de pago y gurdalo con el nombre de "MIPRIMERAFUNCION.LSP" en la carpeta que desees, por ejemplo "ejemplos de mi curso".
Bien, ya tenemos nuestra rutina creada, esta rutina es una funcin denominada "minuevafuncion" que nos muestra el resultado de la suma de dos variables en la lnea de comandos de AutoCAD y a la cual hemos almacenado en un archivo de texto denominado MIPRIMERAFUNCION.LSP. Ahora procederemos a cargar la rutina desde AutoCAD para ello debers de ejecutar el siguiente comando APPLOAD. Este comando carga un cuadro de dilogo con el cual debers de seleccionar el archivo MIPRIMERAFUNCION.LSP creado, una vez seleccionado puedes hacer doble clic en el para cargarlo o hacer clic en el botn LOAD (Cargar). Si la carga fue correcta (AutoCAD evala la integridad de la rutina) AutoCAD te mostrar un mensaje en la lnea de comandos indicndote que la carga fue satisfactoria, de lo contrario te indica que la carga no fue correcta y cual pudo haber sido el error, de esta manera te da una luz del error de programacin que puedas tener en tu rutina. Si la carga fue correcta entonces cierra el cuadro de dilogo con el botn CLOSE, de lo contrario abre el archivo y verifica que su contenido sea el mostrado en el ejemplo, de no estarlo copia nuevamente o escrbela nuevamente tal y como el ejemplo y vuelve a realizar la ejecucin del comando APPLOAD. Una vez cerrado el cuadro de dilogo digita en la lnea de comandos los siguiente, sin las comillas "(minuevafuncion)", podrs observar que AutoCAD te muestra un resultado, es el nmero 8, este nmero ocho el resultado de la suma de las dos variables con valores 5 y 3 respectivamente. Prueba abriendo el archivo lisp, modificando el 5 y el 3 por otros valores, guarda el archivo y crgalo nuevamente en AutoCAD con APPLOAD, vuelve a llamar a la funcin con parntesis y veras que el resultado es otro. Hasta aqu has creado tu primera funcin principal que se puede llamar desde AutoCAD, los comandos de AutoCAD tambin son funciones, pero con carcter de comando, es decir estas funciones pueden ser llamadas desde AutoCAD pero sin ser necesario el uso de los parntesis para ello.
Notars que antes del nombre de la funcin "minuevocomando" se ha agregado el sufijo "c:", este sufijo es el que le da carcter de comando a una funcin, cuando la funcin tiene carcter de comando, puede ser llamada fcilmente en AutoCAD con slo digitar el nombre de la misma. Escribe el ejemplo anterior en el bloc de notas u otro editor de tu preferencia y gurdalo con el nombre de MIPRIMERCOMANDO.LSP Usa el comando de AutoCAD APPLOAD para cargar el archivo recientemente creado de la manera que se te ha indicado lnea arriba, si la carga fue satisfactoria, escribe en la lnea de comando el nombre que le has dado a tu nuevo comando, en el ejemplo: minuevocomando. El comando te muestra el nmero 8, que como ya sabes es el resultado de las operaciones internas que realiza este comando. Con este ejemplo habrs creado tu primer comando en AutoCAD siguiendo este curso, los comando creados pueden tener mucho o poco cdigo, dependiendo de lo que quieras lograr, si abres un archivo LSP y ves que las lneas de cdigo son innumerables, tranquilo, todo ello se logr escribir lnea por lnea y con muchos das de dedicacin, lo importante es saber que funciones utilizar y tener la lgica para poder utilizarlas correctamente. Por lo pronto felictate porque si antes de empezar este curso no tenas ni idea de cmo programar el AutoLISP, a estas alturas ya has creado un nuevo comando y poco a poco seguirs avanzado con nuevas funciones que te ayudarn a conseguir lo que desees automatizar.
utilizaremos ejemplos prcticos en los cuales haremos uso de muchas funciones y te explicare cada lnea de cdigo para que as quede claro por qu se utilizan las funciones, as cuando desarrolles tus propios comandos sabrs a que funcin echar mano para obtener los resultados que buscas. A continuacin podrs observar diferentes tipos de funciones, las cuales he ordenado para conocer que puede hacer cada una de ellas, pero despus de este captulo, crearemos comandos de ejemplo, en los cuales haremos uso de funciones de todo tipo que te permitirn tener una visin ms general de cmo lograr crear un nuevo comando de una manera eficiente. Por lo pronto cntrate en cada uno de los temas siguientes y tratar de practicar al mximo cada uno de los ejemplos que se brindan en ellos.