Laboratorio de cómputo de ingeniería Curso de AutoLISP CONTENIDO PREÁMBULO ESTRUCTURA GENERAL DEL AUTOCAD R12 ESTRUCTURA DE DIRECTORIOS REQUERIMIENTOS DE AUTOLISP 5 5 6 7 OBJETIVOS 7 INTRODUCCIÓN 7 ALCANCES Y LIMITACIONES DEL AUTOLISP 8 TIPO DE VARIABLES EN AUTOLISP 8 LISTAS: ÁTOMOS: NOTACIÓN DE VARIABLES EN AUTOLISP VALIDACIÓN DE VARIABLES EN AUTOLISP SET: SETQ: CREACIÓN DE PROGRAMAS SUBRUTINAS, COMANDO COMMAND: INSTRUCCIONES PARA CREAR PROGRAMAS Y SUBRUTINAS DEFUN : A) CUANDO SE DEFINE EL NOMBRE DE UN PROGRAMA: B) CUANDO DE DEFINE ALGUNA SUBRUTINA: REPEAT: WHILE: Capacitación 9 9 9 10 10 11 12 13 14 14 14 15 15 16 Página 1 Laboratorio de cómputo de ingeniería MANEJO DE MENSAJES ALERT : ( ALERT "MENSAJE"). PROMPT : ( PROMPT "MENSAJE” ) FUNCIONES EN AUTOLISP FUNCIONES DE ENTRADA DE DATOS GETANGLE: (GETANGLE "DAME DOS PUNTOS") GETORIENT: (GETANGLE "DAME DOS PUNTOS") GETDIST: (GETDIST "DAME UNA DISTANCIA") GETPOINT : (GETPOINT "DAME UN PUNTO") GETREAL : (GETREAL "NÚMERO") GETINT : (GETINT "LETRERO DE TEXTO") SSGET: (SETQ VARIABLE (SSGET)) GETVAR : (GETVAR "VARIABLE") GETSTRING: (GETSTRING "TEXTO") EN GENERAL: FUNCIONES MATEMÁTICAS FUNCIONES BASICAS A) REFERENTES AL LUGAR QUE OCUPAN LOS DATOS EN UNA LISTA CAR: CDR: LAST: B) REFERENTES A LAS CARACTERÍSTICAS DE UNA LISTA LENGTH : FUNCIONES ARITMÉTICAS ABS : EXP : EXPT : GCD : LOG: MAX : MIN : REM : SQRT: (ABS N) (EXP N) (EXPT N P) (GCD A B C) (LOG N) (MAX A B C ...) (MIN A B C ...) (REM X Y) (SQRT X) FUNCIONES TRIGONOMÉTRICAS ATAN : COS : SIN : Capacitación (ATAN X) (COS X) (SIN X) Curso de AutoLISP 16 16 17 18 18 18 18 18 19 19 19 19 20 20 20 21 22 22 22 22 22 22 22 23 23 23 24 24 24 24 25 25 25 25 25 26 26 Página 2 Laboratorio de cómputo de ingeniería FUNCIONES DE TIPO RELACIONAL Y CONDICIONAL IF : (IF CONDICION VERDERO FALSO) FUNCIONES DE TIPO LÓGICO (AND, OR) AND: OR: (STRCASE CADENA ARGUMENTO) (STRCAT CADENA1 CADENA2) (STRLEN TEXTOS...) (SSLENGTH SS) FUNCIONES DE CONVERSIÓN ASCII (ASCII CADENA) ATOF (ATOF TEXTO) ATOI (ATOI TEXTO) CHR (CHR NUMERO) FIX (FIX NUMERO) FLOAT (FLOAT NUMERO) ITOA RTOS (RTOS NUMERO FORMATO DECIMALES) FUNCIONES DE ENTRADA Y SALIDA OPEN CLOSE (CLOSE ARCHIVO) FINDFILE (FINDFILE ARCHIVO) LOAD (LOAD"PROGRAMA.LSP") READ (READ CADENA) READ-LINE (READ-LINE ARCHIVO) WRITE-LINE (WRITE-LINE ARCHIVO) FUNCIONES DE DEPURACIÓN TRACE (TRACE FUNCIÓN) UNTRACE (UNTRACE FUNCIÓN) Capacitación 26 26 27 27 27 FUNCIONES DE CADENA STRCASE : STRCAT : STRLEN: SSLENGTH: Curso de AutoLISP 28 28 28 29 29 29 29 29 29 30 30 30 30 30 31 31 31 31 32 32 32 32 33 33 33 Página 3 Laboratorio de cómputo de ingeniería FUNCIONES VARIAS TEXTSCR (TEXTSCR) GRAPHSCR (GRAPHSCR) VER (VER) QUIT, EXIT Capacitación Curso de AutoLISP 33 33 33 33 33 Página 4 Laboratorio de cómputo de ingeniería Curso de AutoLISP CURSO DE AUTOLISP PREÁMBULO ESTRUCTURA GENERAL DEL AUTOCAD R12 El presente desarrollo tiene como objetivo el conocer ampliamente la forma en que están interrelacionados los archivos del programa, directorios, menús, utilerías e iconos; todo esto para facilitar la familiarización del usuario con el paquete y poderle permitir detectar errores y fallas, así como una ágil localización de las mismas. Las extensiones manejadas por AUTOCAD, son las siguientes: *.CFG: Parámetros de configuraciones del programa. *.DOC: Información acerca del programa, tal como novedades, actualizaciones y consejos previos por parte de AUTODESK puede citar también a los archivos *.TXT. *.HLP: Información de ayuda al usuario. *.MNU: Menús adicionales, disponibles para ser usados. (Además de las extensiones *.MND y *.MNx) *.DWG: Archivos de trabajo o de dibujo. *.LSP: utilerías y programas en AUTOLISP. *.BAK: Respaldos de los archivos de trabajo. * SHX: Tipos de letras. *.DRV: Drivers y accesorios para la configuración del paquete *.SLD: Archivos no editables con imágenes planas de dibujos, como los iconos de los pull down menús. Algunos archivos importantes, son todos aquellos del formato ACAD*.*, ya que se trata de archivos que cuentan con parámetros de funcionamiento propios del programa, se pueden citar los siguientes: ACADR12.BAT: Es el archivo que ejecuta al ACAD.EXE, cargando en previamente las opciones y rutas de búsqueda de archivos. memoria ACAD.CFG: Es el archivo en el que principalmente se guarda la información referente a la configuración del programa, es aquí donde se encuentran los parámetros que se seleccionan al momento de instalar el paquete o bien cuando se ejecuta el comando ("CONFIG"). Capacitación Página 5 Laboratorio de cómputo de ingeniería Curso de AutoLISP ACAD.DWG: Es el archivo en el que se encuentran las opciones que por default siempre están activadas al iniciar un dibujo nuevo, tales como la opción de desactivar las marcas de la pantalla con el comando BLIPMODE (OFF), para evitar llenar nuestra pantalla de marcas (cruces) cada vez que se ejecute algún comando (EJ. Line) ACAD.ERR: Archivo que es creado cuando se produce un error de funcionamiento del programa, se trata de un archivo que es posible editarlo desde sistema operativo para conocer cual fue la falla. Por lo general se crea y/o modifica cuando se realizan multitareas (OS SHELL) o errores atribuibles a la estructura física del equipo o del paquete, tales como errores al guardar información que provocan el paro drástico del sistema. ACAD.EXE: Archivo ejecutable con el que corre el programa, debiendo de ser invocado por el ACADR12.BAT para dar de alta las configuraciones de rutas de búsqueda de información. ACAD.HLP: Es el archivo general. en el que se encuentran las ayudas principales y de tipo ACAD.HDX: Información referente a la lista de comandos. ACAD.LIN: Archivo que contiene la información referente a los tipos de línea manejados por AUTOCAD. ACAD.MNU: Es en este archivo donde se encuentra la información referente a los "Pull Down Menus" (nombres, sub-menus, iconos, opciones) y algoritmos de validación del Mouse o tableta digitalizadora. ACAD.PAT: Archivo donde se localiza la información referente a los patrones de ashurado. ACADR12.LSP: Archivo en el que se encuentra la información referente a utilerías y programas en AUTOLISP que AUTOCAD siempre carga cada vez que se inicia un dibujo nuevo o se abre algún archivo. P.ej: Personalización de comandos. ESTRUCTURA DE DIRECTORIOS ACADCFG: Subdirectorio que contiene la información de los parámetros de configuración del paquete. ACADDRV: Subdirectorio que contiene la información referente a los dispositivos auxiliares de la configuración (P.ej: Listas de impresoras, tipos de mouses, etc.) ADS: Subdirectorio que contiene la información referente a ADS (Auto Drawing Surface). Capacitación utilerías hechas en Página 6 Laboratorio de cómputo de ingeniería Curso de AutoLISP FONTS: Es el subdirectorio donde se encuentra la información referente a estilos y tipos de letras. SUPPORT: Es el subdirectorio en el cual se encuentran los principales archivos que requiere el programa para poder funcionar óptimamente. REQUERIMIENTOS DE AUTOLISP Para un mejor aprovechamiento del presente curso, se requiere el conocimiento del funcionamiento general del programa AUTOCAD, su estructura; así como el dominio del 80% de los comandos de dibujo más empleados en 2 y 3 dimensiones. OBJETIVOS • Extender las posibilidades gráficas del AUTOCAD para fines prácticos, como una herramienta auxiliar en el diseño y solución de problemas. Dar a conocer a los alumnos los alcances y las limitaciones de la programación en AUTOLISP. • Al término del presente curso, los alumnos serán capaces de diseñar aplicaciones especificas de acuerdo a sus necesidades gráficas y de dibujo en AUTOCAD. INTRODUCCIÓN AUTOLISP es un lenguaje de programación derivado del lenguaje LISP. Este lenguaje es utilizado para generar rutinas orientadas al uso especifico del AUTOCAD. Permite desarrollar programas y funciones para el manejo de entidades de tipo gráfico. Los programas hechos en AUTOLISP aumentan los comandos y aplicaciones del AUTOCAD, creando así una solución optima para cada problema en particular, desde el simple trazo de una línea hasta el diseño de algún plano o pieza, llegando a cálculos complejos, conviertiéndose en gran ayuda para las aplicaciones en ingeniería. Entre las aplicaciones más notables del AUTOLISP se pueden citar: • Dibujo de figuras bidimensionales con características específicas; • Creación de objetos tridimensionales; • Generación de gráficas de funciones basándose en ecuaciones; • Cálculos de áreas y tablas de datos, combinación de los comandos de dibujo para realizar determinado tipo de tareas. Capacitación Página 7 Laboratorio de cómputo de ingeniería Curso de AutoLISP ALCANCES Y LIMITACIONES DEL AUTOLISP Como puede darse cuenta el usuario, dicho lenguaje de programación es propio del programa de CAD de AUTODESK (AUTOCAD), por lo que su uso se limita a implementar aplicaciones específicas de acuerdo a las necesidades del usuario a un problema de diseño o de dibujo determinado, valiéndose de todas la funciones y herramientas de dibujo que proporciona el AUTOCAD, logrando obtener soluciones muy poderosas dentro de este ambiente. En general, dicho lenguaje equivale a realizar las denominadas "MACROS", pero en un ambiente gráfico, donde se pueden automatizar series de labores y tareas muy repetitivas con programas simples que ahorran tiempo de trabajo en dibujo y proporcionan una mayor exactitud. Para aquellos usuarios que están muy familiarizados con la programación en los lenguajes BASIC y C, el AUTOLISP les resultara muy semejante y de gran simplicidad, ya que su estructura, forma de validar variables, algoritmos y secuencias lógicas son muy parecidas; con las distinción de que aquí por lo general se emplearan artificios para obtener elementos de dibujo de AUTOCAD, tales como líneas, arcos, polilíneas, elipses, etc. Hay que tomar en cuenta que el número más pequeño que se puede manejar dentro de AUTOLISP es: -32768 y el más grande: +32767, lo cual se debe de tener siempre presente cuando se editen fórmulas o se validen variables, ya que de existir un número fuera de ese rango, se cerrara a los valores anteriormente mencionados. En comparación con otros lenguajes de programación, en AUTOLISP no se nombran los renglones de programa con algún número que los anteceda para registrarlos (P.ej: BASIC, FORTRAN), sino que los programas se efectúan de acuerdo al orden en que están invocadas sus subrutinas y a su vez, en el orden en que se escriben los renglones. TIPO DE VARIABLES EN AUTOLISP Antes de cualquier cosa, hay que tener en cuenta que AUTOLISP difiere entre el uso de las mayúsculas y minúsculas, siendo muy importante considerar esto cuando se definan variables o nombres de subrutinas. Por lo que se recomienda que siempre se escriban este tipo de datos con MAYÚSCULAS para facilitar la programación y evitar posibles confusiones en el uso de la notación. El espacio para almacenar variables de tipo alfanumérico, es decir de texto es ilimitado, ya que AUTOLISP registra dicha información en forma dinámica, siendo recomendable no abusar en la extensión de dichos contenidos, para evitar complejidad en el manejo de la información. Capacitación Página 8 Laboratorio de cómputo de ingeniería Curso de AutoLISP En cuanto a las variables numéricas, se pueden tener hasta 14 cifras significativas de precisión. Los principales tipos de variables empleados, y sus formas de expresión más sencillas son los siguientes: LISTAS: Son cadenas de elementos, entre paréntesis, separados entre sí por espacios. Dichos elementos pueden ser variables de tipo numérico, alfanumérico, o validaciones de las mismas. Ej. (A B C D E) Es una lista que contiene 5 elementos, que son: A, B, C, D y E, separados cada uno de ellos entre paréntesis y todos ellos entre paréntesis. Aquí dichos elementos pueden ser variables. Es indispensable saber que todas las validaciones de variables en AUTOLISP siempre se ejecutaran a manera de LISTA, ya que los datos almacenados en una variable pueden estar separados por espacios y ser más de uno sólo. ÁTOMOS: Son por lo general los elementos de las listas, y se identifican por que no existen espacios entre sus caracteres. Ej. (ABC DEF) Es una lista formada por dos tomos (ABC y DEF) de 3 caracteres cada uno. NOTACIÓN DE VARIABLES EN AUTOLISP En cuanto al cálculo y realización de operaciones matemáticas que se refiere, el AUTOLISP requiere que las fórmulas se editen considerando la notación polaca inversa. Dicha notación, consiste en que al momento de realizar una operación, primero se edita el operando (suma, resta, multiplicación, división), y luego los números o variables a intervenir, cabe señalar que dicho criterio debe de ser por parejas separadas por paréntesis. Como se verá más adelante, la instrucción SETQ nos permite guardar en una variable el contenido de otra o de alguna serie de operaciones, y se vuelve indispensable su uso, cuando se editan fórmulas. Por ejemplo, si se quisiera en AUTOLISP dar la ecuación de la recta, que es Y = M*X + B, la línea de nuestro programa que incluye dicha operación quedaría de la siguiente manera: (SETQ Y (+ (* M X) B)) Capacitación Página 9 Laboratorio de cómputo de ingeniería Curso de AutoLISP Hay que notar, que para editar las fórmulas, hay que hacer un uso muy extensivo y apropiado de los paréntesis para que la fórmula exprese lo que necesitamos. En este caso, en el primer juego de paréntesis se hace el producto de M * X, en el segundo se suma el resultado del primero al valor de la variable B, y posteriormente en la variable Y se almacena toda la operación completa. Otro ejemplo, puede ser el hecho de que se requiera emplear la fórmula para el cálculo de la pendiente de la recta, M = (Y2 - Y1) / (X2 - X1), la línea de programación en AUTOLISP es la siguiente: (SETQ M (/ (- Y2 Y1) (- X2 X1))) Es realmente importante, notar que en AUTOLISP, toda línea de programación inicia con un paréntesis y concluye con otro, pudiendo existir a su vez combinaciones de instrucciones dentro de otras, respetando la sintaxis adecuada, tal y como se ve en el ejemplo anterior, en donde por paréntesis se separan las operaciones que se realizan, siendo 3 en total, cuyo resultado se almacena en la variable M. VALIDACIÓN DE VARIABLES EN AUTOLISP Se le conoce como validación, al proceso de almacenar determinada información en una variable, ya sea de tipo numérico o de texto (alfanumérico). Dicha información a guardar puede ser un valor dado desde el programa por el usuario, o el resultado de alguna operación. (Ver los ejemplos anteriores). Cuando no se ha definido el valor de una variable, AUTOLISP asume que su contenido es "NIL", que equivale a nulo, es decir, que no se ha realizado el proceso de validación de la misma; entendiendo a "NIL" como el hecho de que dicha variable ni siquiera tiene el valor CERO y mucho menos alguno de cualquier otro tipo. Cuando por algún error se edita mal alguna fórmula, escribiendo mal el nombre de una variable, dicha variable errónea estará validada con "NIL" (puesto que el usuario o el programador no la han definido con un valor determinado), lo que impedirá realizar operaciones de tipo numérico con ella, causando errores en nuestro programa. Por lo que se aconseja en las primeras líneas de nuestro programa definir los valores iniciales de las variables que se necesiten. Las instrucciones fundamentales que nos permiten dar valores a las siguientes: variables, son las SET: Es una instrucción que asigna el valor de una determinada expresión a un símbolo determinado. Capacitación Página 10 Laboratorio de cómputo de ingeniería Curso de AutoLISP Su sintaxis es la siguiente: (SET SIMBOLO EXPRESION) Donde el símbolo es el nombre de alguna variable, y expresión es alguna fórmula editada según los criterios vistos anteriormente o bien algún valor de tipo numérico indispensablemente. P.ej: si quisiéramos almacenar el valor "5" en la variable "A", la línea de nuestro programa es la siguiente: (SET A 5) El inconveniente de emplear esta instrucción consiste en que sólo se puede asignar valor a una variable por cada comando, es decir, por cada línea de programación, siendo este de tipo numérico exclusivamente (dato o fórmula). SETQ: Funciona de manera semejante a SET, pero con la diferencia de que permite validar varias variables al mismo tiempo, haciendo esto a la manera de una LISTA, pudiendo guardar textos en las variables. Su sintaxis es la siguiente: (SETQ SIMBOLO1 EXPRESION1 SIMBOLO2 EXPRESION2 ... ) Ej. Si se quisiera guardar el texto: "SALLE" en la variable "B", y el número "5" en la variable "A", empleando una sola línea, dicha línea de nuestro programa seria la siguiente: (SETQ A 5 B "SALLE") Aqui se tienen 4 átomos en una lista, donde con el comando SETQ realizamos la validación de las variables de interés por parejas, así que es importante considerar el orden que se emplea en escribir dicha información. Es importante notar, que si la palabra SALLE no se escribiera entre comillas en la línea de programación en vez de almacenar dicho texto en la variable "B", lo que haría seria: B=SALLE, donde SALLE es el nombre de alguna otra variable. Análogamente, si quisiéramos validar en una misma línea: A=1, B=2, C=3, nuestra línea de programación sería: (SETQ A 1 B 2 C 3) Capacitación Página 11 Laboratorio de cómputo de ingeniería Curso de AutoLISP CREACIÓN DE PROGRAMAS El archivo del programa se deber hacer en algún procesador de textos o editor de sistema operativo, salvándose en la modalidad de sólo texto con extensión *.lsp, un ejemplo puede ser el siguiente. ; UNIVERSIDAD LA SALLE ; PROGRAMA HECHO POR ..... (DEFUN C:NOMBRE() (ALGORITMOS O SECUENCIAS) ... ... ) En donde "NOMBRE" es el nombre con el cual deseamos que sea reconocido nuestro programa como un comando adicional del AUTOCAD, algoritmos y secuencias son procedimientos de programación que se requieran para inicializar una serie previa de instrucciones (tales como dar valores a variables, definir límites del dibujo, número de vistas, factores de textos o líneas, subrutinas, etc.) Los ";" empleados, nos ayudan a escribir notas o mensajes dentro de nuestro programa, que son ignorados al momento de ejecutar la aplicación. Esto con la finalidad de colocar comentarios tales como el nombre del autor, descripción del programa o sus rutinas, etc. Nótese la sintaxis requerida, cada línea de programa debe de llevar un paréntesis al inicio y otro al final, de manera semejante el paréntesis que indica el inicio de la rutina principal que contiene al nombre del programa, es cerrado al concluir este . Hay que considerar que cada subrutina que se emplee más adelante requerir a su vez de un paréntesis a su inicio, y otro a su terminación, al igual que líneas de programa que contengan fórmulas. Una vez hecho lo anterior, desde la línea de comandos de AUTOCAD, se llama al programa de AUTOLISP de la siguiente forma: (LOAD"NOMBRE.LSP") Y una vez que fue cargado, aparece en pantalla el nombre con el cual AUTOCAD lo reconoce, siendo éste el previamente definido por la función DEFUN C: NOMBRE Capacitación Página 12 Laboratorio de cómputo de ingeniería Curso de AutoLISP SUBRUTINAS, COMANDO COMMAND: Las subrutinas son partes de nuestro programa que nos permiten distribuir eficientemente los pasos o tareas que los forman, por ejemplo se pueden destinar subrutinas para definir valores fijos de variables, otras para pedir información al usuario, otras para hacer cálculos y otras para trazar entidades de dibujo. La sintaxis es muy semejante a la de la rutina principal, ya que aquí no se especificará la definición de un nombre de programa. Un ejemplo puede ser una subrutina que trace una línea a 2 puntos con coordenadas conocidas como 2,3 y 5,6: (LINEA1() (COMMAND "LINE" "2,3" "5,6" C) ) En donde (LINEA1() es el nombre de la subrutina, la siguiente línea indica a AUTOCAD las instrucciones a ejecutar desde la línea de comandos, de ahí el emplear la instrucción COMMAND, con la sintaxis requerida del comando en cuestión, tal como en esta ocasión lo es LINE: punto de inicio de la línea, un segundo punto y C que equivale a cancelar el comando (Control C). Es importante señalar, que entre los paréntesis que están después del nombre de la subrutina, se pueden escribir las validaciones de las variables que están interactivas entre el programa principal y las subrutinas, requiriendo una estricta sintaxis y orden en el listado de las mismas para lograr una ejecución eficiente del programa. Otra opción más fácil es dejar vacío ese espacio para que AUTOLISP reconozca automáticamente este tipo de variables, tal y como se hizo anteriormente. Análogamente, si se desea invocar desde AUTOLISP a cualquier otro comando de AUTOCAD, se requerir de usar COMMAND con la sintaxis adecuada del comando deseado, siendo posible emplear todos los comandos y funciones con las que se cuenta para dibujo, siempre y cuando no se empleen las formas abreviadas. (P.ej: Usar "L" por "LINE") Es importante notar lo anteriormente mencionado en cuanto a la sintaxis de los paréntesis, ya que AUTOLISP es un lenguaje limitado en cuanto a mensajes de errores de programa hacia el usuario, es decir, que en la mayoría de las ocasiones en que por alguna causa no corra algún programa, no se sabe exactamente en donde se encuentra la falla si no se ha tenido cuidado en revisar la sintaxis. Capacitación Página 13 Laboratorio de cómputo de ingeniería Curso de AutoLISP INSTRUCCIONES PARA CREAR PROGRAMAS Y SUBRUTINAS Como se mencionó anteriormente, un programa en AUTOLISP es un archivo en formato de texto con extensión. LSP, que se puede llamar en forma diferente que como se registra como comando de AUTOCAD, las instrucciones siguientes nos ayudan a trabajar con subrutinas y crear programas: DEFUN: Es la instrucción empleada en la validación de programas y sus respectivas subrutinas, es decir, le indica a AUTOLISP el nombre con el que se llama desde AUTOCAD un programa de LISP y los nombres de sus rutinas. a) Cuando se define el nombre de un programa: (DEFUN C:NOMBRE() : ) En donde NOMBRE, es el nombre con el que se va a llamar el programa dentro de AUTOCAD, es decir, el nombre como AUTOCAD lo registrar como comando adicional, pudiendo ser este, diferente del nombre del archivo en solo texto. Aquí, C: se refiere a un comando nuevo para AUTOCAD, no confundir con el prompt de algún drive de tipo disco duro. A esta rutina donde se define a nuestro programa, se le denomina RUTINA PRINCIPAL, y es ahí donde se alojan las instrucciones y comandos que se ejecutan primero, es conveniente escribir ahí validaciones de variables que nos sean indispensables. Las instrucciones que definen lo que hace nuestro programa de AUTOLISP, se incluyen donde se colocaron los puntos suspensivos y termina o se cierra el paréntesis que se abre desde el DEFUN, pudiéndose llamar alguna subrutina, P.ej: (DEFUN C:NOMBRE() (INICIO) : ) En éste último ejemplo, nuestro programa se llama NOMBRE, y lo primero que hace al ejecutarse, es ir a la subrutina INICIO y ejecutar las instrucciones ahí contenidas, posteriormente regresar a esta rutina (PROGRAMA PRINCIPAL) y ejecutar las instrucciones siguientes hasta concluirlas todas. Capacitación Página 14 Laboratorio de cómputo de ingeniería Curso de AutoLISP b) Cuando de define alguna subrutina: El tratamiento es semejante al anterior, pero ahora sin usar C: con el DEFUN. Ejemplos: (DEFUN INICIO() : ) Aquí se define una subrutina llamada INICIO, que contiene instrucciones determinadas de programa, pudiendo llamarse a otra subrutina dentro de ésta misma y así sucesivamente. Es conveniente señalar que no es adecuado llamar muchas subrutinas dentro de otras y así sucesivamente, ya que puede llegar un momento en que se pierda el control de lo que realmente está haciendo nuestro programa de AUTOLISP, ya que hay que recordar que una subrutina acaba hasta que se han ejecutado todas las instrucciones contenidas en ella, incluyendo por completo las subrutinas ahí alojadas. REPEAT: Instrucción que permite ejecutar veces, ejemplo: un proceso o subrutina un determinado número de (SETQ A 10) (SETQ B 100) (SETQ X 4) (REPEAT X (SETQ A (+ A 10)) (SETQ B (+ B 100)) ) En este ejemplo, se validan primero las variables A y B con 10 y 100 respectivamente, luego se ejecuta cuatro veces el proceso de incrementar A en 10 y B en 100, de tal forma que cuando termine el ciclo definido por el REPEAT, A valdrá 50 y B valdrá 500. Otro ejemplo, es repetir 3 veces una subrutina: (REPEAT 3 (PROCESO) ) Aquí es ejecutar 3 veces la subrutina llamada proceso. Capacitación Página 15 Laboratorio de cómputo de ingeniería Curso de AutoLISP WHILE: Funciona en forma semejante al REPEAT, pero efectúa algún ciclo sólo mientras se cumpla algún tipo de condicionamiento, P.ej: (SETQ A 1) (WHILE (<= A 10) : (SETQ A (+ 1 A)) En este ejemplo, el ciclo definido por los puntos suspensivos, se ejecuta siempre y cuando la variable A sea menor o igual a 10, por lo que es indispensable colocar dentro del proceso repetitivo a un contador, o a algún otro tipo de validación para la variable A, para que ésta cambie y la rutina no se efectúe en forma indefinida. MANEJO DE MENSAJES Dentro de AUTOLISP es posible mandar mensajes para ser leídos por el usuario de nuestros programas, habiendo varias formas de hacerlo: ALERT : ( ALERT "MENSAJE") Este comando activa una ventana dentro de AUTOCAD, conteniendo un mensaje que nosotros deseemos, ya sea para avisar el inicio o terminación de un programa, o bien para avisar al usuario de algún error o requerimiento de nuestro programa. Siendo necesario que el usuario presione el botón izquierdo del mouse en la ventana o presionar enter, para que ésta desaparezca. Un ejemplo puede ser el siguiente: Donde nuestro archivo de sólo texto se llama L0.LSP ; CURSO DE AUTOLISP ; ; ESTE PROGRAMA DIBUJA UNA LINEA DE LOS PUNTOS 2,3 A 5,6 Y ; DESPLIEGA UN MENSAJE DE AVISO CUANDO TERMINA. (DEFUN C:L0() (COMMAND "LINE" "2,3" "5,6" C) (ALERT "Fin del trazo de la línea") ) En este ejemplo, tenemos unas líneas al inicio de nuestro programa con comentarios que serán ignorados por AUTOCAD al momento de ejecutar nuestro programa. Capacitación Página 16 Laboratorio de cómputo de ingeniería Curso de AutoLISP Para cargarlo desde AUTOCAD, en la línea de comandos se escribe: (LOAD "L0"), y luego cada vez que se escriba en AUTOCAD L0, se ejecuta este programa que traza una línea y luego despliega una ventana con el mensaje: Fin del trazo de la línea PROMPT : ( PROMPT "MENSAJE” ) También despliega mensajes, pero no en una ventana como el ALERT, sino como líneas de texto que aparecen en el área de comandos de AUTOCAD al ejecutarse nuestro programa, se le puede incluir la variante \n que sirve para dejar una línea de separación entre cada mensaje que se despliega. Como ejemplo se puede modificar el ejemplo anterior, de la siguiente forma: ; CURSO DE AUTOLISP ; ; ESTE PROGRAMA DIBUJA UNA LINEA DE LOS PUNTOS 2,3 A 5,6 Y ; DESPLIEGA UN MENSAJE DE AVISO CUANDO INICIA Y CUANDO TERMINA. (DEFUN C:L0() (PROMPT "\n DIBUJO DE 1 LINEA" ) (COMMAND "LINE" "2,3" "5,6" C) (ALERT "Fin del trazo de la línea") (PROMPT "\n FIN DEL PROGRAMA" ) ) En este ejemplo se escribe un mensaje al inicio y al final de nuestro programa, además del trazo de una línea. Capacitación Página 17 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES EN AUTOLISP FUNCIONES DE ENTRADA DE DATOS Son instrucciones que nos permiten pedir información para poderla almacenar posteriormente en alguna variable. Dicha validación se hará siempre empleando la instrucción SETQ vista anteriormente, donde se escribe en nuestra línea de programa primero SETQ y el nombre de la variable deseada, luego la debida instrucción de entrada de datos con algún comentario entre comillas, que es el que aparecerá como mensaje en la línea de comandos de AUTOCAD. La importancia de todas estas instrucciones consiste en que son la manera en que se puede introducir información por el usuario una vez que se esta ejecutando algún programa de AUTOLISP, para ser almacenada en alguna variable. De acuerdo al tipo de información que se necesite, es la instrucción que se empleará, pudiendo ser alguna de las siguientes: GETANGLE: (GETANGLE "Dame dos puntos") Instrucción que nos ayuda a obtener el ángulo descrito por 2 puntos, es decir, la pendiente en radianes que describen esos 2 puntos seleccionados por el usuario. Dicho ángulo es medido en forma relativa, ya que se ve afectado por los valores de las variables ANGBASE y ANGDIR. GETORIENT: (GETANGLE "Dame dos puntos") Funciona igual que GETANGLE, pero con la diferencia que el ángulo que mide es en forma absoluta, es decir, tomando como referencia el eje positivo horizontal (X+). Ejemplo: (SETQ ANGULO (GETORIENT "Selecciona dos puntos ")) En este ejemplo, en la variable ÁNGULO se está guardando el valor en radianes ángulo de inclinación que describen 2 puntos seleccionados por el usuario. del La utilidad de GETANGLE y GETORIENT consiste en poder obtener la pendiente o ángulo de inclinación de alguna línea perteneciente a una entidad de dibujo, a partir de la simple selección de sus vértices. GETDIST: (GETDIST "DAME UNA DISTANCIA") Es una instrucción que permite asignarle a una variable el valor real de una distancia entre dos puntos, de tal forma que la computadora le pregunte al usuario dos puntos a tomar como referencia para calcular la distancia entre ellos, pudiendo ser éstos los vértices de alguna entidad de dibujo. Ejemplo: (SETQ X (GETDIST "Selecciona dos puntos ")) Capacitación Página 18 Laboratorio de cómputo de ingeniería Curso de AutoLISP Aquí lo que se está haciendo es que la computadora solicite al usuario dos puntos o coordenadas, mediante la aparición de un texto en pantalla, que es el que se encuentra entre comillas, posteriormente calcula la distancia entre ellos y lo almacena en la variable X. GETPOINT : (GETPOINT "Dame un punto") Nos permite almacenar en una variable las coordenadas de un punto o coordenada. P.ej: (SETQ X (GETPOINT "Selecciona un punto")) En este ejemplo, la máquina le pide al usuario un punto, el cual se almacena en la variable X. GETREAL : (GETREAL "Número") Con esta instrucción, se almacena en una variable el valor de un número real, siempre con entero, punto decimal y sus correspondientes decimales. Ejemplo: (SETQ X (GETREAL "Dame un número")) En caso de que el usuario teclee un número entero, AUTOLISP se encargará de asignarle ceros como decimales. Por otro lado, si se trata de un dato con muchas decimales, AUTOLISP redondeará siempre a 6 decimales. GETINT : (GETINT "LETRERO DE TEXTO") Instrucción que nos permite preguntar un dato (valor numérico), pero con la característica de que siempre éste debe de ser entero, almacenando dicho valor en alguna variable. Se usa igual que GETREAL, pero con la diferencia de que aquí el valor almacenado es entero, mandando AUTOLISP un mensaje de error cuando dicho valor no es entero. La utilidad de este comando consiste en tener que usar una función que sólo nos tome el valor entero de un número, sin necesidad de hacer la conversión. SSGET: (SETQ VARIABLE (SSGET)) Es una instrucción que nos permite almacenar en una variable una entidad de dibujo de AUTOCAD, o a un grupo de ellas cuando se identifican a manera de bloque. A diferencia de las demás instrucciones de entrada de datos, ésta no puede llevar un texto dentro de comillas, sino que al dar SSGET y el nombre de una variable, automáticamente guarda en una variable la entidad seleccionada. Para efectos de comentarios o textos en combinación con este comando, se acostumbra usar el comando PROMPT para enviar textos hacia la línea de comandos de AUTOCAD. Capacitación Página 19 Laboratorio de cómputo de ingeniería Curso de AutoLISP GETVAR : (GETVAR "VARIABLE") Con esta instrucción se puede obtener algún valor de alguno de los parámetros pertenecientes al comando SETVAR de AUTOCAD, para posteriormente ser almacenado en alguna variable dentro de AUTOLISP. Ejemplo: (SETQ F (GETVAR "PDMODE")) En este ejemplo, en la variable F se está almacenando el valor que en ese momento tenga la variable PDMODE del SETVAR de AUTOCAD. Hay que recordar que dentro del SETVAR, PDMODE define el estilo (tipo) de simbologías para dibujar puntos en alguna coordenada. Si PDMODE en ese instante tenía como valor 34 (correspondiente a un punto formado por un círculo, una línea vertical y otra horizontal), entonces F tomará el valor de 34. Para la utilización de GETVAR, resulta indispensable el conocimiento completo de todas las variables que maneja AUTOCAD dentro del SETVAR, así como sus aplicaciones para fines de dibujo. La principal utilidad de GETVAR, consiste en poder manejar desde AUTOLISP los valores que contenga SETVAR, hay que tomar en cuenta que para poder modificar desde AUTOLISP los valores del SETVAR, no es posible hacerlo con GETVAR, ya que su utilidad es la entrada y no la salida de información. Si se deseara modificar alguno de los parámetros del SETVAR, se puede hacer con la instrucción COMMAND, utilizando la sintaxis adecuada. GETSTRING: (GETSTRING "TEXTO") Es una instrucción que almacena en una variable una información de tipo alfanumérico, es decir, de carácter de texto. Existiendo la limitante de 132 caracteres para ser almacenados, si se excede este límite, sólo se almacenarán los primeros 132. Su utilidad principal es en la elaboración de menús, donde con opciones se puede seleccionar alguna, en combinación con IF. Ejemplo: (SETQ NOMBRE (GETSTRING "\n Cual es tu nombre ")) En la variable NOMBRE se almacena el valor en texto que se elija por el usuario. Si se almacena VICTOR, cuando se requiera emplear el valor de esa variable, la computadora nos devuelve "VICTOR" EN GENERAL: Cuando se especifique un tipo de dato a almacenar en una variable y el usuario proporcione otro, AUTOLISP mandará un mensaje de error con el que le avisa al usuario. Un caso común es el querer almacenar un texto en una variable empleando GETREAL, querer almacenar un número fraccional empleando GETINT, etc. Capacitación Página 20 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES MATEMÁTICAS Son las que se emplean al realizar operaciones sencillas, se pueden citar: (+ NUMERO1 NUMERO2) (- NUMERO1 NUMERO2) (* NUMERO1 NUMERO2) (/ NUMERO1 NUMERO2) Para la suma de 2 números Para restarle el número2 al valor del número1 Para multiplicar 2 números Para dividir el Número1 entre el número2 Hay que notar que para cada una de las 4 funciones anteriores se pueden usar mas de 2 números dentro de los paréntesis, para realizar la operación deseada, algunos ejemplos son: (+ 1 2 3 4) Lo cual devuelve el valor de 10 hacia la variable en la cual el usuario decida almacenar dicho resultado. (- 50 40 2.5) Lo cual nos da la siguiente operación: (50 - 40) - 2.5, resultando 7.5 como valor devuelto por AUTOLISP. (* 2 3 4) Realiza la multiplicación de estos 3 números, resultando 24 como valor devuelto por AUTOLISP. (/ 100 20 2) Da como resultado 2, ya que siendo enteros todos los números, AUTOLISP a su vez devuelve un resultado entero. Para obtener el resultado deseado de 2.5, la línea de programa sería: (/ 100.0 20.0 2.0), hay que tomar en cuenta esto para las demás funciones. En caso de que sólo se escriba un sólo número, lo devolverá como resultado para cualquiera de estas funciones, Ejemplo: (+ 2) Devuelve el valor de 2 (- 8) Nos da como resultado -8 (* 3) Devuelve 3 (/ 4) Devuelve 4 AUTOLISP también maneja el número 3.141592654, reconociéndolo como pi, de tal forma que se puede usar como constante dentro de AUTOLISP. Ejemplo: (SETQ W (* pi 2)) Almacena en la variable W, el resultado de multiplicar a pi por dos = 6.2831853 Capacitación Página 21 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES BÁSICAS A) Referentes al lugar que ocupan los datos en una lista CAR: Es una instrucción que sirve para analizar el primer valor de una lista, es decir, siempre nos devuelve este valor. Ejemplo: (SETQ P (GETPOINT "DAME UN PUNTO")) (SETQ X (CAR P)) En este caso, cuando se ejecuten dentro de algún programa estas 2 líneas, primero se almacena en la variable P una lista de 3 valores que representa las coordenadas de un punto, posteriormente en la variable X se guardar el valor de la coordenada X de ese punto. CDR: Funciona igual que CAR, pero con la diferencia que esta instrucción nos devuelve todos los valores de una lista, exceptuando al primero. Ejemplo: Si a las líneas de nuestro ejemplo anterior, agregamos una más: (SETQ Y (CAR (CDR P))) En la variable Y almacenaremos la coordenada en Y de nuestro punto, ya que CDR nos devolverá los 2 últimos valores de nuestra lista, correspondientes a las coordenadas Y, Z y con CAR tomaríamos el primero de esos 2 valores. LAST: Esta instrucción nos devuelve el último valor de una lista. En nuestro ejemplo anterior, si escribimos una línea de programa así: (SETQ Z (LAST P)) En la variable Z almacenaremos el último valor de los elementos contenidos en la lista P, que en este caso corresponde al valor de nuestro punto en la coordenada Z. B) Referentes a las características de una lista LENGTH : Es una instrucción que nos ayuda a conocer la extensión de una lista de datos, es decir, el número de datos que contiene dicha lista. Ejemplo: En nuestro ejemplo anterior, tenemos 3 datos que se almacenan en la variable P, de tal forma que: (SETQ L (LENGTH P)) La variable P tomará el valor de 3. Capacitación Página 22 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES ARITMÉTICAS Estas funciones se complementan con las anteriormente descritas, tales como la suma, resta, multiplicación y división. Para utilizarse hay que seguir los criterios de uso de paréntesis como en cualquier otro lenguaje de programación en el que se usen funciones de este tipo. Es importante señalar que para todas estas instrucciones en las que se emplean listas, dichas listas deben ser por completo formadas por números o variables con contenido numérico, ya que no es posible emplear variables con contenido alfanumérico para realizar este tipo de operaciones. De manera semejante con aquellas que sólo usan una variable. El usuario comprende que por ejemplo, no es posible sumar dos variables: X + Y, si X = "PERRO" y Y = "GATO", necesariamente tienen que ser números reales. No hay que olvidar, que al realizar alguna operación o función de tipo matemático, dicho resultado se debe de almacenar en alguna otra variable, empleando SETQ. Se pueden listar las siguientes funciones: ABS : (ABS n) Función que como en otros lenguajes, muestra el valor absoluto de un número, por ejemplo: (SETQ X (ABS Y)) Aquí lo que se está haciendo es almacenar en la variable X el valor absoluto de Y, otro ejemplo puede ser el siguiente: (SETQ X (ABS -21.365)) En este ejemplo se está almacenando en X el número +21.365, puesto que el valor absoluto siempre es positivo. EXP : (EXP n) Con esta instrucción se obtiene el número de Euler = 2.7182818 elevado a una potencia "n" determinada, de tal forma que nos ayuda a obtener el antilogaritmo natural de un número. Ejemplos: (EXP 1.0), nos devuelve el valor de 2.7182818 (EXP -0.4), nos devuelve el valor de 0.67032 Dichos valores no se almacenarán en alguna variable deseada, si no se usa la instrucción SETQ. Capacitación Página 23 Laboratorio de cómputo de ingeniería Curso de AutoLISP EXPT : (EXPT n p) Esta instrucción puede elevar un número "n" a una potencia "p", Ejemplos: (SETQ X (EXPT 3 2)) Se almacena en X el valor de 3*3 = 9 GCD : (GCD a b c) Es una instrucción que busca entre varios denominador, Ejemplos: (GCD 12 20) números (a, b, c,..,N) su máximo común Nos devuelve 4, que es el máximo número que a la vez puede dividir al obteniéndose un cociente entero. (GCD X Y Z) 12 y al 20 Nos devuelve el máximo común denominador de los números almacenados en las variables X, Y Z. LOG: (LOG n) Es una función que nos sirve para calcular el logaritmo natural de un número real, es decir, usando al número de Euler como base, ejemplos: (LOG 4.5) Nos devuelve:1.50408 (LOG 1.22) Nos devuelve:0.198851 (LOG X) Calcula y nos devuelve el Ln(x) Hay que tener cuidado de no usar números negativos para el cálculo de logaritmos, ya sea cuando se usan variables o simplemente los números en las instrucciones de programa, por que como ya todos sabemos, no es posible calcular logaritmos de números negativos y la computadora nos manda algún mensaje de error. MAX: (MAX A B C ...) Nos ayuda a obtener en una lista a el número que es mayor de todos los demás (A, B, C, ...). , Ejemplos: (MAX 4.07 -150) Nos devuelve: 4.07 (MAX 2.1 4 8) Capacitación Nos devuelve: 8 Página 24 Laboratorio de cómputo de ingeniería Curso de AutoLISP MIN: (MIN A B C ...) Se usa igual que MAX, pero esta instrucción nos devolverá de una lista, a aquel valor que es menor a todos los demás, Ejemplo: (MIN 600 -10) Nos devuelve: -10 REM: (REM X Y) Esta función sirve para obtener el residuo de dos números, de tal forma que nos devuelve el resto de la división de X entre Y. Ejemplos: (SETQ RESIDUO (REM 42 12)) Almacena en la variable RESIDUO, el número 6, que es el residuo de dividir 42 / 12. SQRT: (SQRT X) Función que calcula la raíz cuadrada positiva de un número real POSITIVO, ya que en el AUTOLISP, no se usan los números de tipo complejo. Ejemplo: (SQRT 4) Nos devuelve: + 2 Como ya es sabido, la raíz cuadrada de 4 puede ser +2 y además -2, ya que al elevarlos al cuadrado, ambas opciones nos dan 4. En AUTOLISP, la computadora siempre nos da el valor positivo de una raíz cuadrada. FUNCIONES TRIGONOMÉTRICAS Hay que considerar, que siempre que se utilicen estas funciones, la computadora realiza los cálculos en radianes, si se desea obtener o proporcionar a AUTOLISP un valor en grados, hay que hacer las conversiones necesarias, considerando que 2PIradianes = 360 grados. ATAN: (ATAN X) Nos devuelve en radianes el valor del arco cuya tangente es un número, es decir: calcula en radianes el valor del ángulo cuya tangente es el valor que estamos dando, Ejemplo: (ATAN 0.5) Capacitación Nos devuelve: 0.4636476 Página 25 Laboratorio de cómputo de ingeniería Curso de AutoLISP COS: (COS X) Calcula el coseno de un número en radianes, su sintaxis es igual a la de ATAN. Ejemplo: (SETQ X (COS pi)) radianes de 3.141592654... Almacena en "X" el número -1.0, que es el coseno en SIN: (SIN X) Calcula la función seno de un número Ejemplo: (SIN 0) Devuelve: Cero AUTOLISP no cuenta con una instrucción para calcular la función TANGENTE, pero es posible calcularla mediante la siguiente identidad trigonométrica: TAN (X) = SIN (X) / COS (X) El usuario puede programar una pequeña rutina que calcule la TANGENTE de cualquier número en radianes. FUNCIONES DE TIPO RELACIONAL Y CONDICIONAL Por lo general se emplean en combinación con funciones lógicas de tipo IF... THEN, en donde si se cumple la condición se ejecuta lo incluido dentro del siguiente par de paréntesis, de lo contrario se ejecuta lo incluido en la segunda pareja de paréntesis. IF: (IF CONDICION VERDERO FALSO) Para el caso de argumentos más extensos, se sigue la siguiente lógica: (IF (CONDICIONES) (VERDADERO) (FALSO) ) Donde las CONDICIONES pueden ser algunas de las siguientes: (= NUMERO1 NUMERO2) Sirve para saber cuando 2 o más argumentos sean iguales, Ejemplo: (= 4 4.00) La máquina devuelve "T" (true), siendo verdadero el algoritmo (= 499 500 499) Nos devuelve "Nil", siendo falso el argumento. Capacitación Página 26 Laboratorio de cómputo de ingeniería Curso de AutoLISP Otra muy parecida, se emplea para comparar los contenidos de listas: (EQUAL LISTA1 LISTA2) Donde LISTA1 y LISTA2 son variables que contienen varios elementos, es decir, una lista Análogamente, se sigue el mismo criterio de falso y verdadero como respuestas para los siguientes: (< NUMERO1 NUMERO2) y (<= NUMERO1 NUMERO2) (> NUMERO1 NUMERO2) y (>= NUMERO1 NUMERO2) (/= NUMERO1 NUMERO2) Para el caso en el que se quiera que sea verdadero cuando 2 números son diferentes. FUNCIONES DE TIPO LÓGICO (AND, OR) Se emplean en combinación con las anteriores y de tipo IF..THEN..ELSE AND: Compara 2 o más expresiones, devolviendo verdadero solamente cuando todas las funciones se cumplan. (AND EXPRESION1 EXPRESION2...) OR: Compara 2 o más expresiones, devolviendo verdadero cuando por lo menos alguna de las funciones se cumpla. Se pueden realizar combinaciones de estas 2 para atender a las necesidades del usuario, algunos ejemplos son: (IF (AND (< 2 3) (> 5 4) (= 2 2.00) (>= 2.1 2)) (SETQ A "HOLA") (SETQ A " ") ) En este ejemplo, como se puede ver, se cumplen simultáneamente todas las condiciones, por lo que la variable "A" tomará el valor de HOLA, en caso de que así no fuece, tomará el valor de 4 caracteres en blanco. Se puede aplicar a variables: (IF (AND (= A B) (< C D)) (SETQ E 5) ) Capacitación Página 27 Laboratorio de cómputo de ingeniería Curso de AutoLISP Si se da en forma simultánea en el programa que A sea igual a B, y que C sea menor a D, entonces la variable E valdrá 5, de lo contrario nada se ejecutará por no haber una instrucción a cumplir para la condición de falso, y de seguir con el resto del programa. (IF (OR (= A B) (< C D)) (SETQ E 5) ) Aquí, la variable E valdrá 5 si se cumple alguna de cualquiera de las 2 condiciones, o las 2 en forma simultanea. (IF (OR (AND (= A B )) (AND (= C D ))) (SETQ E 5) ) En este último ejemplo E tomará el valor de 5 si se cumple alguna de las 2 condiciones de que forzosamente A sea igual a B o que C sea igual a D. Hay que notar la forma en que se realizan los arreglos de parejas de paréntesis, para evitar en lo posible errores de sintaxis que sean laboriosos de localizar en algoritmos más complejos. FUNCIONES DE CADENA STRCASE: (STRCASE CADENA ARGUMENTO) Es una función que convierte los elementos de una cadena en mayúsculas o minúsculas, dependiendo del contenido del argumento. Si el argumento se omite o vale NIL, los caracteres de nuestra cadena serán convertidos en mayúsculas. Si el argumento existe o tiene un valor diferente de NIL, los elementos de nuestra cadena serán convertidos en minúsculas. Ejemplos: (strcase "Sample") (strcase "Sample" T) Nos devuelve "SAMPLE" Nos devuelve "sample" STRCAT: (STRCAT CADENA1 CADENA2) Es una instrucción que nos permite unir dos cadenas de texto en una sola. Ejemplos: (STRCAT "A" "BOUT") (STRCAT "A" "B" "C") Capacitación Nos devuelve "ABOUT" Nos devuelve "ABC" Página 28 Laboratorio de cómputo de ingeniería Curso de AutoLISP STRLEN: (STRLEN TEXTOS...) Es una instrucción que nos sirve para contar el número de elementos que tiene una cadena o varias de ellas. Ejemplos: (STRLEN "ABCD") Nos devuelve el número cuatro. (STRLEN "ABCD" "efgh") Nos devuelve el número ocho. SSLENGTH: (SSLENGTH SS) Es una instrucción que nos ayuda a contar el número de entidades o elementos de dibujo que se encuentran contenidos en el set de selección. Ejemplo: (SETQ SSET (SSGET "L")) Almacena en la variable SSET el valor del número de elementos de dibujo seleccionados en la última selección hecha con el comando SSGET. FUNCIONES DE CONVERSIÓN ASCII (ASCII CADENA) Esta instrucción convierte el primer carácter de una cadena en su equivalente numérico del código ASCII. Ejemplos: (ASCII "A") (ASCII "BIG") Nos devuelve el número 65 Nos devuelve el número 66 ATOF (ATOF TEXTO) Es una instrucción que convierte un número con formato de texto en un número real. Es decir, nos permite convertir una cadena de un solo texto numérico en valor real. Ejemplos: (ATOF "97.1") (ATOF "3") Nos devuelve 97.1 Nos devuelve 3.0 ATOI (ATOI TEXTO) Trabaja de igual forma que ATOF, pero ahora la conversión se hace hacia un número entero. Ejemplos: (ATOI "97.1") (ATOI "3") Capacitación Nos devuelve 97 Nos devuelve 3 Página 29 Laboratorio de cómputo de ingeniería Curso de AutoLISP CHR (CHR NUMERO) Es una instrucción que trabaja en forma opuesta a ASCII, es decir: convierte un número entero en su correspondiente símbolo del código Ejemplo : (CHR 65) (CHR 66) Nos devuelve la letra "A" Nos devuelve la letra "B" FIX (FIX NUMERO) Convierte un número real en uno entero, sin aproximar sus decimales; es decir: sólo toma la parte entera de un número real. Ejemplos: (FIX 3) (FIX 3.7) Nos devuelve 3 Nos devuelve 3 FLOAT (FLOAT NUMERO) Trabaja en forma contraria a FIX, convierte de un número entero a uno real. Ejemplos: (FLOAT 3) (FLOAT 3.75) Nos devuelve 3.0 Nos devuelve 3.75 ITOA Trabaja en forma contraria a ATOI, este comando convierte un número entero, en un texto (cadena). Ejemplos: (ITOA 33) (ITOA -17) Nos devuelve "33" Nos devuelve "-17" RTOS (RTOS NUMERO FORMATO DECIMALES) Es un comando que permite el manejo con números en cinco formatos diferentes: científico, decimal, ingenieril (pies con decimales), arquitectónico (pies con fracciones), fraccional; presentándolos con un determinado número de decimales. Es indispensable recordar que un pie equivale a 12 pulgadas. Un ejemplo es el siguiente: ; PROGRAMA (SETQ X 17.5) (SETQ A (RTOS X 1 4)) (SETQ B (RTOS X 2 2)) (SETQ C (RTOS X 3 2)) (SETQ D (RTOS X 4 2)) (SETQ E (RTOS X 5 2)) Capacitación valores de las variables A = 1.7500E+01 B = 17.50 C = 1'-5.50" D = 1'-5 1/2" E = 17 1/2 Página 30 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES DE ENTRADA Y SALIDA Se trata de instrucciones que nos ayudan a leer o escribir información de un archivo con formato de sólo texto. Nos ayudan a recibir o enviar información fuera de nuestro programa de AUTOLISP y del AUTOCAD. OPEN Permite abrir un archivo de sólo texto, en las siguientes variantes: • En modo de solo lectura (OPEN "ARCHIVO.TXT" "r") • En modo de solo escritura, si el archivo no existe, es creado al momento de ejecutar este comando, y siempre sobrescribe el contenido del archivo con la nueva información. (OPEN "ARCHIVO.TXT" "w") • En un modo que nos permite escribir en un archivo sin eliminar su contenido actual y sin sobrescribirlo por completo, es decir: agregándolo al final del mismo. (OPEN "ARCHIVO.TXT" "a”) Aquí la limitante es usar archivos de solo texto creados con COPY CON desde DOS, ya que AUTOLISP no reconocería las marcas CONTROL+Z al final de dichos archivos y tendría algunos problemas. CLOSE (CLOSE ARCHIVO) Cierra un archivo previamente abierto con OPEN, se utiliza el CLOSE una vez que ya no se requiere usar dicho archivo. Ejemplo : (CLOSE "X.TXT") (CLOSE X) Cierra el archivo X.TXT Cierra el archivo cuyo nombre esta contenido en la variable X. FINDFILE (FINDFILE ARCHIVO) Funciona de manera semejante al DIR /S de DOS, ya que nos sirve para buscar algún archivo e indicar en qué parte se encuentra dentro de AUTOCAD, es decir, nos devuelve el PATH de dicho archivo solamente, sin indicar sus datos (bytes, fecha, etc...). Este comando está limitado a buscar dentro de los directorios de AUTOCAD. Ejemplo: (FINDFILE "ACAD.EXE") Nos devolverá: "/acad/ACAD.EXE", Suponiendo que en nuestra PC tengamos instalado AUTOCAD en el subdirectorio ACAD. Capacitación Página 31 Laboratorio de cómputo de ingeniería Curso de AutoLISP LOAD (LOAD"PROGRAMA.LSP") Esta instrucción ya la habíamos definido previamente, ya que es la que se usa para cargar en memoria los programas hechos en AUTOLISP. READ (READ CADENA) Es un comando que muestra siempre la primera lista o tomo de una cadena, Ejemplos: (READ "HELLO THERE") (READ "(A B C) (D)") (READ "(A B C)") Nos devuelve HELLO Nos devuelve la lista (A B C) Nos devuelve la lista (A B C) READ-LINE (READ-LINE ARCHIVO) Esta instrucción funciona de manera semejante a READ, pero con la diferencia que en este caso lee una línea completa de un archivo de sólo texto abierto previamente (con OPEN), es decir, nos devuelve una línea de nuestro archivo por cada vez que se usa dentro del mismo programa, ya que al reinicializar nuestro programa, READ-LINE nos devolverá de nuevo la primera línea de nuestro archivo, luego la segunda, etc.. Ejemplo: (SETQ TEXTO (READ-LINE ARCH)) Aquí, se almacena en la variable TEXTO la primera línea del archivo cuyo nombre está almacenado en la variable ARCH. Si se ejecutara por segunda vez dentro de nuestro programa, nos devolvería la segunda línea y así sucesivamente hasta llegar al final del archivo. En la parte de prácticas de este curso, se encuentran algunas aplicaciones de este comando. WRITE-LINE (WRITE-LINE ARCHIVO) Es una instrucción que funciona de manera contraria a READ-LINE, ya que WRITE-LINE permite escribir sobre de un archivo de texto abierto previamente (con OPEN) Ejemplo: (WRITE-LINE "HOLA" ARCH) Escribir la palabra HOLA en el archivo de texto abierto previamente, cuyo nombre esta almacenado en la variable ARCH. Ejemplo: (WRITE-LINE X ARCH) Escribir el contenido de la variable X en el archivo de texto previamente abierto, cuyo nombre se encuentra en la variable ARCH. Capacitación Página 32 Laboratorio de cómputo de ingeniería Curso de AutoLISP FUNCIONES DE DEPURACIÓN TRACE (TRACE FUNCIÓN) Marca una función con un atributo de rastreo, mostrando el nombre de dicha función. Esta instrucción ayuda a saber cual es la ultima función que ha pasado por ahí. Ejemplos: (TRACE FUNCIÓN1) Nos devuelve FUNCIÓN1 UNTRACE (UNTRACE FUNCIÓN) Trabaja en forma contraria a TRACE. Quita el atributo de rastreo de la función seleccionada, devolviendo el nombre de la última función. Ejemplos: (UNTRACE FUNCIÓN1) Nos devuelve FUNCIÓN1 FUNCIONES VARIAS TEXTSCR (TEXTSCR) Cambia al modo de texto de AUTOCAD, equivale a presionar F1 para cambiar del modo gráfico al modo de texto. GRAPHSCR (GRAPHSCR) Cambia al modo gráfico de AUTOCAD, equivale a presionar F1 para cambiar del modo de texto al modo gráfico. VER (VER) Nos muestra la versión actual de AUTOLISP que se está empleando, si se está empleando el AUTOCAD 13, AUTOLISP nos devuelve el sig. mensaje: "AUTOLISP Release 13.0" QUIT, EXIT Son dos funciones que se usan para detener nuestro programa en un determinado punto y regresar a la línea de comandos de AUTOCAD. Ambas hacen exactamente lo mismo: Provocan un error que da por terminado un programa de AUTOLISP. Capacitación Página 33 Laboratorio de cómputo de ingeniería Curso de AutoLISP Créditos Directorio Ing. Edmundo Barrera Monsivais Director de la Esc. de Ingeniería Ing. Raúl Morales Farfán Secretario de Talleres y Laboratorios Ing. Luis M. Aguillón Banda Jefe del Laboratorio de Cómputo de Ingeniería Ing. Luis A. Torres López Jefe del Área Académica y Coordinación del Área de Prácticas Realización: Víctor Hugo Ortega Vega Servicio Social (Ingeniería Electrónica ) Revisión Liliana Vicenteño Loya Asesor de la Coordinación del Área de Prácticas Lourdes Revilla Avendaño Colaboradora del Área de Prácticas Diseño y Edición: Liliana Vicenteño Loya Asesor de la Coordinación del Área de Prácticas Lourdes Revilla Avendaño Colaboradora del Área de Prácticas México D.F. Capacitación MCMXCVIII Página 34