Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Auto Lisp
Auto Lisp
SINCOW
MANUAL DE AUTOLISP
www.sincows.com admin@sincows.com ISLA FERNANDINA N42-52 (CIUDADELA JIPIJAPA), TELE/FAX: 2920-890, 2431-356 QUITO-ECUADOR
www.sincows.com
admin@sincows.com
La expresin anterior se podr tipiar en cualquier momento, como ya se dijo anteriormente, y corresponder a la operacin de multiplicacin de los argumentos que vengan a continuacin en este caso los valores constantes de 3 y 2, el AutoLISP evaluar esa expresin dando un valor de 6. En la tabla No. 1 se puede apreciar algunas expresiones aritmticas en AutoLISP y el resultado que dara el programa. Para mayor informacin sobre las expresiones aritmticas vase pg 6. II. SETEADO INICIAL Antes de correr cualquier programa de AutoLISP, es indispensable setear cierto tipo de informacin dentro del DOS. En primer lugar setearemos las variables LISPHEAP y LISPSTACK, lo cual se har desde el DOS de la siguiente manera: SET LISPHEAP=20000 SET LISPSTACK=8000 Los valores de 20000 y 8000 pueden ser cambiados, pero las sumas de estas dos cantidades no puede exceder de 45000. Otra variable que requiere ser seteada antes de trabajar con el AutoCAD es ACADFREERAM, la cual permite setear mayor cantidad de memoria RAM libre para uso del AutoCAD. Se tipiar en pantalla lo siguiente: SET ACADFREERAM=20 El valor de 20 tambin puede ser alterado de acuerdo a las necesidades del usuario, pero no se recomiendan valores mayores a 32, ni menores a 20. Si el valor de esta variable no es seteado el AutoCAD le asignar un valor de 14. III. VARIABLES
www.sincows.com
admin@sincows.com
Nombres de variables Correctas Incorrectas f 37 esta 45t punto11 ry*4 que23s x$ etc ft+ui
CARACTERES NO RECOMENDADOS PARA NOMBRES DE VARIABLES CARACTERES RESERVADOS O ILEGALES: . ' " ; ( ) <ESPACIO> FUNCIONES DEL AUTOLISP: ~ * = > < + - / CARACTERES NO RECOMENDADOS: ! ? ` \ ^ o cualquier carcter Control
El valor que se asigna a una variable puede ser de cuatro tipos: Variable string: Tiene valores de texto ubicadas ente comillas para identificar el valor como un string. Algunas variables del sistema (Ver comando SETVAR) son del tipo string, tal es el caso de la variable CELTYPE, que tiene asignado un valor "BYLAYER" entre otras. Enteras: Son nmeros positivos o negativos los cuales no tienen fracciones o puntos decimales. El valor de 5 sera un tpico ejemplo de un valor entero mientras que el valor 5.0 ser considerado por el AutoLISP como un valor real y no como un valor entero. Los valores enteros debern estar entre -32768 y +32767. Para valores enteros fuera de estos rangos causar valores errneos. Algunas variables del sistema toman valores enteros, tal es el caso de la variable BLIPMODE que puede tomar valores de 0 para desactivado y 1 para activado. Reales: Es un nmero que incluye decimales de punto flotante. Si se desea escribir el valor de 0.134 no se lo podr escribir como .134, pues esto producir un error, por lo que tendremos que escribirlo con el 0 inicial. Algunas variables del sistema tienen asignados valores reales. Demos algunos ejemplo de este tipo de variables: FILLETRAD, TEXTSIZE, AREA, etc. Listas: Es una variable que contiene ms de un valor o una serie de valores. Los puntos o coordenadas son un tipo de listas que estn constituidos por dos (2D) o tres (3D) elementos numricos y que representan una coordenada. En las variables del sistema de nombre LASTPOINT, LIMMIN, LIMMAX, etc tienen asignado variables del tipo coordenada. Pickset: Una tabla que contiene puntos de elementos grficos, del set de seleccin creados con cualquier opcin de seleccin de objetos en AutoCAD, por ejemplo: window, crossing, etc. Ename (Nombre de una entidad): Este es un tipo de variable que representa al nombre de una entidad. A partir de ella se podr generar una lista donde este comprendida toda la informacin respecto a la entidad, ver comando ENTGET pgina 12. ATOMLIST Se recomienda no usar nombres de funciones del AutoLISP, como nombres de variables. El ATOMLIST es una variable en el AutoLISP que guarda todos los nombres de funciones definidas y nombres de variables. Se puede mirar esta lista tipiado lo siguiente: !atomlist Apareciendo entonces en pantalla lo que se ilustra en la 4:
www.sincows.com
admin@sincows.com
Command: !ATOMLIST (ELE GUS INTERS GRREAD GRTEXT GRDRAW GRCLEAR TBLSEARCH TBLNEXT ENTUPD ENTMOD ENTSEL ENTLAST ENTNEXT ENTDEL ENTGET SSMEMB SSDEL SSADD SSLENGTH SSNAME SSGET ANGTOS RTOS COMMAND OSNAP REDRAW GRAPHSCR TEXTSCR POLAR DISTANCE ANGLE INITGET GETKWORD GETCORNER GETINT GETSTRING GETORIENT GETANGLE GETREAL GETDIST GETPOINT MENUCMD PROMPT SETVAR GETVAR TERPRI PRINC PRIN1 PRINT WRITE-LINE READ-LINE WRITE-CHAR READ-CHAR CLOSE OPEN STRCASE ITOA ATOF ATOI CHR ASCII SUBSTR STRCAT STRLEN PAUSE PI MINUSP ZEROP NUMBERP FLOAT FIX SQRT SIN LOG EXPT EXP COS ATAN 1- 1+ ABS MAX MIN NOT OR AND > >= /= = <= < ~ GCD BOOLE LSH LOGIOR LOGAND REM * - + ASSOC MEMBER SUBST LENGTH REVERSE LAST APPEND CDDDDR CDDDAR CDDADR CDDAAR CDADDR CDADAR CDAADR CDAAAR CADDDR CADDAR CADADR CADAAR CAADDR CAADAR CAAADR CAAAAR CDDDR CDDAR CDADR CDAAR CADDR CADAR CAADR CAAAR CDDR CDAR CADR CAAR CDR CAR CONS COND LISTP TYPE NULL EQUAL EQ BOUNDP ATOM NTH PAGETB PICKSET ENAME REAL FILE STR INT SYM LIST SUBR T MAPCAR APPLY LAMBDA EVAL *ERROR* / QUIT EXIT _VER VER IF UNTRACE TRACE DEFUN FOREACH REPEAT WHILE PROGN FUNCTION QUOTE READ LOAD SETQ SET MEM VMON ALLOC EXPAND GC ATOMLIST) Command: Lista guardada en la variable ATOMLIST. Obsrvese la incorporacin de las variables GUS y ELE dentro de la lista. IV. EXPRESIONES Una expresin en AutoLISP, empieza con un parntesis y finaliza con un parntesis que cierre al primer parntesis. Toda expresin dentro del AutoLISP presenta el siguiente formato: (Nombre-de-la-funcin argumento-1 argumento-2 ......) Digamos algunas reglas para las expresiones en AutoLISP: 1. 2. 3. 4. Toda expresin tienen parntesis que abren y que cierran la expresin Toda expresin tiene un nombre de funcin. El nombre de esta funcin debe estar inmediatamente despus de abrir un parntesis. Excepcin para el caso en el cual se usa la funcin quote o '. Toda expresin es evaluada o ejecutada y responde con un resultado, el cual puede ser del tipo lgico (T o NIL), Numrica, o un carcter string. Adems cualquier valor numrica o un carcter string ser considerado con un valor lgico T. Una expresin en AutoLISP puede contener otras expresiones en AutoLISP, por ejemplo: (SETQ re (/ 5.6 45.0)), La evaluacin de mltiples expresiones se las realiza desde los parntesis ms interiores a los ms exteriores.
V. TOMOS Y LISTAS
www.sincows.com
admin@sincows.com
El AutoLISP describe una entidad simple a travs de una lista la cual puede contener el nombre de la entidad, el tipo de entidad (lneas, arcos, crculos, etc), el nivel "Layer" asociado, y las coordenadas. Veamos a continuacin un ejemplo de lista que describe una entidad: ((-1 . <Entity name: 6000020>) (0 . "LINE") (8 . "PR") (10 . 75.0000 212.0000) (11 . 324.0000 83.0000)) El ejemplo anterior representa a una lnea con un nivel o "layer" asociado de nombre PR, y va desde la coordenada (75 212) a la coordenada (324 83). Se puede tambin tener en forma de una lista los Bloques, Estilos de texto, Tipos de lneas, nombres de vistas, en listas. Veamos algunos ejemplos de esta representacin: ((0 . "LAYER") (2 . "PRUEBA") (70 . 64) (62 . 3) (6 . "CONTINUOUS")) ((0 . "STYLE") (2 . "GUS") (70 . 0) (40 . 0.0000) (41 . 1.0000) (50 . 0.0000) (71 . 0) (42 . 0.1250) (3 . "ROMANS") (4 "")) El primero corresponde a un nivel o "layer" de nombre prueba con un tipo de lnea continua. La segunda lista corresponde a la definicin de un estilo de texto, el cual tiene un nombre de GUS y tiene asociado una forma de texto o "Font" de nombre ROMANS. VI. ASIGNANDO VALORES A VARIABLES Para asignar un valor a una variable usaremos la funcin SETQ, esta funcin dice al AutoLISP que asigne un valor a una variable, si deseamos por ejemplo asignar el valor 3.1416 a la variable de nombre PIE, lo haramos de la siguiente manera (SETQ pie 3.1416) La expresin SETQ es una abreviacin de Set quote. El quote es una funcin que evita que sean evaluados tomos o listas. Por lo tanto el valor 3.1416, para el caso de nuestro ejemplo, ser asignado directamente en la variable PIE. La expresin SET trata de evaluar cada uno de sus argumentos antes de ser asignados los valores. Veamos un ejemplo: (SET pie 3.1416) Para este caso el AutoLISP tratar en primer lugar de evaluar el valor de PIE y despus asignar al resultado de esa evaluacin el valor de 3.1416. Por lo tanto pie deber ser una expresin previamente definida, pues en caso contrario el AutoLISP no producir ningn tipo de asignacin y dar un mensaje de error. ASIGNANDO LISTAS A VARIABLES Se puede asignar una variable a una lista para ese caso la lista puede ser obtenida a travs de algn otro comando que crea listas como resultado o el usuario puede dar la lista. Veamos a continuacin 4 asignaciones a variables de listas, la ltima de ellas usa un comando que crea una lista con la informacin del nivel o layer asociado:
www.sincows.com
admin@sincows.com
Veamos algunos ejemplos en los cuales se observa el uso de funciones aritmticas. (SETq a (/ 9.0 3) (SETq a (* a 4 2) Se asigna el valor de 3.0 a la variable a Al valor de a se lo multiplica por 4 y por 2, dando esta operacin un valor de 24.0 y este valor se reasignar a la variable a.
(SETQ b (/ (sqrt a) (exp (- a 9.0)))) Esta expresin es equivalente a escribir: Va b = -------e(a-9) ; y el resultado se guardar en la variable b (b = 1.4986x10-6). (SETQ c b) Para este caso el valor de b es asignado a la variable c (c = 1.4986x10-6). (setq a 3) (+ (setq b (* a 2)) (+ b 2)) Reasigna la variable b al valor de a*2, y con ese valor de b entra a realizar la siguiente expresin esta es b+2. (Resulta: 14) (b = 6) (+ (* a 3) (setq a (+ a 3))) En este caso la expresin (* a 3), no es alterada por la reasignacin que se hace a continuacin en la expresin (Setq a (+ a 3)), por tanto el resultado que dar el LISP ser de 15 y la variable a tendr un valor de 6. Las dos ltimas expresiones no son posibles de realizarlas en lenguajes comunes de programacin. Con excepcin del lenguaje "C", que si permite este tipo de asignacin de variables, an cuando la nomenclatura es un tanto ms difcil. Lo que se dice frente a las dos ltimas expresiones que se muestran en la parte superior, permite hacer ciertas puntualizaciones respecto a la manera en que el AutoLISP evala las expresiones, esto es que la evaluacin de una expresin cualquiera la realiza de izquierda a derecha y de los parntesis ms interiores a los ms exteriores. Cuando una expresin se encuentra dentro de otra expresin la totalidad de esta expresin interna es evaluada, pasando luego a la siguiente expresin (que se encuentra a la derecha). Una gran ventaja del usar parntesis dentro de las expresiones es que el usuario nunca escribir una frmula que ser evaluada en forma diferente a la que ste lo desea. Digamos adems que dentro de cualquier expresin matemtica en la que todos sus argumentos son enteros, el resultado ser un valor entero y cualquier parte fraccional ser eliminada. Si algn argumento es real, el resultado ser un real. VIII. USANDO FUNCIONES GET PARA ENTRADA DE DATOS Un grupo de comandos dentro del AutoLISP se pueden usar para ingresar datos a travs del teclado o en algunos casos a travs de marcar uno o dos puntos en el dibujo.
www.sincows.com
admin@sincows.com
Ejemplo (setq ang (getangle "De valor del ngulo: ")) Aparece: De valor del ngulo: 30 Res. Lisp: 0.523598 El tipo de variable que se tiene al usar este comando ser del tipo real. Ejemplos: Command: (setq a (getangle "Angulo: ")) Angulo: 1,1 Second point @1,1 Es equivalente a tipear: 2,2 o @1.41421356<45 0.785398 Valor que responde el AutoLISP y para este caso se guardar en la variable a. VIII.4. GETCORNER Responde con una coordenada en dos dimensiones, que corresponde a la segunda esquina de un rectangulo marcado. Como se entender el dato ser del tipo de lista constituida por dos elementos. El primer elemento se conoce como "punto base", y este siempre deber ser dado Formato: (getcorner Punto_base "Mensaje pantalla entre comillas") Ejemplo: (setq esq (getcorner (list 1 1) "valor de la esquina "))
www.sincows.com
admin@sincows.com
www.sincows.com
admin@sincows.com
Las funciones anteriores n son todas las que se dipone dentro del LISP, pues la intecin es solamente ilustrar como se expresan las funciones dentro del lenguaje al que nos referimos. El LISP dispone adems de instrucciones condicionales, tal es el caso del (IF condicin (accin)), o el (COND). Lazos lgicos como (WHILE) (PROGN), etc.
www.sincows.com
admin@sincows.com
Para mayor claridad, las funciones propias y originales del LISP las escribo con maysculas, mientras que las variables y funciones que se van creando en el desarrollo de un programa las escribo con letras minsculas, lo cual es indiferente para el LISP, ya que ste las transforma a maysculas. 10 Isla Fernandina N42-52 (Ciudadela Jipijapa) Telfono/fax: 920-890, 431-356 Quito-Ecuador
www.sincows.com
admin@sincows.com
ATAN ATOF ATOI ATOM - ATOMLIST BOOLE BOUNDP CADR CAR CDR C????R CAAR CDAR CDDR CAAAR CAADR CADAR CADDR CDAAR CDADR
www.sincows.com
admin@sincows.com
www.sincows.com
admin@sincows.com
INTERS ITOA LAMBDA LAST LENGTH LIST LISTP LOAD LOG LOGAND LOGIOR LSH MAPCAR
www.sincows.com
admin@sincows.com
www.sincows.com
admin@sincows.com
www.sincows.com
admin@sincows.com
- SUBR Tipo de variable (para subrutina) - SYM Tipo de variable (para SYM) - INT Tipo de variable (para nmero entero) - STR Tipo de variable (para string) - FILE Tipo de variable (para nombre de archivo) - REAL Tipo de variable (para nmero real) - ENAME Tipo de variable (para nombre de entidad) - PICKSET Tipo de variable (para PICKSET) - PAGETB Tipo de variable (para PAGETB) - EXSUBR Tipo de variable (para subrutinas externas ADS)