Uploaded by horacio_rodriguez_m

autolisp

advertisement
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
Download