Вы находитесь на странице: 1из 68

Departamento de Ingeniera Geogrfica

y Tcnicas de Expresin Grfica

PROGRAMACIN
AUTOLISP

a
Pa
T
T

cenp

(PERSONALIZACIN
DE AUTOCAD)

a/2
a/2

a/3
cen

a/2

a/12

a/2
ceng
a/12

a/3

a/12

Sistema de rectas
paralelas

Figura 1: Definicin geomtrica

Figura 2: Mosaico
P
Pa

Formas
homotticas
cen
a/3

a/3

rad

MILAGROS CANGA VILLEGAS


JOS ANDRS DAZ SEVERIANO

No basta el recuerdo
Cuando an queda tiempo
(Luis Cernuda)

El hoy es malo, pero el maana ... es mo


(Antonio Machado)

INDICE:

1. PRESENTACIN GENERAL DE AUTOLISP

2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS


2.1. Nmeros
2.2. Cadenas
2.3. Listas
2.4. Smbolos y variables
2.5. Conjuntos de seleccin
2.6. Nombres de entidad
2.7. Descriptores de archivo
2.8. Subrutinas

2
2
2
3
3
3
4
4
4

3. EXPRESIONES DE AUTOLISP

4. RECOMENDACIONES INICIALES PARA LA CODIFICACIN DE UNA RUTINA LISP

5. FUNCIONES AUTOLISP
5.1. FUNCIONES ARITMTICAS
5.2. FUNCIONES DE ASIGNACIN
5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO
5.4. FUNCIONES PARA GESTIN DE LISTAS
5.4.1. CREACIN DE LISTAS
5.4.2. EXTRACCIN DE ELEMENTOS DE UNA LISTA
5.4.3. MANIPULACIN DE LISTAS
5.5. FUNCIONES MONOLNEA
5.6. FUNCIONES DE CONVERSIN Y TRANSFORMACIN
5.7. FUNCIONES DE RELACIN
5.8. FUNCIONES DE CONDICIN
5.9. FUNCIONES PARA GESTIN DE CICLOS
5.10. FUNCIN PARA CREAR FUNCIONES DE USUARIO
5.11. FUNCIONES GRFICAS
5.12. FUNCIONES DE ENTRADA INTERACTIVA
5.13. FUNCIONES PARA GESTIN DE FICHEROS
5.14. FUNCIONES DE LECTURA Y ESCRITURA
5.14.1. ESCRITURA
5.14.2. LECTURA
5.15. FUNCIONES DE ORDENACIN
5.16. FUNCIONES DE CONTROL DE PANTALLA
5.17. OTRAS FUNCIONES DE UTILIDAD

7
8
12
13
15
15
16
18
20
21
24
27
28
30
31
32
39
41
41
42
44
45
46

6. FUNCIONES AVANZADAS DE PROGRAMACIN AUTOLISP


6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIN AutoLISP
6.2. CONCEPTOS BSICOS
6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS
6.4. DESCRIPCIN DE LAS FUNCIONES

48
48
48
49
50

7. CDIGOS Y MENSAJES DE ERROR DE AUTOLISP

59

8. NDICE DE FUNCIONES

63

9. BIBLIOGRAFA BSICA

63

ii

1. PRESENTACIN GENERAL DE AUTOLISP


AutoLISP es una adaptacin del lenguaje de programacin LISP y forma parte integral del paquete
AutoCAD. Autolisp es un pequeo subconjunto del CommonLISP, y por ello se ajusta muy estrechamente a
la misma sintaxis y convenciones, pero consta de muchas funciones especficas de AutoCAD.
AutoLISP es la ms potente herramienta para optimizar la ejecucin de AutoCAD. Le habilita para
automatizar AutoCAD incluso ms all de lo que puede llevar a cabo usando macros.
Las rutinas AutoLISP tienen aplicaciones como:
- La creacin de nuevas y nicas rdenes AutoCAD.
- La insercin de funciones especiales para dibujar y para calcular.
- Anlisis detallados de grficos y de dibujos dentro del editor de dibujos de AutoCAD.
Con AutoLISP, se pueden escribir programas y generar funciones de macros con un lenguaje potente y
de alto nivel, apropiado para las aplicaciones de grficos. AutoLISP es flexible y fcil de aprender y utilizar
para los no-programadores, quienes al aprender AutoLISP slo necesitan conceptos bsicos de
programacin, tales como:
-

Almacenar datos durante el proceso con variables de memoria;


Procesar datos en una serie de pasos secuenciales;
Organizar etapas dentro de una rutina definiendo nuevas funciones;
Elegir entre pasos alternativos (ramificar)
Repetir una secuencia de pasos hasta que se encuentre una condicin especfica (bucles).
Especficamente: Acceder a los datos de la base de datos geomtrica

El cdigo de AutoLISP no se compila 1, se puede teclear el cdigo en la lnea de comandos y ver los
resultados inmediatamente hacindose ms sencilla la introduccin a este lenguaje para los no iniciados. En
un segundo nivel de aprendizaje resulta mucho ms fcil realizar pruebas y depurar cuando este cdigo se
carga desde un archivo, en lugar de volverlo a escribir cada vez que se realiza alguna modificacin.
El cdigo de AutoLISP se almacena en archivos de texto ASCII con la extensin *. lsp. La sintaxis de las
expresiones de AutoLISP escritas en los archivos es bsicamente la misma que se utiliza para escribirlas en
la solicitud de comando.

Se trabaja a este nivel docente sin compilar. Se recomienda consultar los manuales de VisualLISP de la versin 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
cdigo.
Este cdigo se caracteriza especialmente porque aparece entre parntesis.
Para poder utilizar plenamente AutoLISP, es necesario entender las diferencias entre los distintos tipos
de datos y el modo en que deben utilizarse.
Los elementos del lenguaje y sus convenciones son las siguientes:
2.1. Nmeros
Nmeros enteros
Los enteros son nmeros sin coma decimal. Los enteros de AutoLISP son nmeros de 32 bits con signo
cuyos valores estn 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 estn 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 explcita en expresiones de AutoLISP se conocen
como constantes. Nmeros como 2, -56, y 1 200 196 son enteros vlidos de AutoLISP.
Nmeros reales
Los nmeros 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 nmeros reales se almacenan en formato de coma flotante de doble precisin, lo cual proporciona
una precisin mnima de 14 dgitos significativos, aunque el rea de comandos de AutoCAD muestra slo 6.
Los nmeros reales pueden expresarse en notacin cientfica, que consta de una e o E opcional seguida
por el exponente del nmero (por ejemplo, 0.0000041 es lo mismo que 4.1e-6).
Los nmeros reales que se utilizan de forma explcita en expresiones de AutoLISP se conocen como
constantes. Nmeros como 3,1, 0,23, -56,123, y 21 000 000.0 son nmeros reales vlidos de AutoLISP.

2.2. Cadenas
Las cadenas son grupos de caracteres delimitados por comillas.
Dentro de las cadenas que aparecen entre comillas: la contrabarra (\) permite incluir caracteres de
control (o cdigos de escape):
\\ para el carcter \
\e para el carcter ESC
\n para el salto de lnea
\r para RETURN
\t para tabulador
Las cadenas individuales tienen una limitacin de 132 caracteres.
Las cadenas entre comillas que se utilizan de forma explcita en expresiones de AutoLISP se conocen
como cadenas de texto o constantes de cadena.
Ejemplos de cadenas vlidas son "cadena 1" y "\nPrimer punto: ".

2.3. Listas
Las listas de AutoLISP son grupos de valores relacionados, separados por espacios en blanco (uno o
varios se interpretan como uno slo) e incluidos entre parntesis.
Las listas proporcionan un mtodo eficaz para almacenar numerosos valores relacionados.
AutoCAD expresa los puntos 3D como una lista de tres nmeros reales.
Ejemplos de listas son: (1.0 1.0 0.0), ("ste" "se" "aqul") y (1 "UNO").

2.4. Smbolos y variables


AutoLISP utiliza smbolos para almacenar los datos.
En los nombres de smbolos no se distingue entre maysculas y minsculas, pudiendo emplearse
cualquier secuencia de caracteres alfanumricos, siempre que no contenga a alguno de los siguientes:
-

Parntesis ( ) Reservado para lista y expresiones


Punto . Punto decimal
Apostrofo ' Abreviatura de la Funcin QUOTE
Comillas " Reservado a las cadenas de caracteres.
Punto y coma; Para comenzar una lnea de comentarios.

Un nombre de smbolo no puede estar compuesto slo por caracteres numricos.


Las aplicaciones de AutoLISP hacen uso de smbolos o valores constantes, como cadenas, nmeros
reales o enteros, y variables, empleadas para almacenar datos generados durante las ejecucin 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 slo de una contrabarra (\). Esta
variable se emplea con la funcin 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: smbolo que en Lisp significa nada o vaco.
Es posible cambiar el valor de estas variables con la funcin setq. Sin embargo, otras aplicaciones
podran 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 nmeros 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 admiracin (!).
2.5. Conjuntos de seleccin
Los conjuntos de seleccin son grupos compuestos por uno o varios objetos (entidades).
Las rutinas de AutoLISP permiten aadir o suprimir de forma interactiva objetos de los conjuntos de
seleccin.

2.6. Nombres de entidad


Un nombre de entidad es un identificador numrico asignado a los objetos de un dibujo. En realidad, se
trata de un puntero a un archivo mantenido por AutoCAD, en el que AutoLISP puede encontrar el registro de
la base de datos de objetos
A este identificador pueden hacer referencia las funciones de AutoLISP con el fin de permitir la seleccin
de objetos para un posterior empleo de maneras varias.

2.7. Descriptores de archivo


Los descriptores de archivo son identificadores alfanumricos asignados a archivos abiertos por
AutoLISP.
Cuando sea necesario que una funcin de AutoLISP lea o escriba en un archivo, debe hacerse
referencia a su identificador.

2.8. Subrutinas
Es un smbolo con el nombre de una funcin 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.

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.
Todas las expresiones de AutoLISP tienen, bsicamente, el siguiente formato:
(funcin argumentos)
Cada expresin comienza con un parntesis abierto y se compone de un nombre de funcin seguido de
una lista ordenada de argumentos para dicha funcin, cada uno de los cuales puede constituir una
expresin por s mismo. La expresin termina con un parntesis cerrado.
Cada expresin devuelve un valor que puede ser empleado por una expresin circundante (Anidacion
de expresiones); en caso de que no haya ninguna, AutoLISP devuelve el valor a la lnea de comando de
AutoCAD.
Por ejemplo, el siguiente cdigo incluye tres funciones.
(fun1 (fun2 argumentos)(fun3 argumentos))
La primera funcin, fun1, tiene dos argumentos, mientras que las otras dos, fun2 y fun3, tienen un
argumento cada una. Las funciones fun2 y fun3 estn delimitadas por la funcin fun1, por lo que sus valores
pasan a fun1 como argumentos. La funcin fun1 evala estos dos argumentos y devuelve el valor a la lnea
de comando.
Si se escribe una expresin de AutoLISP en la solicitud de comando de AutoCAD, AutoLISP la evala y
muestra el resultado, tras lo cual vuelve a aparecer la solicitud de comando.
El siguiente ejemplo ilustra el uso de la funcin *(multiplicacin), que acepta uno o ms nmeros reales
como argumentos.
Comando: (* 2 27)
54
Dado que este ejemplo no tiene expresin circundante, devuelve el resultado a la lnea de comando.
Las expresiones anidadas en otras expresiones devuelven sus resultados a la expresin circundante.
El siguiente ejemplo utiliza el resultado de la funcin + (suma) como uno de los argumentos de la
funcin * (multiplicacin).
Comando: (* 2 (+ 5 10) )
30
El formato completo que estudiaremos para cada funcin Autolisp es el siguiente:

(funcin argumentos .....[ Argumentos opcionales... ] )


Los puntos suspensivos significan que el ltimo argumento puede repetirse un nmero cualquiera de
veces.
Cuando AutoCAD recibe algn cdigo de AutoLISP, lo transmite al intrprete de AutoLISP, cuyo ncleo
contiene el evaluador. El evaluador lee una lnea de cdigo, la evala y devuelve el resultado. El cdigo
puede leerse de un archivo o como datos tecleados por el usuario desde la lnea de comando, pero en
cualquier caso deber tener el formato de una expresin de AutoLISP. Al respecto, hay que decir que:
- Una expresin puede ser ms larga que una lnea.
- Varios espacios en blanco se interpretan como uno slo.
- Una lnea que se inici con ; no es interpretada. Se trata de una lnea de comentarios.
- Se puede responder a las solicitudes de comando de AutoCAD con expresiones de AutoLISP.

4. RECOMENDACIONES INICIALES PARA LA CODIFICACIN DE UNA RUTINA LISP


- Conocer la sintaxis y las reglas del lenguaje.
- Saber de qu funciones dispone el lenguaje.
- Describir exactamente cul es el objeto de la rutina LISP. Los programadores se refieren a esta
versin de una rutina como pseudocdigo.
- Recorrer el proceso manualmente desde el teclado, si es posible. Este procedimiento de verificacin
a priori, ayudar a reconocer rpidamente los problemas en el proceso de desarrollo.
- Tomar notas de cada paso.
- Anotar qu clculos tuvieron lugar y en qu figuras se basaron.
- Escribir el cdigo lo ms ordenado posible, distinguiendo entre:
- Funcin principal (que ser la que se invoca al utilizar el programa). Suele incluir la definicin de
un nuevo comando Autocad.
- Funciones intermedias, segn la estructura que el programar decida.
- Utilizar nombres de funciones y variables fcilmente identificables, limitando el empleo de estas
ltimas a aquellas que sean estrictamente necesarias.
- Escribir lneas de comentarios.
- Utilizar funciones creadas en otros programas. Hacer Bibliotecas de funciones de usuario.
- Sangrar el texto del cdigo para facilitar la interpretacin posterior.

5. FUNCIONES AUTOLISP
Las funciones proporcionadas por el lenguaje se pueden clasificar de la siguiente manera:

FUNCIONES BSICAS
FUNCIONES ARITMTICAS, ................................................................................................................... 8
FUNCIONES DE ASIGNACIN, ............................................................................................................. 12
FUNCIONES PARA MANEJAR CADENAS DE TEXTO, ....................................................................... 13
FUNCIONES PARA GESTIN DE LISTAS, ........................................................................................... 15
FUNCIONES MONOLNEA, .................................................................................................................... 20
FUNCIONES DE CONVERSIN Y TRANSFORMACIN, ..................................................................... 21
FUNCIONES DE RELACIN, ................................................................................................................. 24
FUNCIONES DE CONDICIN, ............................................................................................................... 27
FUNCIONES PARA GESTIN DE CICLOS, .......................................................................................... 28
FUNCIN PARA CREAR FUNCIONES DE USUARIO, ......................................................................... 30
FUNCIONES GRFICAS, ....................................................................................................................... 31
FUNCIONES DE ENTRADA INTERACTIVA, ......................................................................................... 32
FUNCIONES PARA GESTIN DE FICHEROS, ..................................................................................... 39
FUNCIONES DE LECTURA Y ESCRITURA, ......................................................................................... 41
FUNCIONES DE ORDENACIN, ........................................................................................................... 44
FUNCIONES DE CONTROL DE PANTALLA, ........................................................................................ 45
OTRAS FUNCIONES DE UTILIDAD, ..................................................................................................... 46

FUNCIONES AVANZADAS

5.1. FUNCIONES ARITMTICAS


+
Suma nmeros
Sintaxis: (+ <n1> <n2> . . . )
Valor retornado: Suma de todos los argumentos numricos. Ningn argumento devuelve Nil
(+ 1 2)
(+ 1 2 3 4.5)
(+ 1 2 3 4.0)

devuelve 3
devuelve 10.5
devuelve 10.0

Sustrae n nmeros
Sintaxis: (- <n1> <n2> . . . )
Valor retornado: La diferencia entre el primer argumento y la suma de los restantes argumentos.
Ningn argumento devuelve Nil
(- 50 40)
(- 50 40.0)
(- 50 40.0 2.5)
(- 8)

devuelve
devuelve
devuelve
devuelve

10
10.0
7.5
-8

*
Multiplica nmeros
Sintaxis: (* <n1> <n2> . . . )
Valor retornado: Producto de todos los argumentos numricos. Ningn argumento devuelve Nil
(* 2 3)
(* 2 3.0)
(* 2 3 4.0)
(* 3 -4.5)
(* 3)

devuelve
devuelve
devuelve
devuelve
devuelve

6
6.0
24.0
-13.5
3

/
Divide nmeros

Sintaxis: (/ <n1> <n2> . . . )


Valor retornado: El cociente del primer argumento dividido por el producto de los dems
argumentos.
(/ 100 2)
(/ 100 2.0)
(/ 100 20 2)
(/ 100 20 2.0)
(/ 4)
(/ 1 2)
(/ 4 (/ 1 2))
(/ 4 (/ 1.0 2))

devuelve 50
devuelve 50.0
devuelve 2
devuelve 2.5
devuelve 4
devuelve 0
devuelve ERROR
devuelve 8.0

Devuelve el operador NOT binario (complemento de -1) del argumento


Sintaxis: ( <entero>)
Valor retornado = -1 - <entero>.
(~ 3)
(~ 100)
(~ -4)

devuelve -4
devuelve -101
devuelve 3

1+
Incrementa un nmero en uno
Sintaxis: (1+ <n> )
Valor retornado = 1+n (entero o real segn n sea entero o real.)
(1+ 5)
(1+ -17.5)

devuelve 6
devuelve -16.5

1Disminuye en uno un nmero.


Sintaxis: (1- <n> )
Valor retornado = n-1 (entero o real segn n sea entero o real.)
(1- 5)
(1- -17.5)

devuelve 4
devuelve -18.5

ABS
Convierte un nmero a su valor absoluto
Sintaxis: (ABS <n> )
Valor retornado = el valor absoluto de n.
(abs 100)
(abs -100)
(abs -99.25)

devuelve 100
devuelve 100
devuelve 99.25

ATAN
Calcula el arcotangente
Sintaxis: (ATAN <n1> [n2]), donde los argumentos n1 y n2 se convierten en nmeros reales antes
de calcular el valor del arco tangente.
Valor retornado = Arco tangente de n1/n2. Valor en radianes entre -/2 y /2.
(atan 0.5)
(atan 1.0)
(atan -1.0)
(atan 2.0 3.0)
(atan 2.0 -3.0)
(atan 1.0 0.0)
(atan 1 2)
(atan (/ 1 2))

devuelve
devuelve
devuelve
devuelve
devuelve
devuelve
devuelve
devuelve

0.463648
0.785398
-0.785398
0.588003
2.55359
1.5708
0.463648
0.0

COS
Calcula el coseno de un ngulo expresado en radianes
Sintaxis: (COS <ang> )
Valor retornado = El coseno de ang
(cos 0.0)
(cos pi)
(cos (/ pi 3))

devuelve 1.0
devuelve -1.0
devuelve 0.5

SIN
Calcula el seno de un ngulo expresado en radianes
Sintaxis: (SIN <ang> )
Valor retornado = El seno de ang
(sin 1.0)
(sin 0.0)
(sin (/ pi 6))

devuelve 0.841471
devuelve 0.0
devuelve 0.5

EXP
Calcula el antilogaritmo neperiano de un numero
Sintaxis:(EXP <n> )
Valor retornado: nmero real igual a en
(exp 1.0)
(exp 2.2)
(exp -0.4)

devuelve 2.71828
devuelve 9.02501
devuelve 0.67032

EXPT
Calcula el resultado de elevar un nmero a una potencia
Sintaxis:(EXPT <base> <potencia>)
Valor retornado: nmero real o entero
(expt 2 4)
(expt 3.0 2.0)

devuelve 16
devuelve 9.0

GCD
Calcula el mximo comn denominador de dos enteros
Sintaxis: (GCD <n1> <n2>)
Valor retornado = El valor del mximo comn denominador.
(gcd 81 57)
(gcd 12 20)

devuelve 3
devuelve 4

LOG
Calcula el logaritmo neperiano de un nmero real
Sintaxis: (LOG <n> )
Valor retornado = Un nmero real.
(log 4.5)
(log 1.22)
(log 2.718281)

devuelve 1.50408
devuelve 0.198851
devuelve 1.0

MAX
Extrae el mayor valor de una serie de nmeros
Sintaxis: (MAX <n1> <n2> <n3>..)
Valor retornado = El mayor valor encontrado.
(max 4.07 -144)
(max -88 19 5 2)
(max 2.1 4 8)

devuelve 4.07
devuelve 19
devuelve 8.0

MIN
Extrae el menor valor de una serie de nmeros
Sintaxis: (MIN <n1> <n2> <n3>..)
Valor retornado = El menor valor encontrado.
(min 683 -10.0)
(min 73 2 48 5)
(min 2 4 6.7)

devuelve -10.0
devuelve 2
devuelve 2.0

MINUSP
Comprueba si un nmero es menor que 0
Sintaxis: (MINUSP <n> )
Valor retornado = T si el argumento n es un nmero y es negativo y nil en caso contrario.
(minusp -1)
(minusp -4.293)
(minusp 830.2)

devuelve T
devuelve T
devuelve nil

10

REM
Calcula el resto de la divisin entre dos nmeros
Sintaxis: (REM <n1> <n2>)
Valor retornado: El resto de dividir n1 entre n2.
(rem 42 12)
(rem 12.0 16)
(rem 26 7)
(rem 5 2)
(rem 26 7 2)

devuelve
devuelve
devuelve
devuelve
devuelve

6
12.0
5
1
1

SQRT
Calcula la raz cuadrada de un nmero
Sintaxis: (SQRT <n> )
Valor retornado = Un nmero real, raz cuadrada de n
(sqrt 4)
(sqrt 2.0)

devuelve 2.0
devuelve 1.41421

ZEROP
Comprueba si un nmero es 0
Sintaxis: (ZEROP <elemento>)
Valor retornado: T si el elemento es 0 y nil en caso contrario.
(zerop 0)
(zerop 0.0)
(zerop 0.0001)

devuelve T
devuelve T
devuelve nil.

NUMBERP
Comprueba si la evaluacin de una funcin es un nmero
Sintaxis: (NUMBERP <expresin>)
Valor retornado: T si la expresin evaluada es un numero y nil en caso contrario.
(setq a 123 b 'a)
(numberp 4)
(numberp 3.8348)
(numberp "Hola")
(numberp a)
(numberp b)
(numberp (eval b))

devuelve
devuelve
devuelve
devuelve
devuelve
devuelve

11

T
T
nil
T
nil
T

5.2. FUNCIONES DE ASIGNACIN


SETQ
Liga el nombre de smbolos al valor de una expresin
Sintaxis: (SETQ < Smbolo> <exp> < Smbolo> <exp>. . . . . . . .)
Valor retornado: El devuelto por el ltimo argumento de la funcin.
(setq a 5.0)
(setq b 123 c 4.7)
(setq s "el")
(setq x '(a b))

devuelve 5.0 y define el smbolo (variable) a como 5.0.


devuelve 4.7 y define los smbolos (variables): b como
123 y c como 4.7
devuelve "el"
devuelve (A B)

SETVAR
Cambia el valor de variables del sistema.
Sintaxis: (SETVAR <"nombre de la variable"> <nuevo valor> )
La variable del sistema no podr ser slo de lectura y el nuevo valor asignado ser de los que el
sistema pueda aceptar.
Valor retornado: El nuevo valor de la variable del sistema.
(setvar "blipmode" 0)
(setvar "pdmode" 34)
(setvar "pellipse" 3)

Devuelve 0 y desactiva las marcas auxiliares.


Devuelve 34 y establece un tipo de punto
Error: AutoCAD rechaz la funcin

TYPE
Extrae el tipo de dato de un argumento.
Sintaxis: (TYPE <elemento>)
Valor retornado: El tipo de dato como una cadena en maysculas
REAL: numero entero
FILE: descriptor de fichero
STR: cadenas
INT: numero entero.
SYM: smbolos
LIST: listas y funciones de usuario
SUBR: funciones internas
PICKSET
ENAME
..........

Conjuntos de seleccin
Nombres de entidades

Los elementos que dan como resultado nil (como un smbolo no asignado) devuelven nil.
(setq a 123 r 3.45 s "Hola!" x '(a b c))
(setq f (open "nombre" "r"))
entonces:
(type 'a)
(type a)
(type f)
(type r)
(type s)
(type x)
(type +)
(type nil)

devuelve
devuelve
devuelve
devuelve
devuelve
devuelve
devuelve
devuelve

12

SYM
INT
FILE
REAL
STR
LIST
SUBR
nil

5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO


READ
Extrae datos de una cadena de caracteres
Sintaxis: (READ <"cadena">)
Valor retornado: El primer tem de una cadena de caracteres o la primera lista si la cadena contiene
listas.
STRCASE
Convierte los caracteres de una cadena a minsculas o maysculas
Sintaxis: (STRCASE <"cadena"> [modo])
- conversin a minsculas: modo /= nil
- conversin a maysculas : modo = nil o no se presenta.
Valor retornado: La cadena convertida.
(strcase "Ejemplo")
(strcase "Ejemplo" T)

devuelve "EJEMPLO"
devuelve "ejemplo"

STRCAT
Empalma (concatena ) dos o ms cadenas
Sintaxis: (STRCAT <"cadena1"> ["cadena2"]...........)
Valor retornado: Una sola cadena empalmada.
(strcat "a" "cerca")
(strcat "a" "b" "c")
(strcat "a" "" "c")

devuelve "acerca"
devuelve "abc"
devuelve "ac"

STRLEN
Cuenta los caracteres de una cadena
Sintaxis: (STRLEN <"cadena">........)
Valor retornado: Un nmero entero.
Si se especifican varios argumentos cadena, la funcin devuelve la suma de las longitudes de todos
los argumentos. Si stos se omiten o se escribe una cadena vaca, el resultado es 0 (cero).
(strlen "abcd")
(strlen "ab")
(strlen "uno" "dos" "tres")
(strlen)
(strlen "")

devuelve
devuelve
devuelve
devuelve
devuelve

4
2
10
0
0

SUBSTR
Extrae una porcin de una cadena de caracteres.
Sintaxis: (SUBSTR <"cadena"> <inicio>[ long ])
inicio: nmero entero que indica la posicin del primer carcter a extraer.
long: longitud de la subcadena a extraer ( si no se da proporciona la subcadena desde la
posicin inicial hasta el final)
Valor retornado: La subcadena extrada.
(substr "abcde" 2)
(substr "abcde" 2 1)
(substr "abcde" 3 2)
(substr "abcde" 3 7)
(substr "hola" 5)

devuelve
devuelve
devuelve
devuelve
devuelve

13

"bcde"
"b"
"cd"
"cde"
"" (cadena vaca)

VL-PRINC-TO-STRING
Devuelve la representacin en cadena de caracteres de cualquier objeto Lisp como si fuera
presentada mediante la funcin princ.
Sintaxis: (VL-PRINC-TO-STRING <dato>)
Valor retornado: Una cadena de caracteres que contiene la representacin del dato tal y como la
mostrara la funcin princ.
(vl-princ-to-string 120)
(vl-princ-to-string 120.8)
(vl-princ-to-string abc)
(vl-princ-to-string (10 20))

devuelve
devuelve
devuelve
devuelve

120
120.8
abc
(10 20)

VL-LIST->STRING
Concatena los caracteres representados en una lista por sus cdigos numricos ASCII.
Sintaxis: (VL-LIST->STRING (entero ) )
Valor retornado: Una cadena formada por los caracteres cuyos cdigos ASCII se incluyen en la lista
pasada como argumento.
((vl-list->string (97 98 99 100) )

devuelve abcd

VL- STRING->LIST
Convierte una cadena de caracteres en una lista de los cdigos numricos ASCII correspondientes.
Sintaxis: (VL-STRING->LIST <cadena>)
Valor retornado: Una lista con los cdigos ASCII correspondientes a los caracteres que integran la
cadena.
((vl-string->list abcd ) devuelve (97 98 99 100)

14

5.4. FUNCIONES PARA GESTIN DE LISTAS


5.4.1. CREACIN DE LISTAS
LIST
Crea una lista a partir de un nmero de expresiones
Sintaxis: ( LIST <expresin>...........)
Valor retornado: Una lista de los argumentos de la funcin.
(setq L1 (list 'a 'b 'c))
devuelve (A B C)
(setq L2 (list 'a '(b c) 'd))
devuelve (A (B C) D)
(setq L3 (list 3.9 6.7))
devuelve (3.9 6.7)
(setq L3 '(3.9 6.7)
equivale a (list 3.9 6.7)
(setq a 10 b 20 c 30 L4_1 (list a b c))
devuelve (10 20 30)
(setq La (list a) Lb (list b) Lc (list c) L4_2( La Lb Lc))
devuelve ((10)(20)(30))
Como alternativa a utilizar LIST, se puede indicar una lista de forma explcita con la funcin QUOTE
si la lista no contiene variables ni opciones sin definir. El carcter de comilla ( ' ) se define como la
funcin QUOTE.
APPEND
Funde varias listas en una
Sintaxis: (APPEND <lista>...........)
Valor retornado: Una lista nica.
(setq L5 (append '(a b) '(c d)))
(setq L6 (append '((a)(b)) '((c)(d))))
(setq L7 (append L3 L4_1))
(setq L8 (append L4_2 L4_1)
(setq L9 (append La Lb Lc)

devuelve (A B C D)
devuelve ((A)(B)(C)(D))
devuelve (3.9 6.7 10 20 30)
devuelve ((10) (20) (30) 10 20 30)
devuelve (10 20 30)

CONS
Aade al principio de una lista como primer elemento una expresin
Sintaxis: (CONS <expresin> <lista>)
Valor retornado: La nueva lista.
(cons 'a '(b c d))
(cons '(a) '(b c d))

devuelve (A B C D)
devuelve ((A) B C D)

La funcin CONS tambin 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.
(cons 'a 2)

devuelve (A . 2)

LENGTH
Cuenta los elementos de una lista
Sintaxis: (LENGTH <lista>)
Valor retornado: El nmero entero correspondiente.
(length '(a b c d))
(length '(a b (c d)))
(length '())

devuelve 4
devuelve 3
devuelve 0

15

5.4.2. EXTRACCIN DE ELEMENTOS DE UNA LISTA


CAR
Extrae el primer elemento de una lista.
Sintaxis: (CAR <lista>)
Valor retornado: El primer elemento de la lista. Si lista est vaca, CAR devuelve nil.
(car '(a b c))
(car '((a b) c))
(car '())
(car (cons 'a 2)

devuelve A
devuelve (A B)
devuelve nil
devuelve a

CDR
Extrae una nueva lista donde estn todos los elemento de la lista menos el primero.
Sintaxis: (CDR <lista>)
Valor retornado: la nueva lista. Si lista est vaca, CDR devuelve nil.
(cdr '(a b c))
(cdr '((a b) c))
(cdr '())

devuelve (B C)
devuelve (C)
devuelve nil

Para obtener el segundo tomo de un par punteado, se puede utilizar la funcin CDR.
(cdr '(a . b))
(cdr '(1 . "Texto"))

devuelve B
devuelve "Texto"

FUNCIONES ANIDADES DE CAR Y CDR


AutoLISP permite concatenar las funciones CAR y CDR hasta en cuatro niveles. Las siguientes son
funciones vlidas.
CAAAAR
CAAADR
CAAAR
CAADAR
CAADDR
CAADR

CADAAR
CADADR
CADAR
CADDAR
CADDDR
CADDR
CAAR

CDAAAR
CDAADR
CDAAR
CDADAR
CDADDR
CDADR
CADR

CDDAAR
CDDADR
CDDAR
CDDDAR
CDDDDR
CDDDR
CDAR

CDDR

Cada a representa una llamada a CAR y cada d representa una llamada a CDR. Por ejemplo:
(caar x)
(caar L4_2)
(cdar x)
(cadar x)
(cadr x)
(cadr L4_2)
(cddr x)
(caddr x)

es equivalente a
devuelve 10
es equivalente a
es equivalente a
es equivalente a
devuelve (20)
es equivalente a
es equivalente a

(car (car x))


(cdr (car x))
(car (cdr (car x)))
(car (cdr x))
(cdr (cdr x))
(car (cdr (cdr x)))

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 nmeros reales). De igual modo, CADDR puede utilizarse para
obtener la coordenada Z de un punto 3D. Por ejemplo, dadas las asignaciones:
(setq pt2 '(5.25 1.0))
(setq pt3 '(5.25 1.0 3.0))
(car pt2)
(cadr pt2)
(caddr pt2)
(car pt3)
(cadr pt3)

un punto 2D
un punto 3D
devuelve 5.25
devuelve 1.0
devuelve nil
devuelve 5.25
devuelve 1.0
16

(caddr pt3)
(car (cons 'a 2))
(cdr (cons 'a 2))

devuelve 3.0
devuelve A
devuelve 2

LAST
Extrae el ltimo elemento de una lista
Sintaxis: (LAST <lista>)
Valor retornado: el ltimo elemento de la lista.
(last '(a b c d e))
(last '(a b c (d e)))
(last pt3 )
(last L4_2)

devuelve E
devuelve (D E)
devuelve 3.0
devuelve (30)

NTH
Extrae un elemento de una lista a partir de especificar su posicin en ella (pos)
Sintaxis: (NTH <pos> <lista>)
Las posiciones dentro de la lista son numeradas de izquierda a derecha empezando por la posicin
0.
Valor retornado: El elemento encontrado, o un nulo si no se encontr.
(nth 3 '(a b c d e))
(nth 0 '(a b c d e))
(nth 5 '(a b c d e))
(nth 0 L4_2)
(nth 0 (car L4_2))

devuelve D
devuelve A
devuelve nil
devuelve (10)
devuelve 10

ASSOC
Localiza sublistas en una lista de asociaciones utilizando elemento como palabra clave, y donde
ste puede ser cualquier expresin vlida susceptible de aparecer como primer elemento de una de
las sublistas.
Lista de asociaciones: ( (clave1 inf1) (clave2 inf2...) (clave3 inf3..)........)
Sintaxis: (ASSOC <elemento> <lista de asociaciones>)
Valor retornado: La primera sublista encontrada. Si la clave no aparece devuelve nil
(setq pieza '((nombre CAJA) (ancho 3) (largo 4.7263) (alto 5)))
(assoc 'largo pieza)
devuelve (largo 4.7263)
(assoc 'peso pieza)
devuelve nil
Las listas de asociaciones se suelen utilizar para almacenar los datos a los que puede acceder
mediante una clave. La funcin SUBST proporciona un medio apropiado para sustituir el valor
asociado con una clave en una lista de asociaciones.

17

5.4.3. MANIPULACIN DE LISTAS


MEMBER
Busca la primera aparicin de una expresin en una lista y devuelve el resto de la lista a partir de la
expresin encontrada.
Sintaxis: (MEMBER <expresin><lista>)
Valor retornado: una lista donde el primer elemento es la expresin encontrada y el resto, el resto de
la lista hasta el final. Si no se encuentra la expresin devuelve nil .
(member 'c '(a b c d e))
(member 20 L4_1)
(member '(30) L4_2)
(member 'q '(a b c d e))

devuelve (C D E)
devuelve (20 30)
devuelve ((30))
devuelve nil

REVERSE
Invierte un lista
Sintaxis: (REVERSE <lista>)
Valor retornado: La lista con sus miembros en orden inverso.
(reverse '((a) b c))

devuelve (C B (A))

LISTP
Comprueba si un argumento es una lista
Sintaxis: (LISTP <expresin>)
Valor retornado: T si la expresin es una lista , nil en caso contrario.
(listp L8)
(listp "hola")

devuelve T
devuelve nil

SUBST
Busca en una lista un miembro especificado y sustituye cada aparicin de ste por otro especificado
Sintaxis: (SUBST <elemento nuevo> <elemento viejo> <lista>)
Valor retornado: La lista modificada.
(setq ejemplo '(a b (c d) b))
(subst 'qq 'b ejemplo)
(subst 'qq 'z ejemplo)
(subst 'qq '(c d) ejemplo)
(subst '(qq rr) '(c d) ejemplo)
(subst '(qq rr) 'z ejemplo)

devuelve
devuelve
devuelve
devuelve
devuelve

(A QQ (C D) QQ)
(A B (C D) B)
(A B QQ B)
(A B (QQ RR) B)
(A B (C D) B)

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))

(setq sublvieja (assoc 'b lista))


sublnueva '(b 50))
)

define sublvieja como (b 20)


define sublnueva como (b 50)

(setq lista (subst sublnueva sublvieja lista))


devuelve ((a 10) (b 50)(c 30))

18

FOREACH
Procesa uno a uno los elementos de una lista y evala cada expresin para cada uno de los
elemento de la lista
Sintaxis: (FOREACH <nombre-var> <lista> <expresin>.........)
Nombre-var: variable de memoria a la que FOREACH ligar secuencialmente los valores de la
lista suministrada y que normalmente ser usada en la expresin.
Valor retornado: El resultado de la ltima expresin evaluada.
Avanza por la lista, asignando un nombre-var a cada elemento y evala cada expresin para todos
los elementos de la lista. Se pueden especificar tantas expresiones como se desee. La funcin
FOREACH devuelve el resultado de la ltima expresin evaluada.
(setq

pt1 (getpoint "\npt1?:")


pt2 (getpoint "\npt2?:")
pt3 (getpoint "\npt3?:")
listap (list pt1 pt2 pt3)

)
(foreach pto listap
(command _point pto)
)
equivale a dibujar una marca de punto en los puntos pt1 pt2 y pt3.

ATOM
Predicado que verifica si un elemento es un tomo, es decir, si no es una lista.
Sintaxis: (ATOM <item>)
Valor retornado: Nil si <item> es una lista; T en otro caso.
(setq a (x y z)
b 23)
(atom a)
(atom b)

devuelve nil
devuelve T

19

5.5. FUNCIONES MONOLNEA


APPLY
Devuelve el resultado de ejecutar la "funcin" tomando como argumentos los elementos de la
"lista".
Sintaxis: ( APPLY <funcin> <Lista> )
Valor retornado: El devuelto por el argumento de la funcin
(apply '+ '( 1 2 3 ) )

devuelve el resultado

1 + 2 + 3 = 6

(apply ' strcat '( "A" "B" "C" ) devuelve "ABC"

MAPCAR
Devuelve el resultado de ejecutar la "funcin" tomando como argumentos de funcin los elementos
sucesivos de "lista 1" ............."lista n"
Sintaxis: ( MAPCAR <funcin> <lista 1> .................<lista n> )
Valor retornado: una lista con las sucesivas soluciones.

(mapcar '+ ' (10 20 30 ) '( 4 3 2 ) )

devuelve la lista (14 23 32)

(mapcar '+ ' (1 2 3 4 ) '( 4 5 6 ) )

devuelve la lista (5 7 9)

(mapcar 'max ' (2 4 ) '( 7 -5 ) '( -8 20 ) devuelve la lista (7 20 )


devuelve ( 14 25 36 )

(mapcar 'expt '( 1 2 3 ) '( 4 5 6 ) )

(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 funcin sin darle un nombre. El conjunto de expresiones se aplica sobre los argumentos
Sintaxis: ( LAMBDA < argumentos > < expresin >...............)
Valor retornado: el resultado de la ltima evaluacin.
Se suele utilizar combinada con APPLY y MAPCAR.

(apply '( lambda ( X Y Z ) (* X ( - Y Z ) ) ) ' ( 5 20 14 ) )


devuelve 30.
(apply '( lambda ( X Y Z ) (+ X Y Z ) ) ' ( 1 2 3 4 ) )
devuelve: Error: too many arguments.
(mapcar '( lambda ( X Y Z ) (* X ( - Y Z ) ) ) '( 5 6 ) '( 20 30 ) '(14 0 ) )
devuelve ( 30 180 )

20

5.6. FUNCIONES DE CONVERSIN Y TRANSFORMACIN


FIX
Convierte un nmero real en entero.
Sintaxis: (FIX <numero real>)
Valor retornado: El nmero entero que resulta de quitar los decimales al real.
(fix 3)
(fix 3.7)

devuelve 3
devuelve 3

FLOAT
Convierte un nmero entero en real.
Sintaxis: (FLOAT <numero entero>)
Valor retornado: un numero real.
(float 3)
(float 3.75)

devuelve 3.0
devuelve 3.75

ATOI
Convierte una cadena de caracteres en un nmero entero
Sintaxis: (ATOI <cadena>)
Valor retornado: un nmero entero.
(atoi "97")
(atoi "3")
(atoi "3.9")

devuelve 97
devuelve 3
devuelve 3

Ejemplo de cdigo que introduce puntos en una lista solicitando el punto por su posicin en la lista.
(setq i 1 puntos nil)
(while (setq dato (getpoint (strcat "\npunto" (itoa i) ":")))
(setq puntos (cons dato puntos)
i (+ i 1)
)
)
(setq puntos (reverse puntos))
)

ATOF
Convierte una cadena de caracteres en un nmero real
Sintaxis: (ATOF <"cadena">)
Valor retornado: un nmero real.
(atof "97.1")
(atof "3")
(atof "3.9")

devuelve 97.1
devuelve 3.0
devuelve 3.9

ITOA
Convierte un entero en una cadena de caracteres
Sintaxis: (ITOA <entero>)
Valor retornado: una cadena de caracteres.
(itoa 33)

devuelve "33"
21

RTOS
Convierte un nmero real en una cadena de caracteres
Sintaxis: (RTOS <nmero> [modo [precisin]])
numero: nmero real (o entero que tomar como real)
modo (opcional): entero del 1 al 5 que determina el formato numrico de la cadena:
1. Unidades cientficas
2. Unidades decimales
3. Pies y pulgadas I (fraccin decimal)
4. Pies y pulgadas II (fraccin propia)
5. Unidades fraccionarias
precisin (opcional): entero que determina el nmero de decimales de precisin en la cadena
Si no se especifican los argumentos modo y precisin se asume el establecido por la variables de
Autocad LUNITS y LUPREC
Valor retornado: Una cadena de caracteres
Ejemplos: (RTOS 5.6 1 4) => 5.6000 E+00"
(RTOS 5.6 5 4) => 5 5/8"

(RTOS 5.6 2 4) => 5.6000"

DISTOF
Convierte un cadena en un nmero real, con un determinado formato de visualizacin.
Sintaxis: (DISTOF <"cadena"> [ modo])
Cadena: cadena de caracteres que expresa un valor numrico.
modo (opcional): entero del 1 al 5 que indica el formato numrico del nmero real expresado en
la cadena (El cdigo se corresponde con el dado en la funcin anterior), la funcin deber ser
capaz de interpretar el argumento cadena de acuerdo con el modo especificado:
Valor retornado: Un nmero real

ANGTOS
Convierte un nmero (que representa un ngulo en radianes) en una cadena de caracteres
Sintaxis: (ANGTOS <ngulo> [modo [precisin]])
angulo: valor del ngulo en radianes.
modo (opcional): entero del 0 al 4 que determina el formato numrico en la cadena:
0. Grados sexagesimales.
1. Grados, minutos y segundos
2. Grados centesimales.
3. Radianes
4. Unidades geodsicas.
precisin (opcional): entero que determina el nmero de decimales de precisin en la cadena.
Si no se especifican los argumentos modo y precisin se asume el establecido por la variables de
Autocad LUNITS y LUPREC
Valor retornado: Una cadena de caracteres.
Ejemplos: (ANGTOS 3.1416 0) => 180"

(ANGTOS 3.1416 2) => 200g"

ANGTOF
Convierte una cadena de caracteres en un nmero real que representa un ngulo
Sintaxis: (ANGTOF <"cadena"> [ modo])
Cadena: cadena de caracteres que expresa un valor numrico de ngulo
modo (opcional): entero del 0 al 4 que indica el formato numrico del ngulo expresado en la
cadena (El cdigo se corresponde con el dado en la funcin anterior), la funcin deber ser
capaz de interpretar el argumento de la cadena de acuerdo con el modo especificado.
Si no se especifica el argumento modo se asume el establecido por la variable de Autocad
LUNITS
Valor retornado: Un valor correspondiente al numrico de un ngulo en radianes.
Ejemplos: (ANGTOF 180" 0) => 3.1416

(ANGTOF 200" 2) => 3.1416


22

ASCII
Convierte el primer carcter de una cadena de caracteres a su cdigo ASCII
Sintaxis: (ASCII <"cadena">)
Valor retornado: Un entero que representa el cdigo ASCII
(ascii "A")
(ascii "a")
(ascii "GRANDE")

devuelve 65
devuelve 97
devuelve 66

CHR
Convierte un nmero entero que representa un carcter ASCII en la cadena de un slo carcter
correspondiente
Sintaxis: (CHR <entero>)
Valor retornado: una cadena de un slo carcter.
(chr 65)
(chr 66)
(chr 97)

devuelve "A"
devuelve "B"
devuelve "a"

READ
Extrae datos de una cadena de caracteres
Sintaxis: (READ <"cadena">)
Valor retornado: El primer tem de una cadena de caracteres o la primera lista si la cadena contiene
listas.
(read hola a todos)
(read ( 20 30 40))
(read "\"Hola a todos\"")
(read "(a b c) (d)")
(read "1.2300")
(read "87 3.2")

hola
(20 30 40)
devuelve la cadena "Hola a todos"
devuelve la lista
(A B C)
devuelve el nmero real 1.23
devuelve el entero 87

TRANS
Transforma las coordenadas de un punto de un sistema de coordenadas a otro.
Sintaxis: (TRANS <lista de punto o desplazamiento> <codvie> < codnue> [desp] ).
codvie: cdigo que expresa el sistema de coordenadas en el cual se expresa el punto.
conue: cdigo que expresa el sistema de coordenadas en el cual se quiere expresar el punto
0. SCU
1. SCP
2. SCV (visualizacin)
3. SCV espacio papel
desp : si es distinto de nil entiende el primer argumento como un desplazamiento.
Valor retornado: Una lista de punto con sus coordenadas transformadas.
CVUNIT
Convierte un nmero o lista de nmeros de una unidad de medida a otra (Las cadenas que
representan unidades de medida vlidas en esta funcin estn 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 nmero o lista de nmeros convertida a la unidad de medida nueva.
(cvunit 1 "minuto" "segundo")
(cvunit 1.0 "pulgada" "cm")
(cvunit 1.0 "acre" "yarda cuadrada ")
(cvunit '(1.0 2.5) "pie" "pulgada")
(cvunit '(1 2 3) "pie" "pulgada")

devuelve
devuelve
devuelve
devuelve
devuelve
23

60.0
2.54
4840.0
(12.0 30.0)
(12.0 24.0 36.0)

5.7. FUNCIONES DE RELACIN


=
Comprueba la igualdad numrica
Sintaxis: (= <tomo> <tomo> <tomo>.)
Valor retornado: T si todos los argumentos (nmeros o cadenas de caracteres) se evalan como
iguales numricamente, Nil en caso contrario.
Las cadenas son comparadas en esta funcin y en las siguientes en base a su valor numrico ASCII
(= 4 4.0)
(= 20 388)
(= 2.4 2.4 2.4)
(= 499 499 500)
(= "yo" "yo")
(= "yo" "t")

devuelve T
devuelve nil
devuelve T
devuelve nil
devuelve T
devuelve nil

/=
Comprueba la desigualdad numrica
Sintaxis: (/= <tomo> <tomo>)
Valor retornado: T si los dos argumentos (nmeros o cadenas de caracteres) no se evalan como
iguales numricamente, Nil en caso contrario
(/= 10 20)
(/= "t" "t")
(/= 5.43 5.44)
(/= 10 20)

devuelve
devuelve
devuelve
devuelve

T
nil
T
T

<
Comprueba la relacin menor que entre los argumentos
Sintaxis: (< <tomo> <tomo> <tomo>.)
Valor retornado: T si cada argumento es numricamente menor que el argumento de su derecha y
Nil en caso contrario.
(< 10 20)
(< "b" "c")
(< 357 33.2)
(< 2 3 88)
(< 2 3 4 4)

devuelve
devuelve
devuelve
devuelve
devuelve

T
T
nil
T
nil

>
Comprueba la relacin mayor que entre los argumentos
Sintaxis: (> <tomo> <tomo> <tomo>.)
Valor retornado: T si cada argumento es numricamente mayor que el argumento de su derecha y
Nil en caso contrario
(> 120 17)
(> "c" "b")
(> 3.5 1792)
(> 77 4 2)
(> 77 4 4)
(> Pablo pablo)

devuelve
devuelve
devuelve
devuelve
devuelve
devuelve

24

T
T
nil
T
nil
nil

<=
Comprueba la relacin menor o igual que entre los argumentos
Sintaxis: (<= <tomo> <tomo> <tomo>.)
Valor retornado: T si cada argumento es numricamente menor o igual que el argumento de su
derecha y Nil en caso contrario.
(<= 10 20)
(<= "b" "b")
(<= 357 33.2)
(<= 2 9 9)
(<= 2 9 4 5)

devuelve
devuelve
devuelve
devuelve
devuelve

T
T
nil
T
nil

>=
Comprueba la relacin mayor o igual que entre los argumentos
Sintaxis: (>= <tomo> <tomo> <tomo>.)
Valor retornado: T si cada argumento es numricamente mayor o igual que el argumento de su
derecha y Nil en caso contrario.
(>= 120 17)
(>= "c" "c")
(>= 3.5 1792)
(>= 77 4 4)
(>= 77 4 9)

devuelve
devuelve
devuelve
devuelve
devuelve

T
T
nil
T
nil

AND
Comprueba los valores de una serie de expresiones. (Y lgico)
Sintaxis: (AND <exp> <exp> <exp>.)
Valor retornado: T si todos los argumentos se evalan con un valor no nulo y Nil
contrario.
(and 1.4 2 "hola")
(and 1.4 ( = 3 4))

en caso

devuelve T
devuelve nil

OR
Comprueba de izquierda a derecha una serie de expresiones hasta hallar la primera que se evala
con un valor no nulo. (O lgico)
Sintaxis: (OR <exp> <exp> <exp>.)
Valor retornado: T si alguno de los argumentos se evala con un valor no nulo y Nil en caso
contrario.
(or 1.4 2 "hola")
(or 1.4 ( = 3 4))
(or nil 45 )
(or nil (= 3 4))

devuelve
devuelve
devuelve
devuelve

T
T
T
nil

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.
(not nil)
(not (= 3 4))
(not (= 4 4))

devuelve T
devuelve T
devuelve nil

25

EQ
Comprueba si los valores atribuidos a ambas expresiones son idnticas
Sintaxis: (EQ <exp> <exp> )
Valor retornado: T si las dos expresiones estn ligadas a los mismos datos y Nil en otro caso.
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
entonces:
(eq f1 f3)
(eq f3 f2)

devuelve nil, f1 y f3 no son la misma lista


devuelve T, f3 y f2 son exactamente la misma lista

EQUAL
Comprueba si dos expresiones se evalan con valores iguales
Sintaxis: (EQUAL <exp> <exp> [margen de error] )
Valor retornado: T si las dos expresiones se evalan igual y Nil en caso contrario.
Si las dos expresiones son nmeros reales se puede incluir un margen de error.
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
(setq a 1.123456)
(setq b 1.123457)
entonces:
(equal f1 f3)
(equal f3 f2)
(equal a b)
(equal a b 0.000001)

devuelve
devuelve
devuelve
devuelve

T
T
nil
T

=
Comprueba la igualdad numrica
Sintaxis: (= <tomo> <tomo> <tomo>.)
Valor retornado: T si todos los argumentos (nmeros o cadenas de caracteres) se evalan como
iguales numricamente Nil en caso contrario.
Las cadenas son comparadas en esta funcin y en las siguientes en base a su valor numrico
ASCII.
(= 4 4.0)
(= 20 388)
(= 2.4 2.4 2.4)
(= 499 499 500)
(= "yo" "yo")
(= "yo" "t")

devuelve T
devuelve nil
devuelve T
devuelve nil
devuelve T
devuelve nil

Uso de las funciones anteriores en lnea de comandos:


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 CONDICIN


COND
Lee una serie de listas. Evala el primer elemento de cada lista (en el orden indicado) hasta que uno
de ellos devuelva un valor distinto de nil. A continuacin, evala las expresiones que siguen a este
elemento y pasa por alto las restantes listas.
Sintaxis: (COND <lista1> <lista2>..)
Valor retornado: El retornado por la ltima expresin de la lista evaluada. Si no se evala ninguna
lista, la funcin COND devuelve Nil
(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)
a = 25 => b = (a 25)
a = 20 => b = "b=20"

la variable b se evala como un par punteado


la variable b se evala como una lista
la variable b se evala como un string

Como se muestra, COND se puede utilizar como una funcin de tipo case. Es habitual utilizar T
como ltima (por defecto) expresin de prueba.
Dada una cadena de respuesta de usuario en la variable s, esta funcin 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 "N") 0)
(t nil)

((= s "y") 1)
((= s "n") 0)

)
IF
Evala una expresin Autolisp basndose en si una expresin de comprobacin inicial se evala
como no nula
Sintaxis: (IF <test> <expresin si test es /= nil > [expresin si test es = nil ] )
Valor retornado: El valor retornado por expresin evaluada; nil en otro caso.
(if (= 1 3) "S!!" "no.")
(if (= 2 (+ 1 1)) "S!!")
(if (= 2 (+ 3 4)) "S!!")

devuelve "no."
devuelve "S!!"
devuelve nil

PROGN
Evala secuencialmente una serie de expresiones.
Sintaxis: (PROGN <exp1> <exp2> )
Valor retornado: La ltima expresin evaluada.
Se puede utilizar PROGN para calcular varias expresiones cuando slo se espera una expresin.
(if (= a b)
(progn
(princ "\nA = B ")
(setq a (+ a 10) b (- b 10))
)
)

27

5.9. FUNCIONES PARA GESTIN DE CICLOS


REPEAT
Evala repetidamente una serie de una o ms expresiones Autolisp un nmero 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 expresin 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
)
(repeat n
(setq elem (nth i L)
elem (1+ elem)
Ln (cons elem ln)
i (1+ i)
)
)
(setq L (reverse Ln))

(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))

Define a como 50, b como 500 y devuelve 500

Ln nil

Devuelve la lista (2 3 4 5 6 7)

Devuelve la lista (2 3 4 5 6 7)

(setq pt1 (getpoint "\npt1?:")


pt2 (getpoint "\npt2?:")
pt3 (getpoint "\npt3?:")
listap (list pt1 pt2 pt3)
n (length listap)
)
(Command "_pline")
(repeat n
(setq pt (car listap ) listap (cdr listap))
(command pt)
)
(command "")
Equivale a dibujar una polilnea que pasa por los puntos
pt1 pt2 y pt3

28

WHILE
Evala repetidamente una serie de una o ms expresiones Autolisp basndose en si una expresin
de comprobacin inicial se evala como un valor nulo o no nulo.
Sintaxis: (WHILE <test> <exp1> <exp2> )
Test: Expresin de comprobacin, que hace que las dems expresiones se evalen mientras
sta se mantenga distinta de Nil .
Valor retornado: El resultado de la ltima expresin evaluada
(setq a 10 )
(While (< a 100)
(setq a (+ a 10))
)
(setq L '( 1 2 3 4 5 6)
i0
(While (setq elem (nth i L))
(setq elem (1+ elem)
Ln (cons elem ln)
i (1+ i)
)
)
(setq L (reverse Ln))

Define a como 90.


Ln nil )

(setq L '( 1 2 3 4 5 6) Ln nil )


(While (setq elem (car L) )
(setq L (cdr L)
elem (1+ elem)
Ln (cons elem ln)
..... )
)
(setq L (reverse Ln))

Devuelve la lista (2 3 4 5 6 7)

Devuelve la lista (2 3 4 5 6 7)

(setq pt1 (getpoint "\npt1?:")pt2 (getpoint "\npt2?:")pt3 (getpoint "\npt3?:")


listap (list pt1 pt2 pt3)
)
(Command "_pline")
(While (setq pt (car listap ))
(setq listap (cdr listap)))
(command pt)
)
(command "")
Equivale a dibujar una polilnea que pasa por los puntos
pt1 pt2 y pt3.

(setq L '( 1 2 3 4 5 6) Ln nil


)
(foreach n L (setq Ln (cons (+ 1 n) Ln)))
(setq l (reverse ln))
)

Devuelve la lista (2 3 4 5 6 7)

(setq pt1 (getpoint "\npt1?:") pt2 (getpoint "\npt2?:") pt3 (getpoint "\npt3?:")
listap (list pt1 pt2 pt3)
)
(command "_pline")
(foreach punto listap (command punto))
(command "")
Equivale a dibujar una polilnea que pasa por los puntos
pt1 pt2 y pt3.

29

5.10. FUNCIN PARA CREAR FUNCIONES DE USUARIO


DEFUN
Define una nueva funcin Autolisp o una orden o comando Autocad
Sintaxis (DEFUN <nombre> <( [lista-argumentos][ / smbolos locales])> [expr] ...)
Nombre: el nombre de la funcin o de la orden que se est creando. Si es una orden o
comando Autocad el nombre ser: c:xxx
Lista-argumentos: una lista con los argumentos, que puede estar seguida por una barra oblicua
y los nombres de uno o ms smbolos locales para la funcin.
Argumentos: variables que toman valor en la llamada a la funcin
Smbolos locales: variables que slo tienen valor en la funcin que se define.
La barra oblicua debe ir separada del primer smbolo local y del ltimo argumento, si existe, por
un espacio como mnimo. Si no se declara ningn argumento ni smbolo local, se debe escribir
un conjunto vaco de parntesis tras el nombre de la funcin.
Los siguientes ejemplos de lista-argumentos muestran valores vlidos y no vlidos:
(defun mifunc (x y) ...)
(defun mifunc (/ a b) ...)
(defun mifunc (x / temp) ...)
(defun mifunc () ...)

La funcin toma dos argumentos


La funcin tiene dos smbolos locales
Un argumento, un smbolo local
Ningn argumento ni smbolo local

Expr: Expresiones que se ejecutan en la funcin y que utilizan como variables:


- Los argumentos de la funcin.
- Las variables locales que tienen que tomar valor en la funcin y lo pierden al ejecutarse la
misma.
- Las variables globales definidas, bien en esta funcin, bien en otras y que por no haber
sido definidas como locales en ninguna funcin tienen valor en todo el programa.
Valor retornado: La funcin DEFUN devuelve el nombre de la funcin que se va a definir. Al invocar
esta funcin, sus argumentos se evalan y se asocian a los smbolos correspondientes. La funcin
devuelve el resultado de la ltima expresin evaluada.
(DEFUN SUMA_10 (x)
(+ 10 x)
)

devuelve SUMA10

(SUMA_10 5)

devuelve 15

(SUMA_10 -7.4)

devuelve 2.6

(defun puntos (x y / temp)


(setq temp (strcat x "..."))
(strcat temp y)
)

devuelve PUNTOS

(puntos "a" "b")


(puntos "de" "a")
(eval temp)

devuelve "a...b"
devuelve "de...a"
devuelve nil

Advertencia: No se debe utilizar nunca el nombre de una funcin interna o un smbolo como nombre
de funcin creada por el usuario, ya que quedara inaccesible.

30

5.11. FUNCIONES GRFICAS


ANGLE
Calcula el ngulo que formara una recta definida por dos puntos con la direccin positiva del eje X
del SCP actual (si los puntos son 3D se proyectan sobre el plano de construccin actual)
Sintaxis: ( ANGLE <pt1> <pt2>)
Valor retornado: Un ngulo en radianes
(angle '(1.0 1.0) '(1.0 4.0))
(angle '(5.0 1.33) '(2.4 1.33)

devuelve 1.5708
devuelves 3.14159

DISTANCE
Calcula la distancia entre dos puntos
Sintaxis: ( DISTANCE <pt1> <pt2>)
Valor retornado: Un nmero real, que es la distancia en unidades de dibujo entre los dos puntos
suministrados como argumentos.
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 construccin actual.
(distance '(1.0 2.5 3.0) '(7.7 2.5 3.0)) devuelve 6.7
(distance '(1.0 2.0 0.5) '(3.0 4.0 0.5)) devuelve 2.82843
POLAR
Computa un punto en relacin a un punto dado.
Sintaxis: ( POLAR <pt> <ang> <dis>)
Valor retornado: Las coordenadas de un punto situado en el ngulo ang (radianes) y a una
distancia dis del punto pt todo ello con relacin al SCP actual. El ngulo siempre se refiere al
plano de construccin actual.
(polar '(1 1 3.5) 0.785398 1.414214)
(polar (1 1) (/ pi 2) 3)

devuelve (2.0 2.0 3.5)


devuelve (1.0 4.0)

INTERS
Calcula el punto de interseccin entre dos lneas
Sintaxis: ( INTERS <pt1> <pt2> <pt3> <pt4> [extend])
Valor retornado: Un punto que indica el punto de interseccin de la lnea definida por pt1 y pt2 y la
lnea definida por pt3 y pt4, si no se encuentra ningn punto de interseccin la funcin retorna un nil.
Extend: Si extend se evala como nil las lneas se prolongan hasta encontrar el punto de
interseccin, en caso contrario o si no se codifica, slo se busca la interseccin en la longitud
de los segmentos definidos por los puntos.
Todos los puntos se expresan respecto al SCP actual. Si los cuatro argumentos de puntos son 3D,
inters busca una interseccin 3D. Si hay algn punto 2D, inters proyecta las lneas sobre el plano de
construccin actual y slo busca una interseccin 2D.

(setq a '(1.0 1.0) b '(9.0 9.0))


(setq c '(4.0 1.0) d '(4.0 2.0))
(inters a b c d)
(inters a b c d T)
(inters a b c d nil)

devuelve nil
devuelve nil
devuelve (4.0 4.0)

31

5.12. FUNCIONES DE ENTRADA INTERACTIVA


GETPOINT
Detiene la ejecucin del programa para que el usuario introduzca un punto.
Sintaxis: (GETPOINT [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 del punto
Valor retornado: El punto introducido, como una lista de nmeros reales.
El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETDIST.
(setq p (getpoint))
(setq p (getpoint "Dnde? "))
(setq p (getpoint '(10 20))

respuesta :@40,20 valor retornado: (50.0 40.0 0.0)

GETDIST
Detiene la ejecucin 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 nmero real.
El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETDIST.
(setq dist (getdist))
(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "A qu distancia? "))
(setq dist (getdist '(1.0 3.5) "A qu distancia? "))

GETANGLE
Detiene la ejecucin del programa para que el usuario introduzca un ngulo.
Sintaxis: (GETANGLE [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 del ngulo
Valor retornado: El valor del ngulo en radianes.
La funcin GETANGLE mide los ngulos a partir de cero radianes (definidos mediante la variable de
sistema ANGBASE) aumentando en direccin opuesta a las agujas del reloj. El ngulo resultante se
expresa en radianes con respecto al plano de construccin actual (el plano XY del SCP actual, con
la elevacin actual).
El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETANGLE.
Para especificar un ngulo, el usuario debe escribir un nmero en el formato actual de unidades
angulares de AutoCAD. Aunque este formato puede utilizar grados, grados centesimales o cualquier
otra unidad, esta funcin siempre devuelve el ngulo en radianes. El usuario tambin puede
designar dos posiciones 2D en la pantalla grfica para indicar el ngulo a AutoLISP. AutoCAD dibuja
una lnea elstica desde el primer punto hasta la posicin del cursor en cruz con el fin de facilitar al
usuario la visualizacin 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 direccin 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 cdigo muestran cmo se pueden utilizar diferentes
argumentos.
(setq ang (getangle))
(setq ang (getangle '(1.0 3.5)))
(setq ang (getangle "Hacia dnde? "))
(setq ang (getangle '(1.0 3.5) "Hacia dnde? "))

GETORIENT
Detiene la ejecucin del programa para que el usuario introduzca un ngulo.
Sintaxis: (GETORIENT [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 del ngulo
Valor retornado: El valor del ngulo en radianes .
Esta funcin se asemeja a GETANGLE, con la
diferencia de que el valor de ngulo devuelto por
GETORIENT no se ve afectado por las variables de
sistema ANGBASE y ANGDIR. Sin embargo, la
introduccin del ngulo por parte del usuario todava se
basa en los parmetros actuales de ANGDIR y ANGBASE.
.
La funcin GETORIENT mide los ngulos con una
direccin de cero radianes hacia la derecha (este) y los
ngulos que se incrementan en sentido contrario a las
agujas del reloj. Al igual que con GETANGLE,
GETORIENT expresa el ngulo resultante en radianes,
respecto al plano de construccin actual. Los ngulos que
se transmiten a GETORIENT se basan en los valores
actuales de ANGDIR Y ANGBASE. Sin embargo, una vez
proporcionado el ngulo, ste se mide en sentido contrario
a las agujas del reloj, con cero radianes a la derecha
(ANGDIR y ANGBASE se ignoran). Por ello, si selecciona
otra base de cero grados u otra direccin para los ngulos
que se incrementan, se debe utilizar el comando
UNIDADES o las variables de sistema ANGBASE y
ANGDIR para realizar la conversin necesaria.
Se recomienda el uso de GETANGLE para obtener un valor de rotacin (un ngulo relativo). Y de
GETORIENT para obtener una orientacin (un ngulo absoluto).

GETCORNER
Detiene la ejecucin del programa para que el usuario introduzca un punto, y traza un rectngulo de
banda elstica en la pantalla a medida que el usuario mueve el dispositivo sealador
Sintaxis: (GETCORNER <pt> [mensaje])
pt: Primera esquina del rectngulo.
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
Extrae un valor almacenado en una variable del sistema de AutoCAD
Sintaxis: (GETVAR <"nombre de variable">)
Valor retornado: valor de la variable del sistema especificada.
(getvar "pdmode")
(getvar "area")
(getvar "perimeter")

Devuelve el valor actual para el tipo de punto


Devuelve el valor del ltimo rea calculada por Autocad
Devuelve el valor del ltimo permetro calculado por
Autocad.

GETINT
Detiene la ejecucin del programa para que el usuario introduzca un nmero 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.
El rango de valores pasados a GETINT puede ir de -32,768 a +32,767.
El usuario no puede escribir otra expresin de AutoLISP como respuesta a una peticin de GETINT.
(setq num (getint))
(setq num (getint "Escriba un nmero: "))

GETREAL
Detiene la ejecucin del programa para que el usuario introduzca un nmero 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 nmero real
Valor retornado: El real introducido por el usuario.
(setq val (getreal))
(setq val (getreal "Factor de escala: "))

GETSTRING
Detiene la ejecucin 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 vaca () si el usuario puls
Enter sin teclear caracteres.
Si tiene ms de 132 caracteres, la cadena slo devuelve estos caracteres. Si contiene el carcter 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 Daz Prez se define
como "Juan Daz Prez"
(setq s (getstring "Nombre de archivo: "))
"\\acad\\midibuj"

34

Si responde \acad\midibuj se define como

GETKWORD
Detiene la ejecucin del programa para que el usuario introduzca una cadena de caracteres. Esta
funcin comprueba la validez de lo introducido basndose en una lista de palabras vlidas
establecidas usando la funcin 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 funcin
tambin 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:
(initget 1 "S No")
(setq x (getkword "Seguro? (S o No) "))
Este mensaje solicita datos del usuario y define el smbolo x como S o No, segn 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:
Intntelo de nuevo:

INITGET
Establece las palabras clave que han de usarse con la siguiente llamada a una funcin introducida
por el usuario. Las funciones que toman en consideracin las palabras clave son getint, getreal,
getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel y nentselp. La funcin
getstring es la nica funcin introducida por el usuario que no las admite.
Sintaxis: (INITGET [bits] [cadena])
Bits: El argumento bits es un nmero 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 lmites del dibujo
64: devuelve una distancia 2D, en lugar de 3D.
Cadena: El argumento cadena define una lista de palabras clave.
Valor retornado: La funcin initget siempre devuelve nil.
Para ms informacin sobre la funcin se recomienda consultar el manual de personalizacin de
Autocad

35

GETFILED
Presenta un cuadro de dialogo de nombres de archivos y espera una entrada de usuario.
Sintaxis: (GETFILED <"dialogo"> <"nombre de Fichero por defecto" o ""> <"extensin" o "" (para. *)>
<parmetros>)
Parmetros:
dialogo determina el nombre del cuadro de dilogo,
nombre de Fichero por defecto especifica el nombre de archivo que se va a utilizar por defecto
extensin es la extensin por defecto del nombre del archivo. Si extensin se transmite como
una cadena nula [""], utiliza por defecto * (para todos los tipos).
parmetros es un valor entero (un campo codificado en bits) que controla el funcionamiento del
cuadro de dilogo. Para definir varias condiciones simultneamente, se aaden los valores en
conjunto y se crea un indicador con un nmero comprendido entre el 0 y el 15.
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 dilogo
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 operacin.
Valor del indicador = 2 (bit 1):Desactiva el botn Teclearlo. Este bit se define si se llama a la funcin
GETFILED mientras otro cuadro de dilogo est activo (en caso contrario, obliga a cerrar el otro
cuadro de dilogo).Si no se define este bit, se activa el botn Teclearlo. Cuando el usuario
selecciona el botn, el cuadro de dilogo desaparece y GETFILED devuelve 1.
Valor del indicador = 4 (bit 2):Permite al usuario escribir una extensin de nombre de archivo
arbitraria o bien no escribir ninguna. Si no se define este bit, GETFILED slo acepta la extensin
especificada en el argumento ext, y si el usuario no la escribe en la casilla de texto File, la aade 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 bsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el
orden de bsqueda en la estructura, descompone el camino y slo 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 dilogo para abrir un archivo existente cuyo
nombre desea guardar en el dibujo (u otra base de datos).
Si el usuario especifica un nombre de archivo en el cuadro de dilogo, GETFILED devuelve una
cadena que corresponde al nombre del archivo, en caso contrario, devuelve nil.
La siguiente llamada a getfiled presenta el cuadro de dilogo Seleccionar un archivo Lisp:
(getfiled "Seleccionar un archivo Lisp" "/acadr14/support/" "lsp" 8)
La funcin GETFILED muestra un
cuadro de dilogo con una lista que
incluye todos los archivos con la
extensin especificada que estn
disponibles. Puede utilizar este cuadro
de dilogo para buscar por los distintos
directorios y unidades, seleccionar un
archivo existente o especificar el nombre
de uno nuevo.

36

COMMAND
Ejecuta rdenes Autocad
Sintaxis: (COMMAND <"nombre de la orden"> [argumentos vlidos].....)
Valor retornado: nil
Los argumentos de la funcin command pueden ser cadenas, nmeros reales, nmeros enteros o
puntos, segn solicite la secuencia de mensajes del comando ejecutado. Una cadena nula ("")
equivale a pulsar RETURN en el teclado.
La funcin command sin argumentos equivale a pulsar ESC y cancela la mayora de los comandos
de AutoCAD.
La funcin command devuelve nil.
La funcin command evala los distintos argumentos y los enva 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 nmeros reales los puntos 2D y como listas de tres nmeros reales los puntos
3D.
(setq pt1 '(1 1) pt2 '(1 5))
(command "linea" pt1 pt2 "")
(setq p1 '(10 20) p2 '(45 60) d 40)
(command "linea" p1 p2 "" "circulo" p1 "d" d )
Se ejecuta:
Comando: linea
Desde el punto: p1
Al punto:p2
Al punto: ""
Comando: circulo 3P/2P/TTR/<centro>:p1
Dimetro/<Radio> <10>: d
Dimetro <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.
Los comandos que se ejecutan mediante la funcin command no se reproducen en la lnea de
comando si la variable de sistema CMDECHO est definida como cero. (setvar "CMDECHO" 0).
Las funciones indicadas por el usuario getxxx (getangle, getstring, getint, getpoint, etc.) no se
pueden utilizar dentro de la funcin command.
Los comandos TEXTODIN y BOCETO de AutoCAD leen desde el teclado y el digitalizador
directamente, por lo que no se pueden utilizar con la funcin command de AutoLISP.
Se crea un grupo DESHACER explcitamente alrededor de cada comando utilizado con la funcin
command. Si un usuario escribe H (o DESHACER) despus de ejecutar una rutina de AutoLISP,
slo se deshar el ltimo comando. Si se introduce DESHACER ms 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.
Si un comando de AutoCAD est activo y el smbolo PAUSE se encuentra predefinido como un
argumento de la funcin command, esta funcin se interrumpir para que el usuario pueda escribir
informacin.
Ejemplo ejecutado a nivel de lnea de comandos:
Comando: (setq centro '(10 20))
(10 20)
Comando: (command "circulo" centro PAUSE "linea" centro PAUSE "")
circulo 3P/2P/TTR/<centro>: Dimetro/<Radio>:
Comando: linea Desde el punto:
Al punto:
37

OSNAP
Aplica a un punto un modo de referencia Autocad
Sintaxis: (OSNAP <pt> <modo>)
Valor retornado: Una lista de punto resultante del modo de referenciar objetos que se est aplicando
al argumento pt.
El funcionamiento de esta orden depende del valor de la variable del sistema APERTURE y del
punto de vista 3D actual.

(osnap p5 "int")
(osnap p7 "fin")

devuelve nil
devuelve nil

Cambiando la variable APERTURE:

(osnap p5 "int")
(osnap p7 "fin")

38

devuelve nil
devuelve p4

5.13. FUNCIONES PARA GESTIN DE FICHEROS


LOAD
Carga un archivo Autolisp en la memoria y evala las expresiones en el archivo.
Sintaxis: (LOAD <"nombre del fichero"> [si falla] )
nombre de fichero: cadena de caracteres con el nombre, sin extensin .lsp, del fichero. Si no se
indica ningn camino se busca el fichero segn el camino de acceso a bibliotecas Autocad. .
Una barra oblicua (/) o dos contrabarras (\\) son delimitadores de directorio vlidos.
Si falla: valor vuelto por la funcin en el caso de que la carga del fichero fracase. Si no se
proporciona este argumento, la funcin presenta un mensaje de error AutoLISP
Valor retornado: El de la ltima expresin evaluada, si la carga es buena.
Los ficheros que se quiere sean cargados al iniciarse la sesin del editor de dibujo tendrn que estar
especificados en el fichero ACAD.LSP que Autocad carga automticamente.
Estudiar este ejemplo despus de ver la funcin DEFUN
(defun MI-FUNC1 (x)
(defun MI-FUNC2 (x)

...cuerpo de la funcin...)
...cuerpo de la funcin. )

y el archivo prueba2.lsp no existe, entonces:


(load "/luis/prueba1")
(load "\\luis\\prueba1")
(load "/luis/prueba1" "mal")
(load "prueba2" "mal")
(load "prueba2")

devuelve MI-FUNC2
devuelve MI-FUNC2
devuelve MI-FUNC2
devuelve "mal"
produce un error de AutoLISP

Cuando un programa define varias funciones deben estar todas codificadas en un nico fichero que
se cargar con la funcin LOAD.
OPEN
Abre un archivo de disco para leer o almacenar datos
Sintaxis: (OPEN <"nombre de fichero"> <"clave de acceso">)
El argumento nombre de fichero es una cadena que especifica el nombre y la extensin del
archivo que debe abrirse.
clave de acceso: cadena de una letra minscula, es la etiqueta de lectura/escritura y debe
contener una cadena de una sola letra en minsculas. En la tabla siguiente se describen las
letras de modo vlidas.
"r": Abre un fichero para lectura
"w": Abre un fichero para escritura
"a": Abre un fichero para escribir aadiendo nuevos datos al final del mismo. Sita el
puntero al final del fichero abierto.2
Valor retornado: El descriptor de fichero utilizado por las funciones de Entrada/Salida a fichero, por
tanto se deber atribuir a un smbolo que permita referirse a ese descriptor.
(setq a (open "archivo.ext" "r"))
Si se tiene en cuenta que los archivos de los ejemplos siguientes no existen,
(setq f (open "nueva.tst" "w"))
devuelve <Archivo #nnn>
(setq f (open "noesta.ahi" "r"))
devuelve nil
(setq f (open "registro" "a"))
devuelve <Archivo #nnn>
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, cdigo 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 ms datos. Si va a utilizar el modo "a"
de OPEN para aadir datos a archivos creados en otros programas, cercirese 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.
(setq f (open "/x/nueva.tst" "w"))
(setq f (open "\\x\\nueva.tst" "w"))

devuelve <Archivo #nnn>


devuelve <Archivo #nnn>

CLOSE
Cierra un archivo abierto
Sintaxis: (CLOSE <smbolo correspondiente al descriptor de fichero>)
El argumento smbolo correspondiente al descriptor de fichero es un descriptor de archivo que
se obtiene mediante la funcin OPEN. Tras utilizar la funcin CLOSE, aunque el descriptor de
fichero no cambia, deja de ser vlido. Los datos aadidos a un archivo abierto no se escriben
realmente hasta que se cierra el archivo.
Valor retornado: nil si descriptor_archivo es vlido, en caso contrario devuelve un mensaje de error.
Por ejemplo, el siguiente cdigo calcula el nmero de lneas del archivo unarchivo.txt y define la
variable ct en ese nmero.
(setq fil "UNARCHIVO.TXT")
(setq x (open fil "r") ct 0)
(while (read-line x)
(setq ct (1+ ct))
)
(close x)

FINDFILE
Localiza un archivo en la ruta de bsqueda de archivos de Autocad
Sintaxis: (FINDFILE <"nombre_archivo">)
Valor retornado: una cadena de caracteres con el nombre completo del archivo indicando la ruta de
localizacin.
La funcin FINDFILE no asigna el tipo o extensin del archivo especificado en nombre_archivo. Si
nombre_archivo no especifica un prefijo de unidad/directorio en este argumento, FINDFILE busca
en el camino de la biblioteca de AutoCAD. Si se escribe un prefijo de unidad/directorio, FINDFILE
busca en dicho directorio. La funcin FINDFILE siempre devuelve un nombre completo de
unidad/directorio/archivo o nil si el archivo especificado no se ha encontrado.
El nombre completo que devuelve FINDFILE puede utilizarse con la funcin OPEN.

Si el directorio actual es /acad y contiene el archivo abc.lsp.


(findfile "abc.lsp") devuelve "/acad/abc.lsp"
Si se est editando un dibujo en el directorio /acad/drawings, la variable de entorno ACAD se define
como /acad/support, y el archivo xyz.txt slo existe en el directorio/acad/support.
(findfile "xyz.txt") devuelve "/acad/support/xyz.txt"
Si ninguno de los directorios del camino de bsqueda de la biblioteca contiene el archivo no esta.
(findfile "noesta") devuelve nil

40

5.14. FUNCIONES DE LECTURA Y ESCRITURA


5.14.1. ESCRITURA
PRIN1
Imprime una expresin AutoLISP en el rea de rdenes o la escribe en un archivo abierto en modo
de escritura.
Sintaxis: (PRIN1 [expresin] [descriptor de fichero])
Valor retornado: el argumento de la expresin.
Es posible llamar a la funcin prin1 sin argumentos, en cuyo caso devuelve (e imprime) la cadena
nula.
(setq a 123 b '(a))
(prin1 'a)
(prin1 a)
(prin1 b)
(prin1 "Hola")

imprime
imprime
imprime
imprime

A
123
(A)
"Hola"

y devuelve
y devuelve
y devuelve
y devuelve

A
123
(A)
"Hola"

Los ejemplos anteriores aparecen en pantalla porque no se ha especificado un descriptor de


archivos con descriptor_archivo. Si se tiene en cuenta que f es un descriptor vlido para un archivo
abierto para escritura,
(prin1 "Hola" f)

escribir "Hola" en el archivo indicado y devolver "Hola".

PRINC
Imprime una expresin AutoLISP en el rea de rdenes o la escribe en un archivo. (La diferencia
con PRIN1 es que PRINC evala los caracteres de control que aparezcan en la expresin.).
Sintaxis: (PRINC [expresin] [descriptor de fichero])
Valor retornado: el argumento de la expresin.
PRINT
Imprime un salto de lnea, una expresin AutoLISP y un espacio en el rea de rdenes o lo escribe
en un archivo.
Sintaxis: (PRINT [expresin] [descriptor de fichero])
Valor retornado: el argumento de la expresin
PROMPT
Presenta una cadena de caracteres en el rea de rdenes. (Evala caracteres de control)
Sintaxis: (PROMPT <cadena>)
Valor retornado: nil
En las configuraciones de pantalla dual de AutoCAD, PROMPT muestra la cadena en ambas
pantallas, por lo que resulta ms til princ.
(prompt "Nuevo valor: "

muestra Nuevo valor: en la(s) pantalla(s)

WRITE-CHAR
Escribe un solo carcter en el rea de rdenes o bien en un fichero abierto.
Sintaxis: (WRITE-CHAR <num> [descriptor de fichero])
El argumento nm es el cdigo ASCII decimal del carcter que debe escribirse.
Valor retornado: El cdigo ASCII para los caracteres escritos.
(write-char 67)

devuelve 67 y escribe la letra C en la pantalla.

Si se tiene en cuenta que f es el descriptor de un archivo abierto,


(write-char 67 f)

devuelve 67 y escribe la letra C en ese archivo.

41

WRITE-LINE
Escribe una cadena de caracteres en al rea de rdenes o bien en un archivo (evala caracteres de
control.
Sintaxis: (WRITE-LINE <cadena> [descriptor de fichero])
Valor retornado: La cadena de caracteres.
(write-line "Prueba" f)

escribe Prueba y devuelve "Prueba"

TERPRI
Imprime un salto de lnea en el rea de rdenes.
Sintaxis: (TERPRI)
Valor retornado: nil

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 cdigo ASCII para el carcter ledo.
Por ejemplo, si se tiene en cuenta que el bfer de entradas por teclado est vaco,
(read-char)
espera a que se escriban datos. Si introduce los caracteres ABC seguidos de RETURN, read-char
devuelve 65 (el cdigo ASCII decimal correspondiente a la letra A). Las tres llamadas siguientes a
read-char devuelven 66, 67 y 10 (lnea nueva), respectivamente. Si se efecta otra llamada, readchar 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 leda. (Cuando se alcanza el final de un archivo de lectura el valor
retornado es nil )
Por ejemplo, si tiene en cuenta que f es un puntero de archivo abierto vlido,
(read-line f)
devuelve la siguiente lnea de entrada del archivo, o nil si ha llegado al final del archivo.

42

Ejemplo ejecutado a nivel de lnea 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 ORDENACIN

ACAD_STRLSORT
Ordena alfabticamente listas de cadenas de caracteres
Sintaxis: (ACAD_STRLSORT lista)
Valor retornado: La lista con las cadenas ordenadas alfabticamente. Si la lista no contiene cadenas
o no hay memoria suficiente para realizar la ordenacin, la funcin devuelve NIL.

(setq mes '("ene" "feb" "mar" "abr" "may" "jun" "jul" "ago" "sep" "oct" "nov" "dic"))
(acad_strlsort mes)

devuelve:
("abr" "ago" "dic" "ene" "feb" "jul" "jun" "mar" "may" "nov" "oct" "sep")

VL-SORT
Ordena todos los elementos de una lista de acuerdo con una funcin de comparacin dada. En
determinados casos puede eliminar los objetos duplicados.
Sintaxis: (VL-SORT lista funcin)
Puede emplearse como funcin de comparacin 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 ordenacin.
Valor retornado: La lista con los elementos de la lista original ordenados, aunque no se garantiza la
conservacin de todos los elementos originales (elimina las cadena y los enteros duplicados).

(vl-sort '(9.0 9.0 1 7 3 7 88) '<) )

devuelve: (1 3 7 9.0 9.0 88)

VL-SORT-I
Ordena todos los elementos de una lista de acuerdo con una funcin de comparacin dada, y
devuelve sus ndices. No elimina duplicados.
Sintaxis: (VL-SORT-I lista funcin)
Puede emplearse como funcin de comparacin 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 ordenacin.
Valor retornado: Una lista que contiene los ndices de los elementos de la lista, ordenados conforme
al criterio establecido por la funcin de comparacin.

(vl-sort-i '("a" "d" "f" "c") '>)

devuelve: (2 1 3 0)

El orden en la lista ordenada sera: "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.
(vl-sort-i '(9.0 9.0 1 7 3 7 88) '<) )

devuelve: (2 4 5 3 1 0 6)

Los ndices se pueden emplear para recuperar mediante la funcin NTH los valores originales.
(defun ordena-lista (lista funcion)
(mapcar (lambda (x) (nth x lista)) (vl-sort-i lista funcion))
)
(ordena-lista '(9.0 9.0 1 7 3 7 88) '<)

devuelve: (1 3 7 7 9.0 9.0 88)

44

5.16. FUNCIONES DE CONTROL DE PANTALLA

REDRAW
Redibuja la pantalla de presentacin (o las entidades especificadas)
Sintaxis: (REDRAW ) (sintaxis simplificada para el redibujado de la pantalla)
Valor retornado: Nil

GRAPHSCR
Fuerza la presentacin de pantalla grfica en sistema de pantalla nica.
Sintaxis: (GRAPHSCR)
Valor retornado: nulo

TEXTSCR
Presenta la pantalla texto en sistemas de pantalla nica
Sintaxis: (TEXTSCR)
Valor retornado: nulo

TEXTPAGE
Presenta la pantalla texto en sistemas de pantalla nica y la limpia
Sintaxis: (TEXTPAGE)
Valor retornado: nulo

VPORTS
Extrae los nmeros de identificacin de las ventanas grficas
Sintaxis: (VPORTS)
Valor retornado: Una lista de sublistas donde los elementos de cada sublista son:
1. El nmero de identificacin de cada ventana grfica.
2. Coordenadas de la esquina inferior izquierda (coordenadas normalizadas).
3. Coordenadas de las esquina superior derecha..

45

5.17. OTRAS FUNCIONES DE UTILIDAD


EVAL
Evala expresiones
Sintaxis:(EVAL <expresin>)
Valor retornado: El valor retornado por la expresin evaluada
En la lnea de rdenes la abreviatura es el signo !
(setq a 123)
(setq b 'a)
entonces:
(eval 4.0)
(eval (abs -10))
(eval a)
(eval b)

devuelve
devuelve
devuelve
devuelve

4.0
10
123
123

QUOTE
Procesa una instruccin sin evaluarla
Sintaxis:(QUOTE <expresin>)
Valor retornado: La expresin sin evaluarla
La sintaxis alternativa es el apstrofo. No puede usarse en el indicador COMMAND.
(quote a)
(quote cat)
(quote (a b))
'a
'cat
'(a b)

devuelve
devuelve
devuelve
devuelve
devuelve
devuelve

A
CAT
(A B)
A
CAT
(A B)

Los tres ltimos ejemplos no tienen efecto si se introducen directamente desde el teclado como
respuesta a un mensaje de AutoCAD.

NULL
Comprueba si una expresin se evala como nulo
Sintaxis: (NULL <expresin>)
Valor retornado: T si la expresin evaluada es nulo y nil en caso contrario.
(setq a 123 b "cadena" c nil)
(null a)
(null b)
(null c)
(null ' )

devuelve
devuelve
devuelve
devuelve

nil
nil
T
T

QUIT
Fuerza a la rutina actual a abandonar el procesamiento.
Sintaxis: (QUIT)
Valor retornado: El mensaje quit/exit abort (abandonar/salir abortar)

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 definicin 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
parmetros 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 mnimo 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 PROGRAMACIN AUTOLISP


6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIN AutoLISP
LISP BSICO: El objetivo ha sido la incorporacin de ALTAS en la base de datos geomtrica. La gran
limitacin consiste, por consiguiente, en plantear MODIFICACIONES.
LISP AVANZADO: Resuelve el problema anterior proporcionando formas de conexin con el
metaarchivo de informacin grfica.

6.2. CONCEPTOS BSICOS


Conjunto designado: Conjunto de entidades designado, bien,
automticamente y retenido como una variable en la corriente del programa.

interactivamente,

bien,

Nombre de entidad: clave alfanumrica asociada a cada entidad del dibujo en el formato interno.
(puntero capaz de producir una lectura en la base de datos del dibujo)
<Nombre de objeto: 3c50500>
Registro de entidad: Informacin relativa a la entidad estructurada como una lista de asociaciones
que utilizan como claves los cdigos estudiados para la estructura interna en el formato DXF.
Definicin de una lnea en formato DXF
0
LINE
5
20
100
AcDbEntity
8
0
100
AcDbLine
10
112.186506
20
131.211019
30
0.0
11
233.335573
21
229.387734
31
0.0

Registro de la entidad lnea utilizado por Autolisp


((-1 . <Nombre de objeto: 3c50500>) (0 . "LINE") (5 . "20")
(100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine")
(10 112.187 131.211 0.0) (11 233.336 229.388 0.0) (210 0.0 0.0 1.0))

48

6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS


- Creacin del conjunto designado:
(SETQ)
Creacin interactiva: SSGET
Creacin automtica: SSGET "X" filtros
Modos de designacin de Autocad
- Obtencin de los nombres de entidad.
(SETQ)
SSLENGTH
SSNAME
SSMEMB
SSADD
SSDEL
- Obtencin del registro de entidad.
(SETQ)
ENGET
- Gestin de subentidades (entidades compuestas)
Polilneas => Vrtices
Bloques con atributos => Atributos
(SETQ)
ENTLAST
ENTNEXT
ENTSEL
ENTDEL
- Manipulacin del registro de entidad:
ASSOC
CONS
SUBST
rdenes relacionadas con la manipulacin de listas
- Creacin de una nueva entidad:
ENTMAKE
- Modificacin de la informacin del registro y regeneracin del dibujo:
ENTMOD
ENTUPD (entidades compuestas).

49

6.4. DESCRIPCIN DE LAS FUNCIONES


SSGET
Solicita al usuario que designe objetos (entidades) y devuelve un conjunto de seleccin (un puntero
a la informacin del conjunto).
Sintaxis: (SSGET [modo] [pt1 [pt2]] [lista_pt] [lista_filtros])
Modo: es una cadena que especifica el mtodo de designacin de objetos. Los modos vlidos
son "_W", "_WP", "_C", "_CP", "_L", "_P", "_I" y "_F", que corresponden a los mtodos de
designacin Ventana, PolgonoV, Captura, PolgonoC, Ultimo, Previo, Implcito y Borde.
Otro valor optativo de modo es "X", que selecciona toda la base de datos.
pt1 y pt2: especifican puntos relevantes para la designacin. Introducir un punto sin ningn
argumento modo equivale a seleccionar un objeto designando un solo punto.
Lista_pt: especifican puntos relevantes para la designacin 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 aaden al conjunto de seleccin.
Si se omiten todos los argumentos, SSGET muestra la solicitud Designar objetos para que el
conjunto de seleccin pueda construirse de forma interactiva.
Valor retornado: un conjunto de seleccin (un puntero a la informacin del conjunto)
Los conjuntos de seleccin pueden contener objetos de los espacios papel y modelo, pero cuando
el conjunto se utiliza en una operacin, los objetos del espacio no activo se descartan. Los
conjuntos de seleccin devueltos por SSGET slo contienen entidades principales (ningn atributo
ni vrtice de polilnea).
Ejemplos de uso de SSGET
(ssget):
Solicita al usuario que realice una designacin general de objetos y los incluye en un conjunto
de seleccin
(ssget "_P"):
Crea un conjunto de seleccin con los ltimos Objetos seleccionados
(ssget "_L"):
Crea un conjunto de seleccin con los ltimos objetos visibles aadidos a la base de datos
(ssget '(2 2)):
Crea un conjunto de seleccin con un objeto que pasa por el punto (2,2)
(ssget "_W" '(0 0) '(5 5)):
Crea un conjunto de seleccin con los objetos incluidos en la ventana desde (0,0) hasta (5,5).
(ssget "_C" '(0 0) '(1 1)):
Crea un conjunto de seleccin con los objetos que pasan por el rectngulo de (0,0) a (1,1)
(ssget "X"):
Crea un conjunto de seleccin con todos los objetos de la base de datos
(ssget "X" lista_filtros):
Analiza la base de datos y crea un conjunto de seleccin de objetos que coinciden con la
lista_filtros.
(ssget lista_filtros ):
Solicita al usuario que realice una seleccin general de objetos y coloca slo los objetos que
coinciden con y los Incluye en un conjunto de seleccin
(ssget "_P" lista_filtros):
Crea un conjunto de seleccin 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 funcin. La
variable lista_pt no puede contener puntos que definan segmentos con longitud cero.
(setq lista_pt '((1 1)(3 1)(5 2)(2 4)) )
(ssget "_WP" lista_pt):
Crea un conjunto de seleccin con todos los objetos incluidos en el polgono definido por
lista_pt
(ssget "_CP" lista_pt):
Crea un conjunto de seleccin con todos los objetos que pasan por el polgono y los que estn
dentro definidos por lista_pt
(ssget "_F" lista_pt):
Crea un conjunto de seleccin con todos los objetos que intersecan el borde definido por
lista_pt
(ssget "_WP" lista_pt lista_filtros):
Crea un conjunto de seleccin con todos los objetos dentro del polgono definido por lista_pt
que coinciden con la lista_filtros
AutoLISP no permite manejar ms de 128 conjuntos abiertos a la vez. Si se alcanza este lmite,
AutoCAD se niega a crear ms conjuntos de seleccin y devuelve nil a todas las llamadas SSGET.

SSLENGTH
Devuelve el nmero entero correspondiente al nmero de entidades del conjunto designado
indicado.
Sintaxis: ( SSLENGTH < conjunto designado> )
Valor retornado: Un nmero entero.
(setq cs (ssget "U"))
(sslength cs)

Coloca el ltimo objeto en el conjunto de seleccin cs


devuelve 1

SSNAME
Devuelve el nombre de entidad de la entidad perteneciente al conjunto designado indicado y que
ocupa la posicin que especifica el ndice.
Sintaxis: ( SSNAME < conjunto designado> < ndice> )
El argumento ndice debe ser un nmero entero. Si es negativo o mayor que la entidad con el
nmero ms alto del conjunto de seleccin, el resultado es nil.
El primer elemento del conjunto tiene un ndice definido como cero.
Valor retornado: El nombre de la entidad (Un puntero a la informacin de la entidad)
(setq cs (ssget))
(setq ent1 (ssname cs 0))
(setq ent1 (ssname cs 3))

Crea un conjunto de seleccin llamado cs


Obtiene el nombre de la primera entidad de cs
Obtiene el nombre de la cuarta entidad de cs

SSMEMB
Comprueba si un objeto (entidad) forma parte de un conjunto de seleccin
Sintaxis: (SSMEMB <nombre_ent> < cs>)
Valor retornado: Si la entidad forma parte del conjunto, SSMEMB devuelve su nombre
(nombre_ent). En caso contrario, devuelve nil.
Por ejemplo, si la entidad e1 pertenece al conjunto de seleccin cs1 pero e2 no, entonces
(ssmemb e1 cs1)
(ssmemb e2 cs1)

devuelve el nombre de entidad e1


devuelve nil

51

SSADD
Aade un objeto (entidad) a un conjunto de seleccin o crea un conjunto de seleccin nuevo
Sintaxis: (SSADD [nombre_ent [cs]])
Si se llama a SSADD sin argumentos, la funcin construye un nuevo conjunto de seleccin sin
miembros.
Si se le llama con el argumento de nombre de entidad nico nombre_ent, SSADD construye un
conjunto de seleccin nuevo slo con esa entidad.
Si se le llama con un nombre de entidad y el conjunto de seleccin cs, SSADD aade la
entidad con nombre al conjunto de seleccin.
Valor retornado: el conjunto de seleccin nuevo o modificado.
Al aadir una entidad a un conjunto, la entidad nueva se aade al conjunto existente, y se
devuelve como resultado el conjunto transmitido como cs. De este modo, si el conjunto se
asigna a otras variables, stas tambin reflejan lo aadido. Si la entidad con nombre ya se
encuentra en el conjunto, la operacin con SSADD se ignora y no se indica ningn error.
(setq e1 (entnext))
(setq ss (ssadd))
(ssadd e1 cs)
(setq e2 (entnext e1))
(ssadd e2 cs)

Define e1 como el nombre de la primera entidad del


dibujo
Define cs como un conjunto de seleccin vaco
Devuelve cs con nombre de entidad e1 aadido
Obtiene la entidad que sigue a e1
Devuelve cs con nombre de entidad e2 aadido

SSDEL
Suprime un objeto (entidad) de un conjunto de seleccin
Sintaxis: (SSDEL <nombre_ent> <cs>)
La funcin SSDEL borra la entidad nombre_ent del conjunto de seleccin cs.
Valor retornado: el nombre de conjunto de seleccin cs.
La entidad se suprime del conjunto de seleccin, pero no se crea un conjunto nuevo con dicha
entidad. Si sta no se encuentra en el conjunto, se devuelve nil.
Por ejemplo, si la entidad e1 pertenece al conjunto de seleccin cs1 pero e2 no, entonces
(ssdel e1 cs1)
(ssdel e2 cs1)

Devuelve el conjunto de seleccin cs con la entidad e1


suprimido.
Devuelve nil (no cambia cs1)

52

ENTGET
Busca en la base de datos la entidad cuyo nombre se proporciona y devuelve una lista con los datos
de su definicin (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 funcin ASSOC. Los objetos de esta lista tienen
asignados cdigos de grupo DXF de AutoCAD para cada parte de la informacin de la entidad.
Supongamos que el ltimo objeto creado en el dibujo es una lnea cuyos puntos iniciales y finales
son (1,2) y (6,5), respectivamente. Mediante la funcin entlast, puede recuperar el nombre de la
entidad del ltimo objeto y transmitirlo a entget.
(entget (entlast))
El resultado podra ser el siguiente:
((-1 . <<Nombre de entidad: 60000014>>)
(0 . "LNEA")
(8 . "0")
(10 1.0 2.0 0.0)
(11 6.0 6.0 0.0)
)

Nombre de entidad
Tipo de objeto
Capa
Punto inicial
Punto final

Los cdigos 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
lnea, grosor, indicador de atributo e identificador de entidad) se exportan slo en el caso de que no
contengan valores por defecto. A diferencia de DXF, los campos optativos de definicin 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 estn presentes en los
algoritmos generales que les afectan. Adems, 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 convencin. Como un punto es una lista de dos (o tres) nmeros 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 convencin de que CDR siempre devuelve el valor.

53

CDIGOS DE GRUPO BSICOS INTERESANTES


Se presentan aqu algunos cdigos de grupo (los que se usarn ms frecuentemente). Para conocer los
dems se recomienda la consulta al manual de personalizacin de Autocad.
CDIGO
-1
0
1
2
3,4
6
7
8
10
11
38
39
40 a 48
50 a 58
62
210

VALOR
Nombre de entidad
Tipo de entidad
Valor del texto (la propia cadena)
Nombre: bloques, etc
Otros valores de nombre o de texto
Nombre de tipo de lnea
Nombre de estilo de texto
Nombre de capa
PUNTO PRIMARIO: Punto inicial (lnea), punto de colocacin(texto), centro (crculo),
punto de insercin de un bloque
Punto final
Elevacin
Altura de objeto
radios de circulo, Altura de texto, factores de escala. .....
ngulos
Nmero de color
Orientacin 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 funcin ENTLAST se suele utilizar para obtener el nombre de la entidad que se ha aadido con
la funcin COMMAND.
(setq e1 (entlast))

Define e1 como el nombre de la ltima entidad principal


del dibujo.

ENTNEXT
Devuelve el nombre del siguiente objeto (entidad) del dibujo. La funcin ENTNEXT devuelve tanto
las entidades principales como las subentidades. Las entidades seleccionadas mediante SSGET
son entidades principales, no atributos de bloques ni vrtices de polilneas. 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 aproximndose con ENTNEXT hasta que se encuentre una entidad SEQEND y, a
continuacin, extrayendo el grupo -2 de la entidad, que es el nombre principal de entidad.

54

(setq e1 (entnext))
(setq e2 (entnext e1))

Asigna e1 al nombre de la primera entidad del dibujo


Define e2 como el nombre de la entidad que sigue a e1

(defun lastent (/ a b)
(if (setq a (entlast))
(while (setq b (entnext a))

Obtiene la ltima entidad principal

(setq a b) )
)

si contiene subentidades, crea un bucle hasta la ltima


subentidad
a: devuelve la ltima entidad o subentidad principal

ENTSEL
Solicita al usuario la designacin de un nico objeto (entidad) mediante la especificacin de un
punto.
Sintaxis: (ENTSEL [solicitud])
La cadena especificada en solicitud se utiliza para solicitar al usuario el objeto. Si no se escribe
ninguna cadena, la solicitud tomar Designar objeto como valor por defecto.
Valor retornado: una lista cuyo primer elemento es el nombre de la entidad del objeto designado y
cuyo segundo elemento lo forman las coordenadas del punto utilizado para designar el objeto.
Nota: El punto de designacin que devuelve ENTSEL no representa un punto que est en el
objeto seleccionado. El punto que se devuelve es la ubicacin del cursor en cruz cuando se
realiza la designacin. La relacin entre el punto de designacin y el objeto variar
dependiendo del tamao de la caja de seleccin y de la escala de ampliacin actual.
La siguiente secuencia de comandos de AutoCAD ilustra el uso de la funcin 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
Suprime objetos (entidades) o recupera los objetos eliminados anteriormente
Sintaxis: (ENTDEL nombre_ent)
La entidad especificada mediante nombre_ent se suprime si ya forma parte del dibujo. La
funcin entdel recupera la entidad (la devuelve al dibujo) si se ha suprimido anteriormente en
esta sesin de edicin. Las entidades suprimidas se purgan del dibujo cuando se sale del
mismo. La funcin entdel puede suprimir las entidades grficas y no grficas.
Valor retornado: El nombre de entidad suprimida o dada de alta.
(setq e1 (entnext))
(entdel e1)
(entdel e1)

;Define e1 como el nombre de la primera entidad del dibujo


;Suprime la entidad e1
;Anula la supresin (recupera) la entidad e1

La funcin ENTDEL slo acta con entidades principales. Los atributos y vrtices de polilneas no
pueden eliminarse sin tener en cuenta la entidad original. Puede utilizar la funcin 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 definicin completamente, con excepcin de la entidad que desea suprimir.

55

ENTMAKE
Crea una nueva entidad (objeto grfico) en el dibujo. La funcin ENTMAKE puede definir entidades
tanto grficas como no grficas.
Sintaxis: (ENTMAKE [lista_ent])
El argumento lista_ent debe ser una lista con datos de definicin de entidad en un formato
similar al devuelto por la funcin ENTGET. El argumento lista_ent debe contener toda la
informacin necesaria para definir la entidad Si se omite dicha informacin, ENTMAKE
devuelve nil y no se admite la entidad. Si omite informacin de la definicin optativa (como la
capa), ENTMAKE utiliza el valor por defecto.
Valor retornado: Si ENTMAKE crea correctamente la nueva entidad, devuelve la lista de informacin
de la definicin de la entidad. Si ENTMAKE no puede crear la entidad, devuelve nil.
Forma de uso: Un mtodo para crear una entidad consiste en obtener la informacin de definicin
de una entidad con la funcin ENTGET, modificarla y transmitir los datos revisados a la funcin
ENTMAKE. Antes de crear una entidad ENTMAKE, se debe verificar si los nombres de capa, tipo de
lnea y color indicados son correctos. Al indicar un nombre de capa nuevo, ENTMAKE crea la capa
de forma automtica.
El cdigo siguiente crea un crculo rojo, con centro en el punto (4,4) y radio 1. Los campos optativos
de capa y tipo de lnea se han omitido, por lo que se mantienen los valores por defecto.
(entmake
'((0 . "CIRCLE") (62 . 1)
(10 4.0 4.0 0.0) (40 . 1.0) )

Tipo de objeto y color


Radio y Centro

ENTMOD
Modifica los datos de la definicin de un objeto (entidad) Al actualizar la entidad principal, ENTMOD
la modifica y actualiza su imagen en la pantalla.
Sintaxis: (ENTMOD <lista_ent>)
La funcin ENTMOD se transmite a una lista (lista_ent) en el formato que devuelve ENTGET y
actualiza la informacin 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 funcin ENTMOD puede definir objetos tanto grficos como no grficos.
(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
Actualiza la imagen de un objeto (entidad) en pantalla
Sintaxis: (ENTUPD <nombre_ent>)
Cuando se modifica un vrtice de polilnea o un atributo de bloque con ENTMOD, no se
actualiza en la pantalla la entidad compleja completa. La funcin ENTUPD puede utilizarse
para actualizar en pantalla una polilnea o bloque modificados. Esta funcin puede llamarse con
el nombre de la entidad como parte de la polilnea o bloque; no es necesario que sea una
entidad principal. Aunque ENTUPD va destinada al uso con bloques y polilneas con atributos,
se puede llamar para cualquier entidad y siempre regenera la entidad en la pantalla, incluidas
las subentidades.
Si la primera entidad del dibujo fuera una polilnea con varios vrtices, entonces:
(setq e1 (entnext))
Define e1 como el nombre de entidad de la polilnea
(setq e2 (entnext e1))
Define e2 como el primer vrtice
(setq ed (entget e2))
Define ed como los datos del vrtice
(setq ed (subst '(10 1.0 2.0) (assoc 10 ed) ed ) )
Cambia la posicin del vrtice en ed al punto (1,2)
(entmod ed)
Traslada el vrtice en el dibujo
(entupd e1)
Regenera la entidad e1 de la polilnea.
56

Ejemplo completo

(DEFUN C:TTT ()
(PRIN1 "SEALAR 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 "SEALAR 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
(SETQ NENT (READ (STRCAT "ENT" (ITOA I1)))
ENT (SSNAME CD1 I1)
RENT (ENTGET ENT)
I1 (+ I1 1)
)
(PRINT "CD1" F1)
(PRINT NENT F1)
(PRINT RENT F1)
(SETQ CAPA (ASSOC 8 RENT)
CAPAN (CONS 8 "1")
RENT (SUBST CAPAN CAPA RENT)
)
(ENTMOD RENT)
)

57

(REPEAT N2
(SETQ NENT (READ (STRCAT "ENT" (ITOA I2)))
ENT (SSNAME CD2 I2)
RENT (ENTGET ENT)
I2 (+ I2 1)
)
(PRINT "CD2" F1)
(PRINT NENT F1)
(PRINT RENT F1)
(SETQ CAPA (ASSOC 8 RENT)
CAPAN (CONS 8 "2")
RENT (SUBST CAPAN CAPA RENT)
)
(ENTMOD RENT)
)
(REPEAT N3
(SETQ NENT (READ (STRCAT "ENT" (ITOA I3)))
ENT (SSNAME CD3 I3)
RENT (ENTGET ENT)
I3 (+ I3 1)
)
(PRINT "CD3" F1)
(PRINT NENT F1)
(PRINT RENT F1)
(SETQ ALTEXTO (ASSOC 40 RENT)
NALTEXTO (CONS 40 (* 2 CDR ALTEXTO))
RENT (SUBST NALTEXTO ALTEXTO RENT)
)
(ENTMOD RENT)
)
(CLOSE F1)
)

58

7. CDIGOS 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 mayora de estos mensajes sealan errores de programacin en AutoLISP,
como:
-

Nombre de funcin o smbolo mal escritos


Tipo o nmero de argumentos de funcin errneos
Incoherencia en parntesis
Incoherencia en comillas (cadenas de caracteres no terminadas)
Falta de comprobacin de la terminacin correcta de una funcin antes de intentar utilizar su
resultado.

Los mensajes que Autolisp presenta por defecto son los siguientes:
- Los argumentos de defun no pueden tener el mismo nombre: Una funcin definida con varios
argumentos que tengan el mismo nombre fallar y generar este mensaje.
- AutoCAD rechaz la funcin: Los argumentos suministrados a una funcin de AutoCAD no son
vlidos (como en setvar con una variable de sistema de slo lectura o tblnext con un nombre de tabla
no vlido) o la propia funcin no es vlida en el contexto actual. Por ejemplo, no puede utilizar una
funcin getxxx de introduccin de datos del usuario dentro de la funcin command.
- Desbordamiento de pila de AutoLISP : Se ha superado el espacio de almacenamiento de pila de
AutoLISP. El motivo puede ser una repeticin excesiva de funciones o listas de argumentos muy
largas.
- Tipo de argumento errneo: Se ha pasado un tipo de argumento incorrecto a una funcin. (Por
ejemplo, no se puede obtener la strlen de un nmero entero.)
- Bad association list: La lista suministrada a la funcin assoc no est formada por listas de valor clave.
- Cdigo de conversin errneo: El identificador space suministrado a la funcin trans no es vlido.
- 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 asociacin suministrada a entmod
contiene un valor errneo.
- Lista de argumento formal inadecuada: Al evaluar esta funcin, AutoLISP ha detectado una lista de
argumento formal no vlida. Quizs no se trate de una funcin, sino ms bien de una lista de datos.
- Funcin incorrecta: El primer elemento de la lista no es un nombre de funcin vlido; quizs se trate
de un nombre de variable o de un nmero. Este mensaje tambin puede indicar que la funcin
especificada no est bien definida
- Lista incorrecta: Se ha suministrado una lista con errores de forma a una funcin. Esto puede suceder
si un nmero 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.
- Bad node: La funcin type ha encontrado un tipo de elemento no vlido.
- Tipo de nodo errneo en la lista: La funcin foreach ha encontrado un tipo de elemento no vlido.

59

- Argumento de puntos incorrecto valor de punto incorrecto: Se ha pasado un punto mal definido (una
lista de dos nmeros reales) a una funcin que esperaba un punto. Un nmero real no puede
empezar por un separador decimal; en dicho caso, hay que incluir el cero inicial.
- Detectado nmero real incorrecto: Se ha intentado transmitir un nmero real no vlido 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 errneo.
- Cadena modo ssget incorrecta: Este error se produce cuando ssget recibe una cadena no vlida 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 funcin getcorner sin el argumento de punto base
obligatorio.
- Boole arg1 0 or 15: El primer argumento de la funcin booleana ha de ser un nmero entero entre 0 y
15.
- Imposible evaluar la expresin: Separador decimal mal colocado o alguna otra expresin incorrecta.
- No es posible abrir (archivo) para entrada; fallo de LOAD: No se ha encontrado el archivo designado
en la funcin load, o el usuario no tiene permisos de lectura sobre ese archivo.
- Imposible volver a entrar en AutoLISP: Una funcin activa est utilizando el bfer de comunicacin
AutoCAD/AutoLISP; no se podr llamar a otra nueva funcin hasta que la actual haya finalizado.
- Interrupcin desde el teclado: El usuario ha tecleado CTRL+C durante el proceso de una funcin.
- Divide by zero: No se puede dividir por cero.
- Desbordamiento en divisin: La divisin por un nmero muy pequeo ha dado como resultado un
cociente no vlido.
- Exceeded maximum string length. Se ha pasado a una funcin una cadena con ms de 132
caracteres.
- Extra right paren: Se ha encontrado uno o ms parntesis cerrados de los necesarios.
- File not open: El descriptor de archivo para la operacin de E/S no es el de un archivo abierto.
- Lectura de archivo, memoria de cadenas insuficiente: Memoria de cadenas agotada mientras
AutoLISP lea un archivo. Consulte el captulo 15, "Gestin de memoria".
- File size limit exceeded: Un archivo ha superado el lmite de tamao permitido por el sistema
operativo.
- Floating-point exception: (Slo sistemas UNIX.) El sistema operativo ha detectado un error aritmtico
de coma flotante.
- Funcin 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 lmites permitidos.
- Function undefined for real: Se ha suministrado un nmero real como argumento de una funcin que
exige un nmero 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 cdigos de formato.
- Improper argument: El argumento para gcd es negativo o cero.
- Nmero incorrecto de argumentos. La funcin quote slo espera un argumento concreto, pero se le
han proporcionado otros.
- Nmero incorrecto de argumentos para una funcin: El nmero de argumentos para la funcin creada
por el usuario no coincide con el nmero de argumentos formales especificado en defun.
- Solicitud inadecuada de datos sobre lista de comandos: Se ha encontrado una funcin de comando
pero no se puede ejecutar porque hay otra funcin activa o porque el intrprete de comandos no est
completamente inicializado. Este error puede producirse desde una llamada a la funcin command en
acad.lsp, acadr13.lsp o en un archivo .mnl.
- Entrada interrumpida: Se ha detectado un error o condicin de fin de archivo prematuro, lo que ha
provocado la finalizacin de la introduccin de datos en el archivo.
- Insufficient node space: No hay espacio suficiente en la pila de almacenamiento para la accin
solicitada. Consulte el captulo 15, "Gestin de memoria".
- Insufficient string space. No hay espacio en la pila de almacenamiento para la cadena de texto
especificada. Consulte el captulo 15, "Gestin de memoria".
- Invalid argument: Tipo de argumento errneo o argumento sobrepasa los lmites permitidos.
- Lista de argumentos no vlida: Se ha pasado a una funcin una lista de argumentos que contiene
errores.
- Invalid character: Una expresin contiene un carcter errneo.
- Invalid dotted pair: Los pares punteados son listas que contienen dos elementos separados por la
construccin espacio-punto-espacio. Este mensaje de error puede deberse a un nmero real que
empieza por el separador decimal, en cuyo caso ha de incluir el cero inicial.
- Valor de nmero entero no vlido: Se ha encontrado un nmero menor que el entero ms pequeo o
mayor que el nmero entero ms grande.
- Desbordamiento LISPSTACK: Se ha superado el espacio de almacenamiento de pila de AutoLISP. El
motivo puede ser una repeticin excesiva de funciones o listas de argumentos muy largas.
- Malformed list: Se ha terminado prematuramente una lista que se estaba leyendo en un archivo. La
causa ms comn es una incoherencia en el emparejamiento de las aperturas y cierres de parntesis
o comillas.
- Malformed string: Se ha terminado prematuramente una cadena que se estaba leyendo en un
archivo.
- Misplaced dot: Un nmero real comienza con el separador decimal. Ha de incluir un cero inicial en
este caso.
- Funcin nula: Se ha intentado evaluar una funcin que tiene una definicin vaca.

61

- Quitar/salir abandonar: Se ha llamado a la funcin quit o exit.


- Cadena demasiado larga: La cadena que se ha pasado a setvar es demasiado larga.
- Too few arguments: Se han pasado pocos argumentos a una funcin integrada.
- Demasiados argumentos: Se han pasado demasiados argumentos a una funcin integrada.

62

8. NDICE DE FUNCIONES
IF ........................................................................... 27
INITGET ................................................................. 35
INTERS .................................................................. 31
ITOA....................................................................... 21
LAMBDA................................................................ 20
LAST ...................................................................... 17
LENGTH................................................................. 15
LIST........................................................................ 15
LISTP ..................................................................... 18
LOAD ..................................................................... 39
LOG........................................................................ 10
MAPCAR................................................................ 20
MAX ....................................................................... 10
MEMBER ............................................................... 18
MIN......................................................................... 10
MINUSP ................................................................. 10
NTH ........................................................................ 17
NULL...................................................................... 46
NUMBERP ............................................................. 11
OPEN ..................................................................... 39
OR .......................................................................... 25
OSNAP................................................................... 38
POLAR................................................................... 31
PRIN1..................................................................... 41
PRINC .................................................................... 41
PRINT..................................................................... 41
PROGN .................................................................. 27
PROMPT ................................................................ 41
QUIT....................................................................... 46
QUOTE................................................................... 46
READ ............................................................... 13, 23
READ- LINE........................................................... 42
READ-CHAR.......................................................... 42
REDRAW ............................................................... 45
REM ....................................................................... 11
REPEAT................................................................. 28
REVERSE .............................................................. 18
RTOS ..................................................................... 22
SETQ...................................................................... 12
SETVAR................................................................. 12
SIN ........................................................................... 9
SQRT ..................................................................... 11
SSADD................................................................... 52
SSDEL ................................................................... 52
SSGET ................................................................... 50
SSLENGTH............................................................ 51
SSMEMB................................................................ 51
SSNAME ................................................................ 51
STRCASE .............................................................. 13
STRCAT................................................................. 13
STRLEN ................................................................. 13
SUBST ................................................................... 18
SUBSTR................................................................. 13
TERPRI .................................................................. 42
TEXBOX................................................................. 47
TEXTPAGE ............................................................ 45
TEXTSCR............................................................... 45
TRANS ................................................................... 23
TYPE ...................................................................... 12
VL-LIST->STRING ................................................. 14
VL-PRINC-TO-STRING.......................................... 14
VL-SORT................................................................ 44
VL-SORT-I ............................................................. 44
VL-STRING->LIST ................................................. 14
VPORTS................................................................. 45
WHILE.................................................................... 29
WRITE-CHAR ........................................................ 41
WRITE-LINE .......................................................... 42
ZEROP ................................................................... 11

- ............................................................................. 8
............................................................................. 8
* ............................................................................. 8
/ ............................................................................. 8
/= ........................................................................... 24
+ ............................................................................. 8
< ........................................................................... 24
<=........................................................................... 25
= ..................................................................... 24, 26
> ........................................................................... 24
>=........................................................................... 25
1- ............................................................................. 9
1+ ............................................................................. 9
ABS ......................................................................... 9
ACAD_STRLSORT ............................................... 44
AND ....................................................................... 25
ANGLE................................................................... 31
ANGTOF ................................................................ 22
ANGTOS................................................................ 22
APPEND ................................................................ 15
APPLY ................................................................... 20
ASCII ..................................................................... 23
ASSOC .................................................................. 17
ATAN ....................................................................... 9
ATOF ..................................................................... 21
ATOI ...................................................................... 21
ATOM .................................................................... 19
CAR ....................................................................... 16
CDR ....................................................................... 16
CHR ....................................................................... 23
CLOSE................................................................... 40
COMMAND ............................................................ 37
COND .................................................................... 27
CONS..................................................................... 15
COS ......................................................................... 9
CVUNIT.................................................................. 23
DEFUN................................................................... 30
DISTANCE............................................................. 31
DISTOF .................................................................. 22
ENTDEL................................................................. 55
ENTGET................................................................. 53
ENTLAST............................................................... 54
ENTMAKE ............................................................. 56
ENTMOD................................................................ 56
ENTNEXT .............................................................. 54
ENTSEL ................................................................. 55
ENTUPD ................................................................ 56
EQ.......................................................................... 26
EQUAL................................................................... 26
EVAL ..................................................................... 46
EXP........................................................................ 10
EXPT...................................................................... 10
FINDFILE ............................................................... 40
FIX ......................................................................... 21
FLOAT ................................................................... 21
FOREACH ............................................................. 19
GCD ....................................................................... 10
GETANGLE ........................................................... 32
GETCORNER ........................................................ 33
GETDIST................................................................ 32
GETFILED ............................................................. 36
GETINT .................................................................. 34
GETKWORD.......................................................... 35
GETORIENT .......................................................... 33
GETPOINT............................................................. 32
GETREAL .............................................................. 34
GETSTRING .......................................................... 34
GETVAR ................................................................ 34
GRAPHSCR........................................................... 45

63

9. BIBLIOGRAFA BSICA
AUTODESK: Autolisp: Manual de personalizacin. (Varias versiones)
OTERO GONZLEZ, Csar: Guiones para las clases de C.A.D. Tercera y Cuarta parte: Lisp avanzado.
E.T.S. de Ingenieros de Caminos, Santander. 1992.
TOGORES FERNNDEZ, Reinaldo y OTERO GONZLEZ, Csar: Programacin en Autocad con Visual
Lisp. Ed. Mc Graw Hill. 2003.

63

Вам также может понравиться