Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacion Autolisp 01
Programacion Autolisp 01
P
a
PROGRAMACIÓN Pa
AUTOLISP a/2
T a
a/2 a/3
cenp
cen
a/12
DE AUTOCAD) ceng
a/12
a/3
Sistema de rectas
a/12 paralelas
Figura 2: Mosaico
P
Pa
Formas
homotéticas
cen
a/3
a/3
rad
(Luis Cernuda)
(Antonio Machado)
i
INDICE:
ii
1. PRESENTACIÓN GENERAL DE AUTOLISP
AutoLISP es una adaptación del lenguaje de programación LISP y forma parte integral del paquete
AutoCAD. Autolisp es un pequeño subconjunto del CommonLISP, y por ello se ajusta muy estrechamente a
la misma sintaxis y convenciones, pero consta de muchas funciones específicas de AutoCAD.
AutoLISP es la más potente herramienta para optimizar la ejecución de AutoCAD. Le habilita para
«automatizar» AutoCAD incluso más allá de lo que puede llevar a cabo usando macros.
Con AutoLISP, se pueden escribir programas y generar funciones de macros con un lenguaje potente y
de alto nivel, apropiado para las aplicaciones de gráficos. AutoLISP es flexible y fácil de aprender y utilizar
para los no-programadores, quienes al aprender AutoLISP sólo necesitan conceptos básicos de
programación, tales como:
El código de AutoLISP no se compila 1, se puede teclear el código en la línea de comandos y ver los
resultados inmediatamente haciéndose más sencilla la introducción a este lenguaje para los no iniciados. En
un segundo nivel de aprendizaje resulta mucho más fácil realizar pruebas y depurar cuando este código se
carga desde un archivo, en lugar de volverlo a escribir cada vez que se realiza alguna modificación.
El código de AutoLISP se almacena en archivos de texto ASCII con la extensión *. lsp. La sintaxis de las
expresiones de AutoLISP escritas en los archivos es básicamente la misma que se utiliza para escribirlas en
la solicitud de comando.
1
Se trabaja a este nivel docente sin compilar. Se recomienda consultar los manuales de VisualLISP de la versión 2000
de AutoCad o superior.
1
2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS
El evaluador de AutoLISP procesa las expresiones de acuerdo con el orden y el tipo de datos del
código.
Para poder utilizar plenamente AutoLISP, es necesario entender las diferencias entre los distintos tipos
de datos y el modo en que deben utilizarse.
2.1. Números
Números enteros
Los enteros son números sin coma decimal. Los enteros de AutoLISP son números de 32 bits con signo
cuyos valores están comprendidos entre +2 147 483 648 (231) y –2 147 483 647. Aunque AutoLISP utiliza
internamente valores de 32 bits, los que se transmiten de AutoLISP a AutoCAD y viceversa están limitados
a 16 bits. Por tanto, no pueden transmitirse a AutoCAD valores superiores a +32 767 (215) ni valores
inferiores a –32 768. Los enteros que se utilizan de forma explícita en expresiones de AutoLISP se conocen
como constantes. Números como 2, -56, y 1 200 196 son enteros válidos de AutoLISP.
Números reales
Los números reales son aquellos que contienen la coma decimal. Los comprendidos entre -1 y 1 deben
empezar por cero. (No se admiten formatos como .2 ó 2.)
Los números reales se almacenan en formato de coma flotante de doble precisión, lo cual proporciona
una precisión mínima de 14 dígitos significativos, aunque el área de comandos de AutoCAD muestra sólo 6.
Los números reales pueden expresarse en notación científica, que consta de una e o E opcional seguida
por el exponente del número (por ejemplo, 0.0000041 es lo mismo que 4.1e-6).
Los números reales que se utilizan de forma explícita en expresiones de AutoLISP se conocen como
constantes. Números como 3,1, 0,23, -56,123, y 21 000 000.0 son números reales válidos de AutoLISP.
2.2. Cadenas
Dentro de las cadenas que aparecen entre comillas: la contrabarra (\) permite incluir caracteres de
control (o códigos de escape):
\\ para el carácter \
\e para el carácter ESC
\n para el salto de línea
\r para RETURN
\t para tabulador
Las cadenas entre comillas que se utilizan de forma explícita en expresiones de AutoLISP se conocen
como cadenas de texto o constantes de cadena.
2
2.3. Listas
Las listas de AutoLISP son grupos de valores relacionados, separados por espacios en blanco (uno o
varios se interpretan como uno sólo) e incluidos entre paréntesis.
Las listas proporcionan un método eficaz para almacenar numerosos valores relacionados.
AutoCAD expresa los puntos 3D como una lista de tres números reales.
Ejemplos de listas son: (1.0 1.0 0.0), ("éste" "ése" "aquél") y (1 "UNO").
Las aplicaciones de AutoLISP hacen uso de símbolos o valores constantes, como cadenas, números
reales o enteros, y variables, empleadas para almacenar datos generados durante las ejecución de los
programas.
AutoCAD proporciona tres variables predefinidas que pueden emplearse en las aplicaciones de
AutoLISP:
- PAUSE: está definida como una cadena compuesta que consta sólo de una contrabarra (\). Esta
variable se emplea con la función command para que el programa espere a que el usuario escriba
datos.
- PI: está definida como la constante p (pi). Su valor aproximado es 3.1415926.
- T: está definida como la constante T. Se emplea como valor distinto de nil.
- Nil: símbolo que en Lisp significa “nada” o “vacío”.
Es posible cambiar el valor de estas variables con la función setq. Sin embargo, otras aplicaciones
podrían considerar que sus valores son fiables; por tanto, se recomienda no modificar estas variables.
A estas tres variables, junto con los nombres de funciones del lenguaje y los nombres de funciones
definidas por el usuario, las denominaremos palabras reservadas del lenguaje
Los valores asignados a las variables pueden usarse como respuesta a las solicitudes de comando de
AutoCAD. Esto proporciona una forma de almacenar y reutilizar nombres o números complejos. Si se desea
utilizar el valor de una variable como respuesta a una solicitud de AutoCAD, basta escribir el nombre de la
variable precedido por un signo de admiración (!).
Los conjuntos de selección son grupos compuestos por uno o varios objetos (entidades).
Las rutinas de AutoLISP permiten añadir o suprimir de forma interactiva objetos de los conjuntos de
selección.
3
2.6. Nombres de entidad
A este identificador pueden hacer referencia las funciones de AutoLISP con el fin de permitir la selección
de objetos para un posterior empleo de maneras varias.
Los descriptores de archivo son identificadores alfanuméricos asignados a archivos abiertos por
AutoLISP.
Cuando sea necesario que una función de AutoLISP lea o escriba en un archivo, debe hacerse
referencia a su identificador.
2.8. Subrutinas
Es un símbolo con el nombre de una función predefinida por Autolisp. Pueden ser:
- Internas, cuando pertenecen al conjunto base de Autolisp, incluidas las definidas por el usuario.
- Externas, las que se han definido mediante otras aplicaciones ligadas a Autocad.
4
3. EXPRESIONES DE AUTOLISP
Las instrucciones contenidas en una rutina LISP se ejecutan secuencialmente; trabajan unas sobre lo
realizado por otras, los resultados de las instrucciones anteriores son usadas para llevar a cabo las
instrucciones subsiguientes.
(función argumentos)
Cada expresión comienza con un paréntesis abierto y se compone de un nombre de función seguido de
una lista ordenada de argumentos para dicha función, cada uno de los cuales puede constituir una
expresión por sí mismo. La expresión termina con un paréntesis cerrado.
Cada expresión devuelve un valor que puede ser empleado por una expresión circundante (Anidacion
de expresiones); en caso de que no haya ninguna, AutoLISP devuelve el valor a la línea de comando de
AutoCAD.
La primera función, fun1, tiene dos argumentos, mientras que las otras dos, fun2 y fun3, tienen un
argumento cada una. Las funciones fun2 y fun3 están delimitadas por la función fun1, por lo que sus valores
pasan a fun1 como argumentos. La función fun1 evalúa estos dos argumentos y devuelve el valor a la línea
de comando.
El siguiente ejemplo ilustra el uso de la función *(multiplicación), que acepta uno o más números reales
como argumentos.
Comando: (* 2 27)
54
Dado que este ejemplo no tiene expresión circundante, devuelve el resultado a la línea de comando.
Las expresiones anidadas en otras expresiones devuelven sus resultados a la expresión circundante.
El siguiente ejemplo utiliza el resultado de la función + (suma) como uno de los argumentos de la
función * (multiplicación).
Comando: (* 2 (+ 5 10) )
30
Cuando AutoCAD recibe algún código de AutoLISP, lo transmite al intérprete de AutoLISP, cuyo núcleo
contiene el evaluador. El evaluador lee una línea de código, la evalúa y devuelve el resultado. El código
puede leerse de un archivo o como datos tecleados por el usuario desde la línea de comando, pero en
cualquier caso deberá tener el formato de una expresión de AutoLISP. Al respecto, hay que decir que:
- Una expresión puede ser más larga que una línea.
- Varios espacios en blanco se interpretan como uno sólo.
- Una línea que se inició con ; no es interpretada. Se trata de una línea de comentarios.
- Se puede responder a las solicitudes de comando de AutoCAD con expresiones de AutoLISP.
5
4. RECOMENDACIONES INICIALES PARA LA CODIFICACIÓN DE UNA RUTINA LISP
6
5. FUNCIONES AUTOLISP
FUNCIONES BÁSICAS
FUNCIONES AVANZADAS
7
5.1. FUNCIONES ARITMÉTICAS
+
Suma números
Sintaxis: (+ <n1> <n2> . . . )
Valor retornado: Suma de todos los argumentos numéricos. Ningún argumento devuelve Nil
(+ 1 2) devuelve 3
(+ 1 2 3 4.5) devuelve 10.5
(+ 1 2 3 4.0) devuelve 10.0
-
Sustrae n números
Sintaxis: (- <n1> <n2> . . . )
Valor retornado: La diferencia entre el primer argumento y la suma de los restantes argumentos.
Ningún argumento devuelve Nil
(- 50 40) devuelve 10
(- 50 40.0) devuelve 10.0
(- 50 40.0 2.5) devuelve 7.5
(- 8) devuelve -8
*
Multiplica números
Sintaxis: (* <n1> <n2> . . . )
Valor retornado: Producto de todos los argumentos numéricos. Ningún argumento devuelve Nil
(* 2 3) devuelve 6
(* 2 3.0) devuelve 6.0
(* 2 3 4.0) devuelve 24.0
(* 3 -4.5) devuelve -13.5
(* 3) devuelve 3
/
Divide números
Sintaxis: (/ <n1> <n2> . . . )
Valor retornado: El cociente del primer argumento dividido por el producto de los demás
argumentos.
(/ 100 2) devuelve 50
(/ 100 2.0) devuelve 50.0
(/ 100 20 2) devuelve 2
(/ 100 20 2.0) devuelve 2.5
(/ 4) devuelve 4
(/ 1 2) devuelve 0
(/ 4 (/ 1 2)) devuelve ERROR
(/ 4 (/ 1.0 2)) devuelve 8.0
∼
Devuelve el operador NOT binario (complemento de -1) del argumento
Sintaxis: ( ∼ <entero>)
Valor retornado = -1 - <entero>.
(~ 3) devuelve -4
(~ 100) devuelve -101
(~ -4) devuelve 3
8
1+
Incrementa un número en uno
Sintaxis: (1+ <n> )
Valor retornado = 1+n (entero o real según n sea entero o real.)
(1+ 5) devuelve 6
(1+ -17.5) devuelve -16.5
1-
Disminuye en uno un número.
Sintaxis: (1- <n> )
Valor retornado = n-1 (entero o real según n sea entero o real.)
(1- 5) devuelve 4
(1- -17.5) devuelve -18.5
ABS
Convierte un número a su valor absoluto
Sintaxis: (ABS <n> )
Valor retornado = el valor absoluto de n.
ATAN
Calcula el arcotangente
Sintaxis: (ATAN <n1> [n2]), donde los argumentos n1 y n2 se convierten en números reales antes
de calcular el valor del arco tangente.
Valor retornado = Arco tangente de n1/n2. Valor en radianes entre -π/2 y π/2.
COS
Calcula el coseno de un ángulo expresado en radianes
Sintaxis: (COS <ang> )
Valor retornado = El coseno de ang
SIN
Calcula el seno de un ángulo expresado en radianes
Sintaxis: (SIN <ang> )
Valor retornado = El seno de ang
9
EXP
Calcula el antilogaritmo neperiano de un numero
Sintaxis:(EXP <n> )
Valor retornado: número real igual a en
EXPT
Calcula el resultado de elevar un número a una potencia
Sintaxis:(EXPT <base> <potencia>)
Valor retornado: número real o entero
(expt 2 4) devuelve 16
(expt 3.0 2.0) devuelve 9.0
GCD
Calcula el máximo común denominador de dos enteros
Sintaxis: (GCD <n1> <n2>)
Valor retornado = El valor del máximo común denominador.
LOG
Calcula el logaritmo neperiano de un número real
Sintaxis: (LOG <n> )
Valor retornado = Un número real.
MAX
Extrae el mayor valor de una serie de números
Sintaxis: (MAX <n1> <n2> <n3>……..)
Valor retornado = El mayor valor encontrado.
MIN
Extrae el menor valor de una serie de números
Sintaxis: (MIN <n1> <n2> <n3>……..)
Valor retornado = El menor valor encontrado.
MINUSP
10
REM
Calcula el resto de la división entre dos números
Sintaxis: (REM <n1> <n2>)
Valor retornado: El resto de dividir n1 entre n2.
SQRT
Calcula la raíz cuadrada de un número
Sintaxis: (SQRT <n> )
Valor retornado = Un número real, raíz cuadrada de n
ZEROP
Comprueba si un número es 0
Sintaxis: (ZEROP <elemento>)
Valor retornado: T si el elemento es 0 y nil en caso contrario.
(zerop 0) devuelve T
(zerop 0.0) devuelve T
(zerop 0.0001) devuelve nil.
NUMBERP
11
5.2. FUNCIONES DE ASIGNACIÓN
SETQ
SETVAR
TYPE
Los elementos que dan como resultado nil (como un símbolo no asignado) devuelven nil.
entonces:
12
5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO
READ
STRCASE
STRCAT
STRLEN
Si se especifican varios argumentos cadena, la función devuelve la suma de las longitudes de todos
los argumentos. Si éstos se omiten o se escribe una cadena vacía, el resultado es 0 (cero).
SUBSTR
13
VL-PRINC-TO-STRING
Devuelve la representación en cadena de caracteres de cualquier objeto Lisp como si fuera
presentada mediante la función princ.
Sintaxis: (VL-PRINC-TO-STRING <dato>)
Valor retornado: Una cadena de caracteres que contiene la representación del dato tal y como la
mostraría la función princ.
VL-LIST->STRING
Concatena los caracteres representados en una lista por sus códigos numéricos ASCII.
Sintaxis: (VL-LIST->STRING ‘(entero … ) )
Valor retornado: Una cadena formada por los caracteres cuyos códigos ASCII se incluyen en la lista
pasada como argumento.
VL- STRING->LIST
Convierte una cadena de caracteres en una lista de los códigos numéricos ASCII correspondientes.
Sintaxis: (VL-STRING->LIST <cadena>)
Valor retornado: Una lista con los códigos ASCII correspondientes a los caracteres que integran la
cadena.
14
5.4. FUNCIONES PARA GESTIÓN DE LISTAS
LIST
Como alternativa a utilizar LIST, se puede indicar una lista de forma explícita con la función QUOTE
si la lista no contiene variables ni opciones sin definir. El carácter de comilla ( ' ) se define como la
función QUOTE.
APPEND
CONS
La función CONS también acepta un átomo en lugar del argumento lista, en cuyo caso construye
una estructura denominada pares punteados. En los pares punteados, AutoLISP incluye un punto
entre el primer y el segundo elemento. Un par punteado es un tipo especial de lista, por lo que
algunas funciones que utilizan listas normales no los aceptan como argumento.
LENGTH
15
5.4.2. EXTRACCIÓN DE ELEMENTOS DE UNA LISTA
CAR
CDR
Extrae una nueva lista donde están todos los elemento de la lista menos el primero.
Sintaxis: (CDR <lista>)
Valor retornado: la nueva lista. Si lista está vacía, CDR devuelve nil.
Para obtener el segundo átomo de un par punteado, se puede utilizar la función CDR.
AutoLISP permite concatenar las funciones CAR y CDR hasta en cuatro niveles. Las siguientes son
funciones válidas.
Cada a representa una llamada a CAR y cada d representa una llamada a CDR. Por ejemplo:
En AutoLISP, CADR suele utilizarse para obtener la coordenada Y de un punto 2D ó 3D (el segundo
elemento de una lista de dos o tres números reales). De igual modo, CADDR puede utilizarse para
obtener la coordenada Z de un punto 3D. Por ejemplo, dadas las asignaciones:
16
(caddr pt3) devuelve 3.0
(car (cons 'a 2)) devuelve A
(cdr (cons 'a 2)) devuelve 2
LAST
NTH
ASSOC
Localiza sublistas en una lista de asociaciones utilizando elemento como palabra clave, y donde
éste puede ser cualquier expresión válida susceptible de aparecer como primer elemento de una de
las sublistas.
Las listas de asociaciones se suelen utilizar para almacenar los datos a los que puede acceder
mediante una clave. La función SUBST proporciona un medio apropiado para sustituir el valor
asociado con una clave en una lista de asociaciones.
17
5.4.3. MANIPULACIÓN DE LISTAS
MEMBER
Busca la primera aparición de una expresión en una lista y devuelve el resto de la lista a partir de la
expresión encontrada.
Sintaxis: (MEMBER <expresión><lista>)
Valor retornado: una lista donde el primer elemento es la expresión encontrada y el resto, el resto de
la lista hasta el final. Si no se encuentra la expresión devuelve nil .
REVERSE
Invierte un lista
Sintaxis: (REVERSE <lista>)
Valor retornado: La lista con sus miembros en orden inverso.
LISTP
SUBST
Busca en una lista un miembro especificado y sustituye cada aparición de éste por otro especificado
Sintaxis: (SUBST <elemento nuevo> <elemento viejo> <lista>)
Valor retornado: La lista modificada.
Cuando se utiliza conjuntamente con assoc, subst proporciona una forma útil de sustituir el valor
asociado a una clave de una lista de asociaciones.
(setq lista '((a 10) (b 20)(c 30))) devuelve ((a 10) (b 20)(c 30))
18
FOREACH
Procesa uno a uno los elementos de una lista y evalúa cada expresión para cada uno de los
elemento de la lista
Sintaxis: (FOREACH <nombre-var> <lista> <expresión>.........)
Nombre-var: variable de memoria a la que FOREACH ligará secuencialmente los valores de la
lista suministrada y que normalmente será usada en la expresión.
Valor retornado: El resultado de la última expresión evaluada.
Avanza por la lista, asignando un nombre-var a cada elemento y evalúa cada expresión para todos
los elementos de la lista. Se pueden especificar tantas expresiones como se desee. La función
FOREACH devuelve el resultado de la última expresión evaluada.
equivale a dibujar una marca de punto en los puntos pt1 pt2 y pt3.
ATOM
(setq a ‘(x y z)
b 23)
(atom a) devuelve nil
(atom b) devuelve T
19
5.5. FUNCIONES MONOLÍNEA
APPLY
MAPCAR
Devuelve el resultado de ejecutar la "función" tomando como argumentos de función los elementos
sucesivos de "lista 1" ............."lista n"
Sintaxis: ( MAPCAR <función> <lista 1> .................<lista n> )
Valor retornado: una lista con las sucesivas soluciones.
(setq A 10 B 20 C 30)
(mapcar '1+ (LIST A B C) devuelve la lista (11 21 31)
Ejemplo anterior:
(setq L '( 1 2 3 4 5 6))
(mapcar '1+ L) devuelve la lista (2 3 4 5 6 7)
LAMBDA
Define una función sin darle un nombre. El conjunto de expresiones se aplica sobre los argumentos
Sintaxis: ( LAMBDA < argumentos > < expresión >...............)
Valor retornado: el resultado de la última evaluación.
20
5.6. FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN
FIX
(fix 3) devuelve 3
(fix 3.7) devuelve 3
FLOAT
ATOI
Ejemplo de código que introduce puntos en una lista solicitando el punto por su posición en la lista.
ATOF
ITOA
21
RTOS
Ejemplos: (RTOS 5.6 1 4) => “5.6000 E+00" (RTOS 5.6 2 4) => “5.6000"
(RTOS 5.6 5 4) => “5 5/8"
DISTOF
ANGTOS
ANGTOF
22
ASCII
CHR
Convierte un número entero que representa un carácter ASCII en la cadena de un sólo carácter
correspondiente
Sintaxis: (CHR <entero>)
Valor retornado: una cadena de un sólo carácter.
READ
TRANS
CVUNIT
Convierte un número o lista de números de una unidad de medida a otra (Las cadenas que
representan unidades de medida válidas en esta función están almacenadas en el fichero
ACAD.UNT)
Sintaxis: (CVUNIT <nº o lista> <cadvie> <cadnue>)
cadvie: cadena de unidad de medida vieja.
cadvie: cadena de unidad de medida nueva.
Valor retornado: Un número o lista de números convertida a la unidad de medida nueva.
23
5.7. FUNCIONES DE RELACIÓN
=
Comprueba la igualdad numérica
Sintaxis: (= <átomo> <átomo> <átomo>……….)
Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como
iguales numéricamente, Nil en caso contrario.
Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico ASCII
(= 4 4.0) devuelve T
(= 20 388) devuelve nil
(= 2.4 2.4 2.4) devuelve T
(= 499 499 500) devuelve nil
(= "yo" "yo") devuelve T
(= "yo" "tú") devuelve nil
/=
Comprueba la desigualdad numérica
Sintaxis: (/= <átomo> <átomo>)
Valor retornado: T si los dos argumentos (números o cadenas de caracteres) no se evalúan como
iguales numéricamente, Nil en caso contrario
<
Comprueba la relación “menor que” entre los argumentos
Sintaxis: (< <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente menor que el argumento de su derecha y
Nil en caso contrario.
>
Comprueba la relación “mayor que” entre los argumentos
Sintaxis: (> <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente mayor que el argumento de su derecha y
Nil en caso contrario
24
<=
Comprueba la relación “menor o igual que” entre los argumentos
Sintaxis: (<= <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente menor o igual que el argumento de su
derecha y Nil en caso contrario.
>=
Comprueba la relación “mayor o igual que” entre los argumentos
Sintaxis: (>= <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente mayor o igual que el argumento de su
derecha y Nil en caso contrario.
AND
Comprueba los valores de una serie de expresiones. (Y lógico)
Sintaxis: (AND <exp> <exp> <exp>……….)
Valor retornado: T si todos los argumentos se evalúan con un valor no nulo y Nil en caso
contrario.
OR
Comprueba de izquierda a derecha una serie de expresiones hasta hallar la primera que se evalúa
con un valor no nulo. (O lógico)
Sintaxis: (OR <exp> <exp> <exp>……….)
Valor retornado: T si alguno de los argumentos se evalúa con un valor no nulo y Nil en caso
contrario.
NOT
Modifica el sentido de un predicado: lo que es cierto lo hace falso, y viceversa.
Sintaxis: (NOT <exp> )
Valor retornado: devuelve T si su argumento es falso y Nil si es cierto.
25
EQ
Comprueba si los valores atribuidos a ambas expresiones son idénticas
Sintaxis: (EQ <exp> <exp> )
Valor retornado: T si las dos expresiones están ligadas a los mismos datos y Nil en otro caso.
entonces:
EQUAL
Comprueba si dos expresiones se evalúan con valores iguales
Sintaxis: (EQUAL <exp> <exp> [margen de error] )
Valor retornado: T si las dos expresiones se evalúan igual y Nil en caso contrario.
Si las dos expresiones son números reales se puede incluir un margen de error.
entonces:
=
Comprueba la igualdad numérica
Sintaxis: (= <átomo> <átomo> <átomo>……….)
Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como
iguales numéricamente Nil en caso contrario.
Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico
ASCII.
(= 4 4.0) devuelve T
(= 20 388) devuelve nil
(= 2.4 2.4 2.4) devuelve T
(= 499 499 500) devuelve nil
(= "yo" "yo") devuelve T
(= "yo" "tú") devuelve nil
Comando: (setq a 2 b 2)
2
Comando: (= a b)
T
Comando: (eq a b)
T
Comando: (equal a b)
T
26
5.8. FUNCIONES DE CONDICIÓN
COND
Lee una serie de listas. Evalúa el primer elemento de cada lista (en el orden indicado) hasta que uno
de ellos devuelva un valor distinto de nil. A continuación, evalúa las expresiones que siguen a este
elemento y pasa por alto las restantes listas.
(cond
((< a 20) (setq b (cons 'a a)))
((> a 20) (setq b (list 'a a)))
(t (setq b "b=20"))
)
en los casos:
a = 10 => b = (a . 10) la variable b se evalúa como un par punteado
a = 25 => b = (a 25) la variable b se evalúa como una lista
a = 20 => b = "b=20" la variable b se evalúa como un string
Como se muestra, COND se puede utilizar como una función de tipo case. Es habitual utilizar T
como última (por defecto) expresión de prueba.
Dada una cadena de respuesta de usuario en la variable s, esta función prueba la respuesta y
devuelve 1 si es Y o y, 0 si es N o n y nil en cualquier otro caso.
(cond
((= s "Y") 1) ((= s "y") 1)
((= s "N") 0) ((= s "n") 0)
(t nil)
)
IF
Evalúa una expresión Autolisp basándose en si una expresión de comprobación inicial se evalúa
como no nula
Sintaxis: (IF <test> <expresión si test es /= nil > [expresión si test es = nil ] )
Valor retornado: El valor retornado por expresión evaluada; nil en otro caso.
PROGN
Se puede utilizar PROGN para calcular varias expresiones cuando sólo se espera una expresión.
(if (= a b)
(progn
(princ "\nA = B ")
(setq a (+ a 10) b (- b 10))
)
)
27
5.9. FUNCIONES PARA GESTIÓN DE CICLOS
REPEAT
Evalúa repetidamente una serie de una o más expresiones Autolisp un número determinado de
veces.
Sintaxis: (REPEAT<n> <exp1> <exp2> ……………)
n: Entero que indica el nº de repeticiones a realizar.
Valor retornado: El resultado de la última expresión evaluada
(setq a 10 b 100)
(repeat 4
(setq a (+ a 10))
(setq b (+ b 100))
(setq L '( 1 2 3 4 5 6)
n (length L) i 0 Ln nil
)
(repeat n
(setq elem (nth i L)
elem (1+ elem)
Ln (cons elem ln)
i (1+ i)
)
)
(setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7)
(setq L '( 1 2 3 4 5 6)
n (length L) Ln nil
)
(repeat n
(setq elem (car L)
L (cdr L)
elem (1+ elem)
Ln (cons elem ln)
)
)
(setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7)
28
WHILE
Evalúa repetidamente una serie de una o más expresiones Autolisp basándose en si una expresión
de comprobación inicial se evalúa como un valor nulo o no nulo.
Sintaxis: (WHILE <test> <exp1> <exp2> ……………)
Test: Expresión de comprobación, que hace que las demás expresiones se evalúen mientras
ésta se mantenga distinta de Nil .
Valor retornado: El resultado de la última expresión evaluada
(setq a 10 )
(While (< a 100)
(setq a (+ a 10))
) Define a como 90.
(setq pt1 (getpoint "\n¿pt1?:") pt2 (getpoint "\n¿pt2?:") pt3 (getpoint "\n¿pt3?:")
listap (list pt1 pt2 pt3)
)
(command "_pline")
(foreach punto listap (command punto))
(command "") Equivale a dibujar una polilínea que pasa por los puntos
pt1 pt2 y pt3.
29
5.10. FUNCIÓN PARA CREAR FUNCIONES DE USUARIO
DEFUN
Lista-argumentos: una lista con los argumentos, que puede estar seguida por una barra oblicua
y los nombres de uno o más símbolos locales para la función.
Argumentos: variables que toman valor en la llamada a la función
Símbolos locales: variables que sólo tienen valor en la función que se define.
La barra oblicua debe ir separada del primer símbolo local y del último argumento, si existe, por
un espacio como mínimo. Si no se declara ningún argumento ni símbolo local, se debe escribir
un conjunto vacío de paréntesis tras el nombre de la función.
Valor retornado: La función DEFUN devuelve el nombre de la función que se va a definir. Al invocar
esta función, sus argumentos se evalúan y se asocian a los símbolos correspondientes. La función
devuelve el resultado de la última expresión evaluada.
(SUMA_10 5) devuelve 15
Advertencia: No se debe utilizar nunca el nombre de una función interna o un símbolo como nombre
de función creada por el usuario, ya que quedaría inaccesible.
30
5.11. FUNCIONES GRÁFICAS
ANGLE
Calcula el ángulo que formaría una recta definida por dos puntos con la dirección positiva del eje X
del SCP actual (si los puntos son 3D se proyectan sobre el plano de construcción actual)
Sintaxis: ( ANGLE <pt1> <pt2>)
Valor retornado: Un ángulo en radianes
DISTANCE
Si al menos uno de los puntos facilitados es un punto 2D, DISTANCE no toma en cuenta las
coordenadas Z de los puntos 3D especificados, y devuelve la distancia 2D entre los puntos,
proyectada sobre el plano de construcción actual.
POLAR
INTERS
31
5.12. FUNCIONES DE ENTRADA INTERACTIVA
GETPOINT
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST.
(setq p (getpoint))
(setq p (getpoint "¿Dónde? "))
(setq p (getpoint '(10 20)) respuesta :@40,20 valor retornado: (50.0 40.0 0.0)
GETDIST
Detiene la ejecución del programa para que el usuario introduzca una distancia
Sintaxis: (GETDIST [pt] [mensaje])
pt: punto de base opcional
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la distancia
Valor retornado: Un número real.
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST.
GETANGLE
La función GETANGLE mide los ángulos a partir de cero radianes (definidos mediante la variable de
sistema ANGBASE) aumentando en dirección opuesta a las agujas del reloj. El ángulo resultante se
expresa en radianes con respecto al plano de construcción actual (el plano XY del SCP actual, con
la elevación actual).
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETANGLE.
Para especificar un ángulo, el usuario debe escribir un número en el formato actual de unidades
angulares de AutoCAD. Aunque este formato puede utilizar grados, grados centesimales o cualquier
otra unidad, esta función siempre devuelve el ángulo en radianes. El usuario también puede
designar dos posiciones 2D en la pantalla gráfica para indicar el ángulo a AutoLISP. AutoCAD dibuja
una línea elástica desde el primer punto hasta la posición del cursor en cruz con el fin de facilitar al
usuario la visualización del ángulo.
32
Es importante comprender la diferencia entre el ángulo indicado y el que devuelve GETANGLE. Los
ángulos que se transmiten a GETANGLE se basan en los valores actuales de ANGDIR y
ANGBASE. Sin embargo, una vez que se especifica el ángulo, éste se mide en dirección opuesta a
las agujas del reloj (sin tomar en cuenta el valor de ANGDIR), con cero radianes como valor actual
de ANGBASE. Los siguientes ejemplos de código muestran cómo se pueden utilizar diferentes
argumentos.
GETORIENT
Se recomienda el uso de GETANGLE para obtener un valor de rotación (un ángulo relativo). Y de
GETORIENT para obtener una orientación (un ángulo absoluto).
GETCORNER
Detiene la ejecución del programa para que el usuario introduzca un punto, y traza un rectángulo de
“banda elástica” en la pantalla a medida que el usuario mueve el dispositivo señalador
Sintaxis: (GETCORNER <pt> [mensaje])
pt: Primera esquina del rectángulo.
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la otra esquina.
Valor retornado: El punto introducido por el usuario
33
GETVAR
GETINT
Detiene la ejecución del programa para que el usuario introduzca un número entero.
Sintaxis: (GETINT [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud del entero
Valor retornado: El entero introducido por el usuario.
GETREAL
Detiene la ejecución del programa para que el usuario introduzca un número real
Sintaxis: (GETREAL [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud del número real
Valor retornado: El real introducido por el usuario.
GETSTRING
Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres
Sintaxis: (GETSTRING [espacio] [mensaje])
Espacio: Si este argumento es distinto de nil la cadena introducida puede contener espacios en
blanco. (y debe finalizarse con RETURN ).
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la cadena
Valor retornado: La cadena introducida entrecomillada o una cadena vacía (“”) si el usuario pulsó
Enter sin teclear caracteres.
Si tiene más de 132 caracteres, la cadena sólo devuelve estos caracteres. Si contiene el carácter de
contrabarra (\), éste se convierte en dos caracteres de contrabarra (\\). De esta manera, el valor
resultante puede incluir caminos de nombre de archivo a los que tienen acceso otras funciones.
(setq s (getstring "Escriba su nombre ")) Si se responde Juan se define s como "Juan"
(setq s (getstring T "Escriba su nombre completo: ")) Si responde Juan Díaz Pérez se define
como "Juan Díaz Pérez"
34
GETKWORD
Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres. Esta
función comprueba la validez de lo introducido basándose en una lista de palabras válidas
establecidas usando la función INIGET
Sintaxis: (GETKWORD [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la cadena.
Valor retornado: La cadena introducida o Nil si el usuario pulsó Enter sin teclear caracteres
AutoCAD lo intenta de nuevo si la entrada no es una palabra clave. Si se trata de una entrada nula (
RETURN ), GETKWORD devuelve nil (siempre que se admitan entradas nulas). Esta función
también devuelve nil si antes no se ha realizado una llamada a INITGET que establezca una o
varias palabras clave.
El ejemplo siguiente muestra una llamada inicial a initget que define una lista de palabras clave (Sí y
No) y no admite entradas nulas (valor en bits igual a 1) en la siguiente llamada a getkword:
Este mensaje solicita datos del usuario y define el símbolo x como Sí o No, según la respuesta
proporcionada. Si ésta no coincide con ninguna de las palabras clave o el usuario escribe un valor
nulo, AutoCAD vuelve a mostrar la cadena indicada en el argumento solicitud. Si no se especifica
este argumento, AutoCAD muestra lo siguiente:
Inténtelo de nuevo:
INITGET
Establece las palabras clave que han de usarse con la siguiente llamada a una función introducida
por el usuario. Las funciones que toman en consideración las palabras clave son getint, getreal,
getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel y nentselp. La función
getstring es la única función introducida por el usuario que no las admite.
Sintaxis: (INITGET [bits] [cadena])
Bits: El argumento bits es un número entero binario que admite o rechaza determinados tipos
de datos de usuario. Algunos de los valores que puede tomar junto a su significado asociado:
1: no permite nulos
2: no permite cero
4: no permite negativos
8: no chequea límites del dibujo
64: devuelve una distancia 2D, en lugar de 3D.
Cadena: El argumento cadena define una lista de palabras clave.
Valor retornado: La función initget siempre devuelve nil.
35
GETFILED
Valor del indicador = 1 (bit 0):Se define este bit para solicitar el nombre del archivo que se va a
crear. No debe utilizarse para solicitar el nombre de un archivo existente con el fin de abrirlo. En
este último caso, si el usuario introduce el nombre de un archivo que no existe, el cuadro de diálogo
muestra un mensaje de error en la parte inferior. Si se define este bit y el usuario elige un archivo
existente, AutoCAD presenta una casilla de advertencia y ofrece la posibilidad de seguir o cancelar
la operación.
Valor del indicador = 2 (bit 1):Desactiva el botón Teclearlo. Este bit se define si se llama a la función
GETFILED mientras otro cuadro de diálogo está activo (en caso contrario, obliga a cerrar el otro
cuadro de diálogo).Si no se define este bit, se activa el botón Teclearlo. Cuando el usuario
selecciona el botón, el cuadro de diálogo desaparece y GETFILED devuelve 1.
Valor del indicador = 4 (bit 2):Permite al usuario escribir una extensión de nombre de archivo
arbitraria o bien no escribir ninguna. Si no se define este bit, GETFILED sólo acepta la extensión
especificada en el argumento ext, y si el usuario no la escribe en la casilla de texto File, la añade al
nombre del archivo.
Valor del indicador = 8 (bit 3): Si se define este bit y no se define el bit 0, GETFILED inicia en la
biblioteca una búsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el
orden de búsqueda en la estructura, descompone el camino y sólo devuelve el nombre del archivo.
Esto no ocurre si los archivos que se buscan tienen el mismo nombre pero se encuentran en
distintos directorios.
Si no se define este bit, GETFILED devuelve el nombre completo del archivo, incluido el nombre del
camino. Se define este bit si se utiliza el cuadro de diálogo para abrir un archivo existente cuyo
nombre desea guardar en el dibujo (u otra base de datos).
36
COMMAND
Los argumentos de la función command pueden ser cadenas, números reales, números enteros o
puntos, según solicite la secuencia de mensajes del comando ejecutado. Una cadena nula ("")
equivale a pulsar RETURN en el teclado.
La función command sin argumentos equivale a pulsar ESC y cancela la mayoría de los comandos
de AutoCAD.
La función command devuelve nil.
La función command evalúa los distintos argumentos y los envía a AutoCAD cada vez que aparece
un mensaje que los solicita. Presenta como cadenas los nombres de los comandos y las opciones,
como listas de dos números reales los puntos 2D y como listas de tres números reales los puntos
3D.
Se ejecuta:
Comando: linea
Desde el punto: p1
Al punto:p2
Al punto: ""
Comando: circulo 3P/2P/TTR/<centro>:p1
Diámetro/<Radio> <10>: d
Diámetro <20>: 40
Comando: nil
Si el programa lisp se va a utilizar con versiones de AutoCAD para idiomas extranjeros, los nombres
de los comandos deben ir precedidos de un subrayado ( _ ), para que puedan traducirse.
Las funciones indicadas por el usuario getxxx (getangle, getstring, getint, getpoint, etc.) no se
pueden utilizar dentro de la función command.
Se crea un grupo DESHACER explícitamente alrededor de cada comando utilizado con la función
command. Si un usuario escribe H (o DESHACER) después de ejecutar una rutina de AutoLISP,
sólo se deshará el último comando. Si se introduce DESHACER más veces, se retrocederá por los
comandos utilizados en dicha rutina. Si se desea que un grupo de comandos se considere un grupo
(o toda la rutina), se utilizan las opciones Inicio y Fin de DESHACER.
37
OSNAP
El funcionamiento de esta orden depende del valor de la variable del sistema “APERTURE“ y del
punto de vista 3D actual.
38
5.13. FUNCIONES PARA GESTIÓN DE FICHEROS
LOAD
Si falla: valor vuelto por la función en el caso de que la carga del fichero fracase. Si no se
proporciona este argumento, la función presenta un mensaje de error AutoLISP
Valor retornado: El de la última expresión evaluada, si la carga es buena.
Los ficheros que se quiere sean cargados al iniciarse la sesión del editor de dibujo tendrán que estar
especificados en el fichero ACAD.LSP que Autocad carga automáticamente.
Cuando un programa define varias funciones deben estar todas codificadas en un único fichero que
se cargará con la función LOAD.
OPEN
Valor retornado: El descriptor de fichero utilizado por las funciones de Entrada/Salida a fichero, por
tanto se deberá atribuir a un símbolo que permita referirse a ese descriptor.
2
Nota En sistemas DOS, algunos programas y editores de texto escriben los archivos de texto con una marca de fin de
archivo (CTRL Z, código ASCII decimal 26) al final del texto. Cuando lee un archivo de texto, el DOS devuelve un
estado de fin de archivo si encuentra una marca CTRL Z, aunque a ésta le sigan más datos. Si va a utilizar el modo "a"
de OPEN para añadir datos a archivos creados en otros programas, cerciórese de que éstos no insertan marcas CTRL
Z al final de sus archivos de texto.
39
El argumento nombre de fichero puede incluir un prefijo de directorio. En los sistemas DOS es
posible usar una letra de unidad y una contrabarra (\) en lugar de una barra oblicua (/), aunque no
debe olvidarse que en una cadena es necesario especificar dos contrabarras (\\) para obtener una.
CLOSE
Por ejemplo, el siguiente código calcula el número de líneas del archivo unarchivo.txt y define la
variable ct en ese número.
FINDFILE
El nombre completo que devuelve FINDFILE puede utilizarse con la función OPEN.
Si ninguno de los directorios del camino de búsqueda de la biblioteca contiene el archivo no esta.
40
5.14. FUNCIONES DE LECTURA Y ESCRITURA
5.14.1. ESCRITURA
PRIN1
Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo abierto en modo
de escritura.
Sintaxis: (PRIN1 [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión.
Es posible llamar a la función prin1 sin argumentos, en cuyo caso devuelve (e imprime) la cadena
nula.
PRINC
Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo. (La diferencia
con PRIN1 es que PRINC evalúa los caracteres de control que aparezcan en la expresión.).
Sintaxis: (PRINC [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión.
Imprime un salto de línea, una expresión AutoLISP y un espacio en el área de órdenes o lo escribe
en un archivo.
Sintaxis: (PRINT [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión
PROMPT
WRITE-CHAR
41
WRITE-LINE
Escribe una cadena de caracteres en al área de órdenes o bien en un archivo (evalúa caracteres de
control.
Sintaxis: (WRITE-LINE <”cadena”> [descriptor de fichero])
Valor retornado: La cadena de caracteres.
TERPRI
5.14.2. LECTURA
READ-CHAR
Lee caracteres procedentes del bufer del teclado o de un archivo abierto en modo de lectura.
Sintaxis: (READ-CHAR [descriptor de fichero])
Valor retornado: El código ASCII para el carácter leído.
Por ejemplo, si se tiene en cuenta que el búfer de entradas por teclado está vacío,
(read-char)
espera a que se escriban datos. Si introduce los caracteres ABC seguidos de RETURN, read-char
devuelve 65 (el código ASCII decimal correspondiente a la letra A). Las tres llamadas siguientes a
read-char devuelven 66, 67 y 10 (línea nueva), respectivamente. Si se efectúa otra llamada, read-
char vuelve a esperar a que se escriban datos.
READ- LINE
Lee una cadena de caracteres procedentes del bufer del teclado o de un archivo abierto en modo de
lectura.
Sintaxis: (READ-LINE [descriptor de fichero])
Valor retornado: la cadena leída. (Cuando se alcanza el final de un archivo de lectura el valor
retornado es nil )
(read-line f)
devuelve la siguiente línea de entrada del archivo, o nil si ha llegado al final del archivo.
42
Ejemplo ejecutado a nivel de línea de órdenes de Autocad:
(SETQ A 10 B “HOLA”)
“HOLA”
(PRIN1 A)
1010
(PRIN1 “\nCASA”)
“\nCASA”“\nCASA”
(PRINC A)
1010
(PRINC “\nCASA”)
“CASA“\nCASA”
(PRINT A)
10 10
(PRINT “\nCASA”)
“\nCASA” “\nCASA”
(PROMPT “\nCASA”)
CASAnil
(WRITE-CHAR A)
10
(WRITE-CHAR 67)
C67
(WRITE-LINE B)
HOLA
“HOLA”
(WRITE-LINE “\nCASA”)
CASA
“CASA”
43
5.15. FUNCIONES DE ORDENACIÓN
ACAD_STRLSORT
(setq mes '("ene" "feb" "mar" "abr" "may" "jun" "jul" "ago" "sep" "oct" "nov" "dic"))
VL-SORT
Ordena todos los elementos de una lista de acuerdo con una función de comparación dada. En
determinados casos puede eliminar los objetos duplicados.
Sintaxis: (VL-SORT lista función)
Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva
T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio
de ordenación.
Valor retornado: La lista con los elementos de la lista original ordenados, aunque no se garantiza la
conservación de todos los elementos originales (elimina las cadena y los enteros duplicados).
VL-SORT-I
Ordena todos los elementos de una lista de acuerdo con una función de comparación dada, y
devuelve sus índices. No elimina duplicados.
Sintaxis: (VL-SORT-I lista función)
Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva
T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio
de ordenación.
Valor retornado: Una lista que contiene los índices de los elementos de la lista, ordenados conforme
al criterio establecido por la función de comparación.
El orden en la lista ordenada sería: "f" "d" "c" "a"; donde "f" es el tercer elemento (índice 2) en la lista
original, "d" es el segundo elemento (índice 1) en la lista, y así sucesivamente.
Los índices se pueden emplear para recuperar mediante la función NTH los valores originales.
44
5.16. FUNCIONES DE CONTROL DE PANTALLA
REDRAW
GRAPHSCR
TEXTSCR
TEXTPAGE
VPORTS
45
5.17. OTRAS FUNCIONES DE UTILIDAD
EVAL
Evalúa expresiones
Sintaxis:(EVAL <expresión>)
Valor retornado: El valor retornado por la expresión evaluada
(setq a 123)
(setq b 'a)
entonces:
QUOTE
(quote a) devuelve A
(quote cat) devuelve CAT
(quote (a b)) devuelve (A B)
'a devuelve A
'cat devuelve CAT
'(a b) devuelve (A B)
Los tres últimos ejemplos no tienen efecto si se introducen directamente desde el teclado como
respuesta a un mensaje de AutoCAD.
NULL
QUIT
46
TEXTBOX
Mide un objeto de texto designado y devuelve las coordenadas diagonales del cuadro donde está
contenido el texto
Sintaxis: (TEXTBOX <lista_e>)
lista_e: es una lista de definición de entidad en la forma devuelta por ENTGET y debe definir un
objeto de texto. Debe definir un objeto de texto. Si en lista_e se omiten los campos que definen
parámetros de texto distintos del texto en sí, se utilizan los valores actuales (por defecto).
Valor retornado: Si textbox se ejecuta satisfactoriamente, devuelve una lista de dos puntos, en caso
contrario devuelve nil.
Lo mínimo que TEXTBOX acepta como lista es el texto en sí.
(textbox '((1 . "Hola mundo."))) puede devolver ((0.0 0.0 0.0) (0.8 0.2 0.0))
47
6. FUNCIONES AVANZADAS DE PROGRAMACIÓN AUTOLISP
LISP BÁSICO: El objetivo ha sido la incorporación de ALTAS en la base de datos geométrica. La gran
limitación consiste, por consiguiente, en plantear MODIFICACIONES.
Nombre de entidad: clave alfanumérica asociada a cada entidad del dibujo en el formato interno.
(puntero capaz de producir una lectura en la base de datos del dibujo)
Registro de entidad: Información relativa a la entidad estructurada como una lista de asociaciones
que utilizan como claves los códigos estudiados para la estructura interna en el formato DXF.
0
LINE
5 Registro de la entidad línea utilizado por Autolisp
20
100 ((-1 . <Nombre de objeto: 3c50500>) (0 . "LINE") (5 . "20")
AcDbEntity (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine")
8
0 (10 112.187 131.211 0.0) (11 233.336 229.388 0.0) (210 0.0 0.0 1.0))
100
AcDbLine
10
112.186506
20
131.211019
30
0.0
11
233.335573
21
229.387734
31
0.0
48
6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS
(SETQ)
Creación interactiva: SSGET
Creación automática: SSGET "X" filtros
Modos de designación de Autocad
(SETQ)
SSLENGTH
SSNAME
SSMEMB
SSADD
SSDEL
(SETQ)
ENGET
(SETQ)
ENTLAST
ENTNEXT
ENTSEL
ENTDEL
ASSOC
CONS
SUBST
Órdenes relacionadas con la manipulación de listas
ENTMAKE
ENTMOD
ENTUPD (entidades compuestas).
49
6.4. DESCRIPCIÓN DE LAS FUNCIONES
SSGET
Solicita al usuario que designe objetos (entidades) y devuelve un conjunto de selección (un puntero
a la información del conjunto).
Sintaxis: (SSGET [modo] [pt1 [pt2]] [lista_pt] [lista_filtros])
Modo: es una cadena que especifica el método de designación de objetos. Los modos válidos
son "_W", "_WP", "_C", "_CP", "_L", "_P", "_I" y "_F", que corresponden a los métodos de
designación Ventana, PolígonoV, Captura, PolígonoC, Ultimo, Previo, Implícito y Borde.
Otro valor optativo de modo es "X", que selecciona toda la base de datos.
pt1 y pt2: especifican puntos relevantes para la designación. Introducir un punto sin ningún
argumento modo equivale a seleccionar un objeto designando un solo punto.
Lista_pt: especifican puntos relevantes para la designación para los casos en que sea
necesario.
lista_filtros: es una lista de asociaciones que especifica propiedades de objeto. Los objetos que
coinciden con la lista_filtros se añaden al conjunto de selección.
Si se omiten todos los argumentos, SSGET muestra la solicitud Designar objetos para que el
conjunto de selección pueda construirse de forma interactiva.
Valor retornado: un conjunto de selección (un puntero a la información del conjunto)
Los conjuntos de selección pueden contener objetos de los espacios papel y modelo, pero cuando
el conjunto se utiliza en una operación, los objetos del espacio no activo se descartan. Los
conjuntos de selección devueltos por SSGET sólo contienen entidades principales (ningún atributo
ni vértice de polilínea).
(ssget):
Solicita al usuario que realice una designación general de objetos y los incluye en un conjunto
de selección
(ssget "_P"):
Crea un conjunto de selección con los últimos Objetos seleccionados
(ssget "_L"):
Crea un conjunto de selección con los últimos objetos visibles añadidos a la base de datos
(ssget '(2 2)):
Crea un conjunto de selección con un objeto que pasa por el punto (2,2)
(ssget "_W" '(0 0) '(5 5)):
Crea un conjunto de selección con los objetos incluidos en la ventana desde (0,0) hasta (5,5).
(ssget "_C" '(0 0) '(1 1)):
Crea un conjunto de selección con los objetos que pasan por el rectángulo de (0,0) a (1,1)
(ssget "X"):
Crea un conjunto de selección con todos los objetos de la base de datos
(ssget "X" lista_filtros):
Analiza la base de datos y crea un conjunto de selección de objetos que coinciden con la
lista_filtros.
(ssget lista_filtros ):
Solicita al usuario que realice una selección general de objetos y coloca sólo los objetos que
coinciden con y los Incluye en un conjunto de selección
(ssget "_P" lista_filtros):
Crea un conjunto de selección con los últimos objetos seleccionados que coinciden con la
lista_filtros
50
Los siguientes ejemplos de ssget requieren que se suministre una lista de puntos a la función. La
variable lista_pt no puede contener puntos que definan segmentos con longitud cero.
AutoLISP no permite manejar más de 128 conjuntos abiertos a la vez. Si se alcanza este límite,
AutoCAD se niega a crear más conjuntos de selección y devuelve nil a todas las llamadas SSGET.
SSLENGTH
SSNAME
SSMEMB
Por ejemplo, si la entidad e1 pertenece al conjunto de selección cs1 pero e2 no, entonces
51
SSADD
SSDEL
Por ejemplo, si la entidad e1 pertenece al conjunto de selección cs1 pero e2 no, entonces
52
ENTGET
Busca en la base de datos la entidad cuyo nombre se proporciona y devuelve una lista con los datos
de su definición (registro de entidad)
Sintaxis: ( ENTGET < nombre de entidad> )
Valor retornado: lista de asociaciones (pares punteados o listas normales) que componen el
registro de entidad
Los datos que ENTGET devuelve son codificados como una lista de asociaciones, desde la
que se pueden extraer elementos mediante la función ASSOC. Los objetos de esta lista tienen
asignados códigos de grupo DXF de AutoCAD para cada parte de la información de la entidad.
Supongamos que el último objeto creado en el dibujo es una línea cuyos puntos iniciales y finales
son (1,2) y (6,5), respectivamente. Mediante la función entlast, puede recuperar el nombre de la
entidad del último objeto y transmitirlo a entget.
(entget (entlast))
Los códigos de grupo DXF que utiliza AutoLISP no son exactamente iguales que los de los archivos
DXF. Al igual que ocurre con DXF, los elementos de encabezamientos de entidades (color, tipo de
línea, grosor, indicador de atributo e identificador de entidad) se exportan sólo en el caso de que no
contengan valores por defecto. A diferencia de DXF, los campos optativos de definición de
entidades se exportan tanto si mantienen los valores por defecto como si no, lo cual simplifica el
proceso. Los programas siempre pueden asumir que estos campos están presentes en los
algoritmos generales que les afectan. Además, a diferencia de DXF, las coordenadas X, Y y Z se
agrupan en una lista de puntos, como (10 1.0 2.0 3.0), en lugar de aparecer como grupos 10, 20 y
30 separados.
El primer elemento de la lista (-1) contiene el nombre de esta entidad. Los pares de puntos
independientes, que representan los valores, se pueden extraer mediante ASSOC, utilizando CDR
para obtener sus valores.
Las sublistas para puntos no son pares punteados como el resto. El CDR de la sublista es el valor
del grupo por convención. Como un punto es una lista de dos (o tres) números reales, el grupo
completo es una lista de tres (o cuatro) elementos. El CDR del grupo es una lista que representa un
punto, de modo que se mantiene la convención de que CDR siempre devuelve el valor.
53
CÓDIGOS DE GRUPO BÁSICOS INTERESANTES
Se presentan aquí algunos códigos de grupo (los que se usarán más frecuentemente). Para conocer los
demás se recomienda la consulta al manual de personalización de Autocad.
CÓDIGO VALOR
-1 Nombre de entidad
0 Tipo de entidad
1 Valor del texto (la propia cadena)
2 Nombre: bloques, etc
3,4 Otros valores de nombre o de texto
6 Nombre de tipo de línea
7 Nombre de estilo de texto
8 Nombre de capa
PUNTO PRIMARIO: Punto inicial (línea), punto de colocación(texto), centro (círculo),
10
punto de inserción de un bloque
11 Punto final
38 Elevación
39 Altura de objeto
40 a 48 radios de circulo, Altura de texto, factores de escala. .....
50 a 58 ángulos
62 Número de color
210 Orientación de la altura de objeto
ENTLAST
Devuelve el nombre del último objeto principal (entidad) no suprimido del dibujo
Sintaxis: (ENTLAST)
Valor retornado: El nombre de entidad
La función ENTLAST se suele utilizar para obtener el nombre de la entidad que se ha añadido con
la función COMMAND.
ENTNEXT
Devuelve el nombre del siguiente objeto (entidad) del dibujo. La función ENTNEXT devuelve tanto
las entidades principales como las subentidades. Las entidades seleccionadas mediante SSGET
son entidades principales, no atributos de bloques ni vértices de polilíneas. Para acceder a la
estructura interna de estas entidades complejas, se utiliza ENTNEXT que permite llegar a todas las
subentidades
Sintaxis: (ENTNEXT [nombre_ent]).
Valos retornado:
Si se llama a ENTNEXT sin argumentos, devuelve el nombre de la primera entidad no
suprimida de la base de datos.
Si ENTNEXT se llama con un argumento de nombre de entidad nombre_ent, devuelve el
nombre de la primera entidad no suprimida que sigue a nombre_ent en la base de datos.
Si nombre_ent es la última entidad de la base de datos, devuelve nil.
Forma de uso: Una vez que se haya obtenido el nombre de la subentidad adecuada, se puede
trabajar con ella como con cualquier otra entidad. Si para ello se utiliza ENTNEXT, se puede buscar
la entidad original aproximándose con ENTNEXT hasta que se encuentre una entidad SEQEND y, a
continuación, extrayendo el grupo -2 de la entidad, que es el nombre principal de entidad.
54
(setq e1 (entnext)) Asigna e1 al nombre de la primera entidad del dibujo
(setq e2 (entnext e1)) Define e2 como el nombre de la entidad que sigue a e1
(defun lastent (/ a b)
(if (setq a (entlast)) Obtiene la última entidad principal
(while (setq b (entnext a))
si contiene subentidades, crea un bucle hasta la última
subentidad
(setq a b) ) a: devuelve la última entidad o subentidad principal
)
)
ENTSEL
La siguiente secuencia de comandos de AutoCAD ilustra el uso de la función entsel y la lista que
devuelve:
Comando: linea
Desde el punto: 1,1
al punto: 6,6
al punto: ENTER
Comando: (setq e (entsel "Designe un objeto: "))
Designe un objeto: 3,3
(<<Nombre de entidad: 60000014> (3.0 3.0 0.0))
ENTDEL
La función ENTDEL sólo actúa con entidades principales. Los atributos y vértices de polilíneas no
pueden eliminarse sin tener en cuenta la entidad original. Puede utilizar la función COMMAND para
ejecutar los comandos ATREDIT o EDITPOL con el fin de modificar subentidades.
En las definiciones de bloque no se pueden borrar entidades. Sin embargo, con ENTMAKE, se
puede cambiar la definición completamente, con excepción de la entidad que desea suprimir.
55
ENTMAKE
Crea una nueva entidad (objeto gráfico) en el dibujo. La función ENTMAKE puede definir entidades
tanto gráficas como no gráficas.
Sintaxis: (ENTMAKE [lista_ent])
El argumento lista_ent debe ser una lista con datos de definición de entidad en un formato
similar al devuelto por la función ENTGET. El argumento lista_ent debe contener toda la
información necesaria para definir la entidad Si se omite dicha información, ENTMAKE
devuelve nil y no se admite la entidad. Si omite información de la definición optativa (como la
capa), ENTMAKE utiliza el valor por defecto.
Valor retornado: Si ENTMAKE crea correctamente la nueva entidad, devuelve la lista de información
de la definición de la entidad. Si ENTMAKE no puede crear la entidad, devuelve nil.
Forma de uso: Un método para crear una entidad consiste en obtener la información de definición
de una entidad con la función ENTGET, modificarla y transmitir los datos revisados a la función
ENTMAKE. Antes de crear una entidad ENTMAKE, se debe verificar si los nombres de capa, tipo de
línea y color indicados son correctos. Al indicar un nombre de capa nuevo, ENTMAKE crea la capa
de forma automática.
El código siguiente crea un círculo rojo, con centro en el punto (4,4) y radio 1. Los campos optativos
de capa y tipo de línea se han omitido, por lo que se mantienen los valores por defecto.
(entmake
'((0 . "CIRCLE") (62 . 1) Tipo de objeto y color
(10 4.0 4.0 0.0) (40 . 1.0) ) Radio y Centro
ENTMOD
Modifica los datos de la definición de un objeto (entidad) Al actualizar la entidad principal, ENTMOD
la modifica y actualiza su imagen en la pantalla.
Sintaxis: (ENTMOD <lista_ent>)
La función ENTMOD se transmite a una lista (lista_ent) en el formato que devuelve ENTGET y
actualiza la información de base de datos correspondiente al nombre de entidad especificado por el
grupo -1 en lista_ent.
Valor retornado: El registro de entidad
Forma de uso: El mecanismo principal por el que AutoLISP actualiza la base de datos consiste en
recuperar las entidades con ENTGET, modificar la lista que las define y actualizarlas en la base de
datos con ENTMOD. La función ENTMOD puede definir objetos tanto gráficos como no gráficos.
(setq en (entnext)) Asigna en al nombre de la primera entidad del dibujo
(setq ed (entget en)) Define ed como los datos de la entidad en
(setq ed (subst (cons 8 "0") (assoc 8 ed) ed ) )
Cambia el grupo de capas de ed a la capa 0
(entmod ed) Modifica la capa de la entidad en el dibujo
ENTUPD
56
Ejemplo completo
(DEFUN C:TTT ()
(PRIN1 "SEÑALAR ENTIDADES PARA EL CONJUNTO DESIGNADO")
(SETQ CD1 (SSGET)
N1 (SSLENGTH CD1)
I1 0
I2 0
I3 0
F1 (OPEN "d:\\docencia\\DATOS" "w")
)
(PRINT (STRCAT "CD1=" (ITOA N1) ))
(REPEAT N1
(SETQ NENT (READ (STRCAT "ENT" (ITOA I1)))
ENT(SSNAME CD1 I1)
RENT (ENTGET ENT)
I1 (+ 1 I1)
)
(PRINT "CD1" F1)
(PRINT NENT F1)
(PRINT RENT F1)
)
(CLOSE F1)
)
(DEFUN C:TTT ()
(PRIN1 "SEÑALAR ENTIDADES PARA EL CONJUNTO DESIGNADO")
(SETQ CD1 (SSGET)
CD2 (SSGET "X" '( (8 . "1")))
CD3 (SSGET "X" '((0 . "TEXT")))
N1 (SSLENGTH CD1)
N2 (SSLENGTH CD2)
N3 (SSLENGTH CD3)
I1 0
I2 0
I3 0
F1 (OPEN "D:\\docencia\\DATOS" "w")
)
(PRINT (STRCAT "CD1=" (ITOA N1)))
(PRINT (STRCAT "CD2=" (ITOA N2)))
(PRINT (STRCAT "CD3=" (ITOA N3)))
(REPEAT N1
57
(REPEAT N2
58
7. CÓDIGOS Y MENSAJES DE ERROR DE AUTOLISP
En este apartado se tratan los mensajes de error que se pueden encontrar mientras se escriben y
depuran funciones AutoLISP. La mayoría de estos mensajes señalan errores de programación en AutoLISP,
como:
Los mensajes que Autolisp presenta por defecto son los siguientes:
- Los argumentos de defun no pueden tener el mismo nombre: Una función definida con varios
argumentos que tengan el mismo nombre fallará y generará este mensaje.
- AutoCAD rechazó la función: Los argumentos suministrados a una función de AutoCAD no son
válidos (como en setvar con una variable de sistema de sólo lectura o tblnext con un nombre de tabla
no válido) o la propia función no es válida en el contexto actual. Por ejemplo, no puede utilizar una
función getxxx de introducción de datos del usuario dentro de la función command.
- Tipo de argumento erróneo: Se ha pasado un tipo de argumento incorrecto a una función. (Por
ejemplo, no se puede obtener la strlen de un número entero.)
- Bad association list: La lista suministrada a la función assoc no está formada por listas de valor clave.
- Bad ENTMOD list: El argumento suministrado a entmod no es una lista de datos de entidades
adecuada (tal y como lo devuelve entget).
- Bad ENTMOD list value: Una de las sublistas de la lista de asociación suministrada a entmod
contiene un valor erróneo.
- Lista de argumento formal inadecuada: Al evaluar esta función, AutoLISP ha detectado una lista de
argumento formal no válida. Quizás no se trate de una función, sino más bien de una lista de datos.
- Función incorrecta: El primer elemento de la lista no es un nombre de función válido; quizás se trate
de un nombre de variable o de un número. Este mensaje también puede indicar que la función
especificada no está bien definida
- Lista incorrecta: Se ha suministrado una lista con errores de forma a una función. Esto puede suceder
si un número real empieza con un separador decimal. Ha de incluir un cero inicial en este caso.
- Lista de puntos incorrecta: La solicitud F, CP o WP lleva adjunta una lista nula o con elementos que
no son puntos. Se utilizan con ssget y grvecs.
- Tipo de nodo erróneo en la lista: La función foreach ha encontrado un tipo de elemento no válido.
59
- Argumento de puntos incorrecto valor de punto incorrecto: Se ha pasado un punto mal definido (una
lista de dos números reales) a una función que esperaba un punto. Un número real no puede
empezar por un separador decimal; en dicho caso, hay que incluir el cero inicial.
- Detectado número real incorrecto: Se ha intentado transmitir un número real no válido de AutoLISP a
AutoCAD.
- Bad ssget list: El argumento suministrado a ssget "X") no es una lista de datos de entidad adecuada
(tal y como devuelve entget)
- Bad ssget list value: Una de las sublistas de la lista de asociaciones suministrada a (ssget "X")
contiene un valor erróneo.
- Cadena modo ssget incorrecta: Este error se produce cuando ssget recibe una cadena no válida en el
argumento modo.
- Lista de xdata incorrecta: Este error se genera cuando xdsize, ssget, entmod, entmake o txtbox recibe
una lista de datos de entidad extendida con errores de forma.
- Se requiere punto de base: Se ha llamado a la función getcorner sin el argumento de punto base
obligatorio.
- Boole arg1 0 or 15: El primer argumento de la función booleana ha de ser un número entero entre 0 y
15.
- Imposible evaluar la expresión: Separador decimal mal colocado o alguna otra expresión incorrecta.
- No es posible abrir (archivo) para entrada; fallo de LOAD: No se ha encontrado el archivo designado
en la función load, o el usuario no tiene permisos de lectura sobre ese archivo.
- Imposible volver a entrar en AutoLISP: Una función activa está utilizando el búfer de comunicación
AutoCAD/AutoLISP; no se podrá llamar a otra nueva función hasta que la actual haya finalizado.
- Interrupción desde el teclado: El usuario ha tecleado CTRL+C durante el proceso de una función.
- Desbordamiento en división: La división por un número muy pequeño ha dado como resultado un
cociente no válido.
- Exceeded maximum string length. Se ha pasado a una función una cadena con más de 132
caracteres.
- Extra right paren: Se ha encontrado uno o más paréntesis cerrados de los necesarios.
- File not open: El descriptor de archivo para la operación de E/S no es el de un archivo abierto.
- File size limit exceeded: Un archivo ha superado el límite de tamaño permitido por el sistema
operativo.
- Floating-point exception: (Sólo sistemas UNIX.) El sistema operativo ha detectado un error aritmético
de coma flotante.
- Función cancelada: El usuario ha tecleado CTRL+C o ESC (cancelar) en respuesta a una solicitud de
datos.
60
- Function undefined for argument: El argumento pasado a log o sqrt sobrepasa los límites permitidos.
- Function undefined for real: Se ha suministrado un número real como argumento de una función que
exige un número entero; por ejemplo, (lsh val 1.2).
- Illegal type in left: El archivo .lsp no es ASCII puro, sino que se ha guardado con un programa de
tratamiento de textos e incluye códigos de formato.
- Número incorrecto de argumentos. La función quote sólo espera un argumento concreto, pero se le
han proporcionado otros.
- Número incorrecto de argumentos para una función: El número de argumentos para la función creada
por el usuario no coincide con el número de argumentos formales especificado en defun.
- Solicitud inadecuada de datos sobre lista de comandos: Se ha encontrado una función de comando
pero no se puede ejecutar porque hay otra función activa o porque el intérprete de comandos no está
completamente inicializado. Este error puede producirse desde una llamada a la función command en
acad.lsp, acadr13.lsp o en un archivo .mnl.
- Insufficient node space: No hay espacio suficiente en la pila de almacenamiento para la acción
solicitada. Consulte el capítulo 15, "Gestión de memoria".
- Insufficient string space. No hay espacio en la pila de almacenamiento para la cadena de texto
especificada. Consulte el capítulo 15, "Gestión de memoria".
- Invalid argument: Tipo de argumento erróneo o argumento sobrepasa los límites permitidos.
- Lista de argumentos no válida: Se ha pasado a una función una lista de argumentos que contiene
errores.
- Invalid dotted pair: Los pares punteados son listas que contienen dos elementos separados por la
construcción espacio-punto-espacio. Este mensaje de error puede deberse a un número real que
empieza por el separador decimal, en cuyo caso ha de incluir el cero inicial.
- Valor de número entero no válido: Se ha encontrado un número menor que el entero más pequeño o
mayor que el número entero más grande.
- Malformed list: Se ha terminado prematuramente una lista que se estaba leyendo en un archivo. La
causa más común es una incoherencia en el emparejamiento de las aperturas y cierres de paréntesis
o comillas.
- Misplaced dot: Un número real comienza con el separador decimal. Ha de incluir un cero inicial en
este caso.
- Función nula: Se ha intentado evaluar una función que tiene una definición vacía.
61
- Quitar/salir abandonar: Se ha llamado a la función quit o exit.
- Too few arguments: Se han pasado pocos argumentos a una función integrada.
62
8. ÍNDICE DE FUNCIONES
- ............................................................................. 8 IF ........................................................................... 27
∼ ............................................................................. 8 INITGET ................................................................. 35
* ............................................................................. 8 INTERS .................................................................. 31
/ ............................................................................. 8 ITOA....................................................................... 21
/= ........................................................................... 24 LAMBDA................................................................ 20
+ ............................................................................. 8 LAST ...................................................................... 17
< ........................................................................... 24 LENGTH................................................................. 15
<=........................................................................... 25 LIST........................................................................ 15
= ..................................................................... 24, 26 LISTP ..................................................................... 18
> ........................................................................... 24 LOAD ..................................................................... 39
>=........................................................................... 25 LOG........................................................................ 10
1- ............................................................................. 9 MAPCAR................................................................ 20
1+ ............................................................................. 9 MAX ....................................................................... 10
ABS ......................................................................... 9 MEMBER ............................................................... 18
ACAD_STRLSORT ............................................... 44 MIN......................................................................... 10
AND ....................................................................... 25 MINUSP ................................................................. 10
ANGLE................................................................... 31 NTH ........................................................................ 17
ANGTOF ................................................................ 22 NULL...................................................................... 46
ANGTOS................................................................ 22 NUMBERP ............................................................. 11
APPEND ................................................................ 15 OPEN ..................................................................... 39
APPLY ................................................................... 20 OR .......................................................................... 25
ASCII ..................................................................... 23 OSNAP................................................................... 38
ASSOC .................................................................. 17 POLAR................................................................... 31
ATAN ....................................................................... 9 PRIN1..................................................................... 41
ATOF ..................................................................... 21 PRINC .................................................................... 41
ATOI ...................................................................... 21 PRINT..................................................................... 41
ATOM .................................................................... 19 PROGN .................................................................. 27
CAR ....................................................................... 16 PROMPT ................................................................ 41
CDR ....................................................................... 16 QUIT....................................................................... 46
CHR ....................................................................... 23 QUOTE................................................................... 46
CLOSE................................................................... 40 READ ............................................................... 13, 23
COMMAND ............................................................ 37 READ- LINE........................................................... 42
COND .................................................................... 27 READ-CHAR.......................................................... 42
CONS..................................................................... 15 REDRAW ............................................................... 45
COS ......................................................................... 9 REM ....................................................................... 11
CVUNIT.................................................................. 23 REPEAT................................................................. 28
DEFUN................................................................... 30 REVERSE .............................................................. 18
DISTANCE............................................................. 31 RTOS ..................................................................... 22
DISTOF .................................................................. 22 SETQ...................................................................... 12
ENTDEL................................................................. 55 SETVAR................................................................. 12
ENTGET................................................................. 53 SIN ........................................................................... 9
ENTLAST............................................................... 54 SQRT ..................................................................... 11
ENTMAKE ............................................................. 56 SSADD................................................................... 52
ENTMOD................................................................ 56 SSDEL ................................................................... 52
ENTNEXT .............................................................. 54 SSGET ................................................................... 50
ENTSEL ................................................................. 55 SSLENGTH............................................................ 51
ENTUPD ................................................................ 56 SSMEMB................................................................ 51
EQ.......................................................................... 26 SSNAME ................................................................ 51
EQUAL................................................................... 26 STRCASE .............................................................. 13
EVAL ..................................................................... 46 STRCAT................................................................. 13
EXP........................................................................ 10 STRLEN ................................................................. 13
EXPT...................................................................... 10 SUBST ................................................................... 18
FINDFILE ............................................................... 40 SUBSTR................................................................. 13
FIX ......................................................................... 21 TERPRI .................................................................. 42
FLOAT ................................................................... 21 TEXBOX................................................................. 47
FOREACH ............................................................. 19 TEXTPAGE ............................................................ 45
GCD ....................................................................... 10 TEXTSCR............................................................... 45
GETANGLE ........................................................... 32 TRANS ................................................................... 23
GETCORNER ........................................................ 33 TYPE ...................................................................... 12
GETDIST................................................................ 32 VL-LIST->STRING ................................................. 14
GETFILED ............................................................. 36 VL-PRINC-TO-STRING.......................................... 14
GETINT .................................................................. 34 VL-SORT................................................................ 44
GETKWORD.......................................................... 35 VL-SORT-I ............................................................. 44
GETORIENT .......................................................... 33 VL-STRING->LIST ................................................. 14
GETPOINT............................................................. 32 VPORTS................................................................. 45
GETREAL .............................................................. 34 WHILE.................................................................... 29
GETSTRING .......................................................... 34 WRITE-CHAR ........................................................ 41
GETVAR ................................................................ 34 WRITE-LINE .......................................................... 42
GRAPHSCR........................................................... 45 ZEROP ................................................................... 11
63
9. BIBLIOGRAFÍA BÁSICA
OTERO GONZÁLEZ, César: Guiones para las clases de C.A.D. Tercera y Cuarta parte: Lisp avanzado.
E.T.S. de Ingenieros de Caminos, Santander. 1992.
TOGORES FERNÁNDEZ, Reinaldo y OTERO GONZÁLEZ, César: Programación en Autocad con Visual
Lisp. Ed. Mc Graw Hill. 2003.
63