# autolisp

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