SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
PROGRAMACIÓN
AUTOLISP
(PERSONALIZACIÓN
DE AUTOCAD)
MILAGROS CANGA VILLEGAS
JOSÉ ANDRÉS DÍAZ SEVERIANO
Departamento de Ingeniería Geográfica
y Técnicas de Expresión Gráfica
T
a
a/2
a/3
T a
a/2
a/2
Pa
P
cenp
ceng
cen
a/2 a/3
a/12
a/12
a/12
Sistema de rectas
paralelas
a/3
a/3
Formas
homotéticas
rad
Pa
P
cen
Figura 1: Definición geométrica
Figura 2: Mosaico
“No basta el recuerdo
Cuando aún queda tiempo”
(Luis Cernuda)
“El hoy es malo, pero el mañana ... es mío”
(Antonio Machado)
i
ii
INDICE:
1. PRESENTACIÓN GENERAL DE AUTOLISP 1
2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS 2
2.1. Números 2
2.2. Cadenas 2
2.3. Listas 3
2.4. Símbolos y variables 3
2.5. Conjuntos de selección 3
2.6. Nombres de entidad 4
2.7. Descriptores de archivo 4
2.8. Subrutinas 4
3. EXPRESIONES DE AUTOLISP 5
4. RECOMENDACIONES INICIALES PARA LA CODIFICACIÓN DE UNA RUTINA LISP 6
5. FUNCIONES AUTOLISP 7
5.1. FUNCIONES ARITMÉTICAS 8
5.2. FUNCIONES DE ASIGNACIÓN 12
5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO 13
5.4. FUNCIONES PARA GESTIÓN DE LISTAS 15
5.4.1. CREACIÓN DE LISTAS 15
5.4.2. EXTRACCIÓN DE ELEMENTOS DE UNA LISTA 16
5.4.3. MANIPULACIÓN DE LISTAS 18
5.5. FUNCIONES MONOLÍNEA 20
5.6. FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN 21
5.7. FUNCIONES DE RELACIÓN 24
5.8. FUNCIONES DE CONDICIÓN 27
5.9. FUNCIONES PARA GESTIÓN DE CICLOS 28
5.10. FUNCIÓN PARA CREAR FUNCIONES DE USUARIO 30
5.11. FUNCIONES GRÁFICAS 31
5.12. FUNCIONES DE ENTRADA INTERACTIVA 32
5.13. FUNCIONES PARA GESTIÓN DE FICHEROS 39
5.14. FUNCIONES DE LECTURA Y ESCRITURA 41
5.14.1. ESCRITURA 41
5.14.2. LECTURA 42
5.15. FUNCIONES DE ORDENACIÓN 44
5.16. FUNCIONES DE CONTROL DE PANTALLA 45
5.17. OTRAS FUNCIONES DE UTILIDAD 46
6. FUNCIONES AVANZADAS DE PROGRAMACIÓN AUTOLISP 48
6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIÓN AutoLISP 48
6.2. CONCEPTOS BÁSICOS 48
6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS 49
6.4. DESCRIPCIÓN DE LAS FUNCIONES 50
7. CÓDIGOS Y MENSAJES DE ERROR DE AUTOLISP 59
8. ÍNDICE DE FUNCIONES 63
9. BIBLIOGRAFÍA BÁSICA 63
1
1. PRESENTACIÓN GENERAL DE AUTOLISP
AutoLISP es una adaptación del lenguaje de programación LISP y forma parte integral del paquete
AutoCAD. Autolisp es un pequeño subconjunto del CommonLISP, y por ello se ajusta muy estrechamente a
la misma sintaxis y convenciones, pero consta de muchas funciones específicas de AutoCAD.
AutoLISP es la más potente herramienta para optimizar la ejecución de AutoCAD. Le habilita para
«automatizar» AutoCAD incluso más allá de lo que puede llevar a cabo usando macros.
Las rutinas AutoLISP tienen aplicaciones como:
- La creación de nuevas y únicas órdenes AutoCAD.
- La inserción de funciones especiales para dibujar y para calcular.
- Análisis detallados de gráficos 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 gráficos. AutoLISP es flexible y fácil de aprender y utilizar
para los no-programadores, quienes al aprender AutoLISP sólo necesitan conceptos básicos de
programación, tales como:
- 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 condición específica (bucles).
- Específicamente: Acceder a los datos de la base de datos geométrica
El código de AutoLISP no se compila 1
, se puede teclear el código en la línea de comandos y ver los
resultados inmediatamente haciéndose más sencilla la introducción a este lenguaje para los no iniciados. En
un segundo nivel de aprendizaje resulta mucho más fácil realizar pruebas y depurar cuando este código se
carga desde un archivo, en lugar de volverlo a escribir cada vez que se realiza alguna modificación.
El código de AutoLISP se almacena en archivos de texto ASCII con la extensión *. lsp. La sintaxis de las
expresiones de AutoLISP escritas en los archivos es básicamente la misma que se utiliza para escribirlas en
la solicitud de comando.
1
Se trabaja a este nivel docente sin compilar. Se recomienda consultar los manuales de VisualLISP de la versión 2000
de AutoCad o superior.
2
2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS
El evaluador de AutoLISP procesa las expresiones de acuerdo con el orden y el tipo de datos del
código.
Este código se caracteriza especialmente porque aparece entre paréntesis.
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. Números
Números enteros
Los enteros son números sin coma decimal. Los enteros de AutoLISP son números de 32 bits con signo
cuyos valores están comprendidos entre +2 147 483 648 (231
) y –2 147 483 647. Aunque AutoLISP utiliza
internamente valores de 32 bits, los que se transmiten de AutoLISP a AutoCAD y viceversa están limitados
a 16 bits. Por tanto, no pueden transmitirse a AutoCAD valores superiores a +32 767 (215
) ni valores
inferiores a –32 768. Los enteros que se utilizan de forma explícita en expresiones de AutoLISP se conocen
como constantes. Números como 2, -56, y 1 200 196 son enteros válidos de AutoLISP.
Números reales
Los números reales son aquellos que contienen la coma decimal. Los comprendidos entre -1 y 1 deben
empezar por cero. (No se admiten formatos como .2 ó 2.)
Los números reales se almacenan en formato de coma flotante de doble precisión, lo cual proporciona
una precisión mínima de 14 dígitos significativos, aunque el área de comandos de AutoCAD muestra sólo 6.
Los números reales pueden expresarse en notación científica, que consta de una e o E opcional seguida
por el exponente del número (por ejemplo, 0.0000041 es lo mismo que 4.1e-6).
Los números reales que se utilizan de forma explícita en expresiones de AutoLISP se conocen como
constantes. Números como 3,1, 0,23, -56,123, y 21 000 000.0 son números reales válidos de AutoLISP.
2.2. Cadenas
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 códigos de escape):
 para el carácter 
e para el carácter ESC
n para el salto de línea
r para RETURN
t para tabulador
Las cadenas individuales tienen una limitación de 132 caracteres.
Las cadenas entre comillas que se utilizan de forma explícita en expresiones de AutoLISP se conocen
como cadenas de texto o constantes de cadena.
Ejemplos de cadenas válidas son "cadena 1" y "nPrimer punto: ".
3
2.3. Listas
Las listas de AutoLISP son grupos de valores relacionados, separados por espacios en blanco (uno o
varios se interpretan como uno sólo) e incluidos entre paréntesis.
Las listas proporcionan un método eficaz para almacenar numerosos valores relacionados.
AutoCAD expresa los puntos 3D como una lista de tres números reales.
Ejemplos de listas son: (1.0 1.0 0.0), ("éste" "ése" "aquél") y (1 "UNO").
2.4. Símbolos y variables
AutoLISP utiliza símbolos para almacenar los datos.
En los nombres de símbolos no se distingue entre mayúsculas y minúsculas, pudiendo emplearse
cualquier secuencia de caracteres alfanuméricos, siempre que no contenga a alguno de los siguientes:
- Paréntesis ( ) Reservado para lista y expresiones
- Punto . Punto decimal
- Apostrofo ' Abreviatura de la Función QUOTE
- Comillas " Reservado a las cadenas de caracteres.
- Punto y coma; Para comenzar una línea de comentarios.
Un nombre de símbolo no puede estar compuesto sólo por caracteres numéricos.
Las aplicaciones de AutoLISP hacen uso de símbolos o valores constantes, como cadenas, números
reales o enteros, y variables, empleadas para almacenar datos generados durante las ejecución de los
programas.
AutoCAD proporciona tres variables predefinidas que pueden emplearse en las aplicaciones de
AutoLISP:
- PAUSE: está definida como una cadena compuesta que consta sólo de una contrabarra (). Esta
variable se emplea con la función command para que el programa espere a que el usuario escriba
datos.
- PI: está definida como la constante p (pi). Su valor aproximado es 3.1415926.
- T: está definida como la constante T. Se emplea como valor distinto de nil.
- Nil: símbolo que en Lisp significa “nada” o “vacío”.
Es posible cambiar el valor de estas variables con la función setq. Sin embargo, otras aplicaciones
podrían considerar que sus valores son fiables; por tanto, se recomienda no modificar estas variables.
A estas tres variables, junto con los nombres de funciones del lenguaje y los nombres de funciones
definidas por el usuario, las denominaremos palabras reservadas del lenguaje
Los valores asignados a las variables pueden usarse como respuesta a las solicitudes de comando de
AutoCAD. Esto proporciona una forma de almacenar y reutilizar nombres o números complejos. Si se desea
utilizar el valor de una variable como respuesta a una solicitud de AutoCAD, basta escribir el nombre de la
variable precedido por un signo de admiración (!).
2.5. Conjuntos de selección
Los conjuntos de selección son grupos compuestos por uno o varios objetos (entidades).
Las rutinas de AutoLISP permiten añadir o suprimir de forma interactiva objetos de los conjuntos de
selección.
4
2.6. Nombres de entidad
Un nombre de entidad es un identificador numérico 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 selección
de objetos para un posterior empleo de maneras varias.
2.7. Descriptores de archivo
Los descriptores de archivo son identificadores alfanuméricos asignados a archivos abiertos por
AutoLISP.
Cuando sea necesario que una función de AutoLISP lea o escriba en un archivo, debe hacerse
referencia a su identificador.
2.8. Subrutinas
Es un símbolo con el nombre de una función predefinida por Autolisp. Pueden ser:
- Internas, cuando pertenecen al conjunto base de Autolisp, incluidas las definidas por el usuario.
- Externas, las que se han definido mediante otras aplicaciones ligadas a Autocad.
5
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, básicamente, el siguiente formato:
(función argumentos)
Cada expresión comienza con un paréntesis abierto y se compone de un nombre de función seguido de
una lista ordenada de argumentos para dicha función, cada uno de los cuales puede constituir una
expresión por sí mismo. La expresión termina con un paréntesis cerrado.
Cada expresión devuelve un valor que puede ser empleado por una expresión circundante (Anidacion
de expresiones); en caso de que no haya ninguna, AutoLISP devuelve el valor a la línea de comando de
AutoCAD.
Por ejemplo, el siguiente código incluye tres funciones.
(fun1 (fun2 argumentos)(fun3 argumentos))
La primera función, fun1, tiene dos argumentos, mientras que las otras dos, fun2 y fun3, tienen un
argumento cada una. Las funciones fun2 y fun3 están delimitadas por la función fun1, por lo que sus valores
pasan a fun1 como argumentos. La función fun1 evalúa estos dos argumentos y devuelve el valor a la línea
de comando.
Si se escribe una expresión de AutoLISP en la solicitud de comando de AutoCAD, AutoLISP la evalúa y
muestra el resultado, tras lo cual vuelve a aparecer la solicitud de comando.
El siguiente ejemplo ilustra el uso de la función *(multiplicación), que acepta uno o más números reales
como argumentos.
Comando: (* 2 27)
54
Dado que este ejemplo no tiene expresión circundante, devuelve el resultado a la línea de comando.
Las expresiones anidadas en otras expresiones devuelven sus resultados a la expresión circundante.
El siguiente ejemplo utiliza el resultado de la función + (suma) como uno de los argumentos de la
función * (multiplicación).
Comando: (* 2 (+ 5 10) )
30
El formato completo que estudiaremos para cada función Autolisp es el siguiente:
(función argumentos .....[ Argumentos opcionales... ] )
Los puntos suspensivos significan que el último argumento puede repetirse un número cualquiera de
veces.
Cuando AutoCAD recibe algún código de AutoLISP, lo transmite al intérprete de AutoLISP, cuyo núcleo
contiene el evaluador. El evaluador lee una línea de código, la evalúa y devuelve el resultado. El código
puede leerse de un archivo o como datos tecleados por el usuario desde la línea de comando, pero en
cualquier caso deberá tener el formato de una expresión de AutoLISP. Al respecto, hay que decir que:
- Una expresión puede ser más larga que una línea.
- Varios espacios en blanco se interpretan como uno sólo.
- Una línea que se inició con ; no es interpretada. Se trata de una línea de comentarios.
- Se puede responder a las solicitudes de comando de AutoCAD con expresiones de AutoLISP.
6
4. RECOMENDACIONES INICIALES PARA LA CODIFICACIÓN DE UNA RUTINA LISP
- Conocer la sintaxis y las reglas del lenguaje.
- Saber de qué funciones dispone el lenguaje.
- Describir exactamente cuál es el objeto de la rutina LISP. Los programadores se refieren a esta
versión de una rutina como pseudocódigo.
- Recorrer el proceso manualmente desde el teclado, si es posible. Este procedimiento de verificación
a priori, ayudará a reconocer rápidamente los problemas en el proceso de desarrollo.
- Tomar notas de cada paso.
- Anotar qué cálculos tuvieron lugar y en qué figuras se basaron.
- Escribir el código lo más ordenado posible, distinguiendo entre:
- Función principal (que será la que se invoca al utilizar el programa). Suele incluir la definición de
un nuevo comando Autocad.
- Funciones intermedias, según la estructura que el programar decida.
- Utilizar nombres de funciones y variables fácilmente identificables, limitando el empleo de estas
últimas a aquellas que sean estrictamente necesarias.
- Escribir líneas de comentarios.
- Utilizar funciones creadas en otros programas. Hacer Bibliotecas de funciones de usuario.
- Sangrar el texto del código para facilitar la interpretación posterior.
7
5. FUNCIONES AUTOLISP
Las funciones proporcionadas por el lenguaje se pueden clasificar de la siguiente manera:
FUNCIONES BÁSICAS
FUNCIONES ARITMÉTICAS, ...................................................................................................................8
FUNCIONES DE ASIGNACIÓN, ............................................................................................................. 12
FUNCIONES PARA MANEJAR CADENAS DE TEXTO, ....................................................................... 13
FUNCIONES PARA GESTIÓN DE LISTAS, ........................................................................................... 15
FUNCIONES MONOLÍNEA, .................................................................................................................... 20
FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN, ..................................................................... 21
FUNCIONES DE RELACIÓN, ................................................................................................................. 24
FUNCIONES DE CONDICIÓN, ............................................................................................................... 27
FUNCIONES PARA GESTIÓN DE CICLOS, .......................................................................................... 28
FUNCIÓN PARA CREAR FUNCIONES DE USUARIO, ......................................................................... 30
FUNCIONES GRÁFICAS, ....................................................................................................................... 31
FUNCIONES DE ENTRADA INTERACTIVA, ......................................................................................... 32
FUNCIONES PARA GESTIÓN DE FICHEROS, ..................................................................................... 39
FUNCIONES DE LECTURA Y ESCRITURA, ......................................................................................... 41
FUNCIONES DE ORDENACIÓN, ........................................................................................................... 44
FUNCIONES DE CONTROL DE PANTALLA, ........................................................................................ 45
OTRAS FUNCIONES DE UTILIDAD, ..................................................................................................... 46
FUNCIONES AVANZADAS
8
5.1. FUNCIONES ARITMÉTICAS
+
Suma números
Sintaxis: (+ <n1> <n2> . . . )
Valor retornado: Suma de todos los argumentos numéricos. Ningún argumento devuelve Nil
(+ 1 2) devuelve 3
(+ 1 2 3 4.5) devuelve 10.5
(+ 1 2 3 4.0) devuelve 10.0
-
Sustrae n números
Sintaxis: (- <n1> <n2> . . . )
Valor retornado: La diferencia entre el primer argumento y la suma de los restantes argumentos.
Ningún argumento devuelve Nil
(- 50 40) devuelve 10
(- 50 40.0) devuelve 10.0
(- 50 40.0 2.5) devuelve 7.5
(- 8) devuelve -8
*
Multiplica números
Sintaxis: (* <n1> <n2> . . . )
Valor retornado: Producto de todos los argumentos numéricos. Ningún argumento devuelve Nil
(* 2 3) devuelve 6
(* 2 3.0) devuelve 6.0
(* 2 3 4.0) devuelve 24.0
(* 3 -4.5) devuelve -13.5
(* 3) devuelve 3
/
Divide números
Sintaxis: (/ <n1> <n2> . . . )
Valor retornado: El cociente del primer argumento dividido por el producto de los demás
argumentos.
(/ 100 2) devuelve 50
(/ 100 2.0) devuelve 50.0
(/ 100 20 2) devuelve 2
(/ 100 20 2.0) devuelve 2.5
(/ 4) devuelve 4
(/ 1 2) devuelve 0
(/ 4 (/ 1 2)) devuelve ERROR
(/ 4 (/ 1.0 2)) devuelve 8.0
∼
Devuelve el operador NOT binario (complemento de -1) del argumento
Sintaxis: ( ∼ <entero>)
Valor retornado = -1 - <entero>.
(~ 3) devuelve -4
(~ 100) devuelve -101
(~ -4) devuelve 3
9
1+
Incrementa un número en uno
Sintaxis: (1+ <n> )
Valor retornado = 1+n (entero o real según n sea entero o real.)
(1+ 5) devuelve 6
(1+ -17.5) devuelve -16.5
1-
Disminuye en uno un número.
Sintaxis: (1- <n> )
Valor retornado = n-1 (entero o real según n sea entero o real.)
(1- 5) devuelve 4
(1- -17.5) devuelve -18.5
ABS
Convierte un número a su valor absoluto
Sintaxis: (ABS <n> )
Valor retornado = el valor absoluto de n.
(abs 100) devuelve 100
(abs -100) devuelve 100
(abs -99.25) devuelve 99.25
ATAN
Calcula el arcotangente
Sintaxis: (ATAN <n1> [n2]), donde los argumentos n1 y n2 se convierten en números reales antes
de calcular el valor del arco tangente.
Valor retornado = Arco tangente de n1/n2. Valor en radianes entre -π/2 y π/2.
(atan 0.5) devuelve 0.463648
(atan 1.0) devuelve 0.785398
(atan -1.0) devuelve -0.785398
(atan 2.0 3.0) devuelve 0.588003
(atan 2.0 -3.0) devuelve 2.55359
(atan 1.0 0.0) devuelve 1.5708
(atan 1 2) devuelve 0.463648
(atan (/ 1 2)) devuelve 0.0
COS
Calcula el coseno de un ángulo expresado en radianes
Sintaxis: (COS <ang> )
Valor retornado = El coseno de ang
(cos 0.0) devuelve 1.0
(cos pi) devuelve -1.0
(cos (/ pi 3)) 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) devuelve 0.841471
(sin 0.0) devuelve 0.0
(sin (/ pi 6)) devuelve 0.5
10
EXP
Calcula el antilogaritmo neperiano de un numero
Sintaxis:(EXP <n> )
Valor retornado: número real igual a en
(exp 1.0) devuelve 2.71828
(exp 2.2) devuelve 9.02501
(exp -0.4) devuelve 0.67032
EXPT
Calcula el resultado de elevar un número a una potencia
Sintaxis:(EXPT <base> <potencia>)
Valor retornado: número real o entero
(expt 2 4) devuelve 16
(expt 3.0 2.0) devuelve 9.0
GCD
Calcula el máximo común denominador de dos enteros
Sintaxis: (GCD <n1> <n2>)
Valor retornado = El valor del máximo común denominador.
(gcd 81 57) devuelve 3
(gcd 12 20) devuelve 4
LOG
Calcula el logaritmo neperiano de un número real
Sintaxis: (LOG <n> )
Valor retornado = Un número real.
(log 4.5) devuelve 1.50408
(log 1.22) devuelve 0.198851
(log 2.718281) devuelve 1.0
MAX
Extrae el mayor valor de una serie de números
Sintaxis: (MAX <n1> <n2> <n3>……..)
Valor retornado = El mayor valor encontrado.
(max 4.07 -144) devuelve 4.07
(max -88 19 5 2) devuelve 19
(max 2.1 4 8) devuelve 8.0
MIN
Extrae el menor valor de una serie de números
Sintaxis: (MIN <n1> <n2> <n3>……..)
Valor retornado = El menor valor encontrado.
(min 683 -10.0) devuelve -10.0
(min 73 2 48 5) devuelve 2
(min 2 4 6.7) devuelve 2.0
MINUSP
Comprueba si un número es menor que 0
Sintaxis: (MINUSP <n> )
Valor retornado = T si el argumento n es un número y es negativo y nil en caso contrario.
(minusp -1) devuelve T
(minusp -4.293) devuelve T
(minusp 830.2) devuelve nil
11
REM
Calcula el resto de la división entre dos números
Sintaxis: (REM <n1> <n2>)
Valor retornado: El resto de dividir n1 entre n2.
(rem 42 12) devuelve 6
(rem 12.0 16) devuelve 12.0
(rem 26 7) devuelve 5
(rem 5 2) devuelve 1
(rem 26 7 2) devuelve 1
SQRT
Calcula la raíz cuadrada de un número
Sintaxis: (SQRT <n> )
Valor retornado = Un número real, raíz cuadrada de n
(sqrt 4) devuelve 2.0
(sqrt 2.0) devuelve 1.41421
ZEROP
Comprueba si un número es 0
Sintaxis: (ZEROP <elemento>)
Valor retornado: T si el elemento es 0 y nil en caso contrario.
(zerop 0) devuelve T
(zerop 0.0) devuelve T
(zerop 0.0001) devuelve nil.
NUMBERP
Comprueba si la evaluación de una función es un número
Sintaxis: (NUMBERP <expresión>)
Valor retornado: T si la expresión evaluada es un numero y nil en caso contrario.
(setq a 123 b 'a)
(numberp 4) devuelve T
(numberp 3.8348) devuelve T
(numberp "Hola") devuelve nil
(numberp a) devuelve T
(numberp b) devuelve nil
(numberp (eval b)) devuelve T
12
5.2. FUNCIONES DE ASIGNACIÓN
SETQ
Liga el nombre de símbolos al valor de una expresión
Sintaxis: (SETQ < Símbolo> <exp> < Símbolo> <exp>. . . . . . . .)
Valor retornado: El devuelto por el último argumento de la función.
(setq a 5.0) devuelve 5.0 y define el símbolo (variable) a como 5.0.
(setq b 123 c 4.7) devuelve 4.7 y define los símbolos (variables): b como
123 y c como 4.7
(setq s "el") devuelve "el"
(setq x '(a b)) 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 sólo 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) Devuelve 0 y desactiva las marcas auxiliares.
(setvar "pdmode" 34) Devuelve 34 y establece un tipo de punto
(setvar "pellipse" 3) Error: AutoCAD rechazó la función
TYPE
Extrae el tipo de dato de un argumento.
Sintaxis: (TYPE <elemento>)
Valor retornado: El tipo de dato como una cadena en mayúsculas
REAL: numero entero
FILE: descriptor de fichero
STR: cadenas
INT: numero entero.
SYM: símbolos
LIST: listas y funciones de usuario
SUBR: funciones internas
PICKSET Conjuntos de selección
ENAME Nombres de entidades
..........
Los elementos que dan como resultado nil (como un símbolo no asignado) devuelven nil.
(setq a 123 r 3.45 s "Hola!" x '(a b c))
(setq f (open "nombre" "r"))
entonces:
(type 'a) devuelve SYM
(type a) devuelve INT
(type f) devuelve FILE
(type r) devuelve REAL
(type s) devuelve STR
(type x) devuelve LIST
(type +) devuelve SUBR
(type nil) devuelve nil
13
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 minúsculas o mayúsculas
Sintaxis: (STRCASE <"cadena"> [modo])
- conversión a minúsculas: modo /= nil
- conversión a mayúsculas : modo = nil o no se presenta.
Valor retornado: La cadena convertida.
(strcase "Ejemplo") devuelve "EJEMPLO"
(strcase "Ejemplo" T) devuelve "ejemplo"
STRCAT
Empalma (concatena ) dos o más cadenas
Sintaxis: (STRCAT <"cadena1"> ["cadena2"]...........)
Valor retornado: Una sola cadena empalmada.
(strcat "a" "cerca") devuelve "acerca"
(strcat "a" "b" "c") devuelve "abc"
(strcat "a" "" "c") devuelve "ac"
STRLEN
Cuenta los caracteres de una cadena
Sintaxis: (STRLEN <"cadena">........)
Valor retornado: Un número entero.
Si se especifican varios argumentos cadena, la función devuelve la suma de las longitudes de todos
los argumentos. Si éstos se omiten o se escribe una cadena vacía, el resultado es 0 (cero).
(strlen "abcd") devuelve 4
(strlen "ab") devuelve 2
(strlen "uno" "dos" "tres") devuelve 10
(strlen) devuelve 0
(strlen "") devuelve 0
SUBSTR
Extrae una porción de una cadena de caracteres.
Sintaxis: (SUBSTR <"cadena"> <inicio>[ long ])
inicio: número entero que indica la posición del primer carácter a extraer.
long: longitud de la subcadena a extraer ( si no se da proporciona la subcadena desde la
posición inicial hasta el final)
Valor retornado: La subcadena extraída.
(substr "abcde" 2) devuelve "bcde"
(substr "abcde" 2 1) devuelve "b"
(substr "abcde" 3 2) devuelve "cd"
(substr "abcde" 3 7) devuelve "cde"
(substr "hola" 5) devuelve "" (cadena vacía)
14
VL-PRINC-TO-STRING
Devuelve la representación en cadena de caracteres de cualquier objeto Lisp como si fuera
presentada mediante la función princ.
Sintaxis: (VL-PRINC-TO-STRING <dato>)
Valor retornado: Una cadena de caracteres que contiene la representación del dato tal y como la
mostraría la función princ.
(vl-princ-to-string 120) devuelve ”120”
(vl-princ-to-string 120.8) devuelve ”120.8”
(vl-princ-to-string “abc”) devuelve ”abc”
(vl-princ-to-string ‘(10 20)) devuelve ”(10 20)”
VL-LIST->STRING
Concatena los caracteres representados en una lista por sus códigos numéricos ASCII.
Sintaxis: (VL-LIST->STRING ‘(entero … ) )
Valor retornado: Una cadena formada por los caracteres cuyos códigos ASCII se incluyen en la lista
pasada como argumento.
((vl-list->string ‘(97 98 99 100) ) devuelve ”abcd”
VL- STRING->LIST
Convierte una cadena de caracteres en una lista de los códigos numéricos ASCII correspondientes.
Sintaxis: (VL-STRING->LIST <cadena>)
Valor retornado: Una lista con los códigos ASCII correspondientes a los caracteres que integran la
cadena.
((vl-string->list ”abcd” ) devuelve (97 98 99 100)
15
5.4. FUNCIONES PARA GESTIÓN DE LISTAS
5.4.1. CREACIÓN DE LISTAS
LIST
Crea una lista a partir de un número de expresiones
Sintaxis: ( LIST <expresión>...........)
Valor retornado: Una lista de los argumentos de la función.
(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 explícita con la función QUOTE
si la lista no contiene variables ni opciones sin definir. El carácter de comilla ( ' ) se define como la
función QUOTE.
APPEND
Funde varias listas en una
Sintaxis: (APPEND <lista>...........)
Valor retornado: Una lista única.
(setq L5 (append '(a b) '(c d))) devuelve (A B C D)
(setq L6 (append '((a)(b)) '((c)(d)))) devuelve ((A)(B)(C)(D))
(setq L7 (append L3 L4_1)) devuelve (3.9 6.7 10 20 30)
(setq L8 (append L4_2 L4_1) devuelve ((10) (20) (30) 10 20 30)
(setq L9 (append La Lb Lc) devuelve (10 20 30)
CONS
Añade al principio de una lista como primer elemento una expresión
Sintaxis: (CONS <expresión> <lista>)
Valor retornado: La nueva lista.
(cons 'a '(b c d)) devuelve (A B C D)
(cons '(a) '(b c d)) devuelve ((A) B C D)
La función CONS también acepta un átomo en lugar del argumento lista, en cuyo caso construye
una estructura denominada pares punteados. En los pares punteados, AutoLISP incluye un punto
entre el primer y el segundo elemento. Un par punteado es un tipo especial de lista, por lo que
algunas funciones que utilizan listas normales no los aceptan como argumento.
(cons 'a 2) devuelve (A . 2)
LENGTH
Cuenta los elementos de una lista
Sintaxis: (LENGTH <lista>)
Valor retornado: El número entero correspondiente.
(length '(a b c d)) devuelve 4
(length '(a b (c d))) devuelve 3
(length '()) devuelve 0
16
5.4.2. EXTRACCIÓN 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á vacía, CAR devuelve nil.
(car '(a b c)) devuelve A
(car '((a b) c)) devuelve (A B)
(car '()) devuelve nil
(car (cons 'a 2) devuelve a
CDR
Extrae una nueva lista donde están todos los elemento de la lista menos el primero.
Sintaxis: (CDR <lista>)
Valor retornado: la nueva lista. Si lista está vacía, CDR devuelve nil.
(cdr '(a b c)) devuelve (B C)
(cdr '((a b) c)) devuelve (C)
(cdr '()) devuelve nil
Para obtener el segundo átomo de un par punteado, se puede utilizar la función CDR.
(cdr '(a . b)) devuelve B
(cdr '(1 . "Texto")) devuelve "Texto"
FUNCIONES ANIDADES DE CAR Y CDR
AutoLISP permite concatenar las funciones CAR y CDR hasta en cuatro niveles. Las siguientes son
funciones válidas.
CAAAAR CADAAR CDAAAR CDDAAR
CAAADR CADADR CDAADR CDDADR
CAAAR CADAR CDAAR CDDAR
CAADAR CADDAR CDADAR CDDDAR
CAADDR CADDDR CDADDR CDDDDR
CAADR CADDR CDADR CDDDR
CAAR CADR CDAR CDDR
Cada a representa una llamada a CAR y cada d representa una llamada a CDR. Por ejemplo:
(caar x) es equivalente a (car (car x))
(caar L4_2) devuelve 10
(cdar x) es equivalente a (cdr (car x))
(cadar x) es equivalente a (car (cdr (car x)))
(cadr x) es equivalente a (car (cdr x))
(cadr L4_2) devuelve (20)
(cddr x) es equivalente a (cdr (cdr x))
(caddr x) es equivalente a (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 números 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)) un punto 2D
(setq pt3 '(5.25 1.0 3.0)) un punto 3D
(car pt2) devuelve 5.25
(cadr pt2) devuelve 1.0
(caddr pt2) devuelve nil
(car pt3) devuelve 5.25
(cadr pt3) devuelve 1.0
17
(caddr pt3) devuelve 3.0
(car (cons 'a 2)) devuelve A
(cdr (cons 'a 2)) 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)) devuelve E
(last '(a b c (d e))) devuelve (D E)
(last pt3 ) devuelve 3.0
(last L4_2) devuelve (30)
NTH
Extrae un elemento de una lista a partir de especificar su posición en ella (pos)
Sintaxis: (NTH <pos> <lista>)
Las posiciones dentro de la lista son numeradas de izquierda a derecha empezando por la posición
0.
Valor retornado: El elemento encontrado, o un nulo si no se encontró.
(nth 3 '(a b c d e)) devuelve D
(nth 0 '(a b c d e)) devuelve A
(nth 5 '(a b c d e)) devuelve nil
(nth 0 L4_2) devuelve (10)
(nth 0 (car L4_2)) devuelve 10
ASSOC
Localiza sublistas en una lista de asociaciones utilizando elemento como palabra clave, y donde
éste puede ser cualquier expresión válida susceptible de aparecer como primer elemento de una de
las sublistas.
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 función SUBST proporciona un medio apropiado para sustituir el valor
asociado con una clave en una lista de asociaciones.
18
5.4.3. MANIPULACIÓN DE LISTAS
MEMBER
Busca la primera aparición de una expresión en una lista y devuelve el resto de la lista a partir de la
expresión encontrada.
Sintaxis: (MEMBER <expresión><lista>)
Valor retornado: una lista donde el primer elemento es la expresión encontrada y el resto, el resto de
la lista hasta el final. Si no se encuentra la expresión devuelve nil .
(member 'c '(a b c d e)) devuelve (C D E)
(member 20 L4_1) devuelve (20 30)
(member '(30) L4_2) devuelve ((30))
(member 'q '(a b c d e)) 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 <expresión>)
Valor retornado: T si la expresión es una lista , nil en caso contrario.
(listp L8) devuelve T
(listp "hola") devuelve nil
SUBST
Busca en una lista un miembro especificado y sustituye cada aparición de éste por otro especificado
Sintaxis: (SUBST <elemento nuevo> <elemento viejo> <lista>)
Valor retornado: La lista modificada.
(setq ejemplo '(a b (c d) b))
(subst 'qq 'b ejemplo) devuelve (A QQ (C D) QQ)
(subst 'qq 'z ejemplo) devuelve (A B (C D) B)
(subst 'qq '(c d) ejemplo) devuelve (A B QQ B)
(subst '(qq rr) '(c d) ejemplo) devuelve (A B (QQ RR) B)
(subst '(qq rr) 'z ejemplo) devuelve (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)) define sublvieja como (b 20)
sublnueva '(b 50)) define sublnueva como (b 50)
)
(setq lista (subst sublnueva sublvieja lista))
devuelve ((a 10) (b 50)(c 30))
19
FOREACH
Procesa uno a uno los elementos de una lista y evalúa cada expresión para cada uno de los
elemento de la lista
Sintaxis: (FOREACH <nombre-var> <lista> <expresión>.........)
Nombre-var: variable de memoria a la que FOREACH ligará secuencialmente los valores de la
lista suministrada y que normalmente será usada en la expresión.
Valor retornado: El resultado de la última expresión evaluada.
Avanza por la lista, asignando un nombre-var a cada elemento y evalúa cada expresión para todos
los elementos de la lista. Se pueden especificar tantas expresiones como se desee. La función
FOREACH devuelve el resultado de la última expresión evaluada.
(setq pt1 (getpoint "n¿pt1?:")
pt2 (getpoint "n¿pt2?:")
pt3 (getpoint "n¿pt3?:")
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) devuelve nil
(atom b) devuelve T
20
5.5. FUNCIONES MONOLÍNEA
APPLY
Devuelve el resultado de ejecutar la "función" tomando como argumentos los elementos de la
"lista".
Sintaxis: ( APPLY <función> <Lista> )
Valor retornado: El devuelto por el argumento de la función
(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 "función" tomando como argumentos de función los elementos
sucesivos de "lista 1" ............."lista n"
Sintaxis: ( MAPCAR <función> <lista 1> .................<lista n> )
Valor retornado: una lista con las sucesivas soluciones.
(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 )
(mapcar 'expt '( 1 2 3 ) '( 4 5 6 ) ) devuelve ( 14
25
36
)
(setq A 10 B 20 C 30)
(mapcar '1+ (LIST A B C) devuelve la lista (11 21 31)
Ejemplo anterior:
(setq L '( 1 2 3 4 5 6))
(mapcar '1+ L) devuelve la lista (2 3 4 5 6 7)
LAMBDA
Define una función sin darle un nombre. El conjunto de expresiones se aplica sobre los argumentos
Sintaxis: ( LAMBDA < argumentos > < expresión >...............)
Valor retornado: el resultado de la última evaluación.
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 )
21
5.6. FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN
FIX
Convierte un número real en entero.
Sintaxis: (FIX <numero real>)
Valor retornado: El número entero que resulta de quitar los decimales al real.
(fix 3) devuelve 3
(fix 3.7) devuelve 3
FLOAT
Convierte un número entero en real.
Sintaxis: (FLOAT <numero entero>)
Valor retornado: un numero real.
(float 3) devuelve 3.0
(float 3.75) devuelve 3.75
ATOI
Convierte una cadena de caracteres en un número entero
Sintaxis: (ATOI <cadena>)
Valor retornado: un número entero.
(atoi "97") devuelve 97
(atoi "3") devuelve 3
(atoi "3.9") devuelve 3
Ejemplo de código que introduce puntos en una lista solicitando el punto por su posición 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 número real
Sintaxis: (ATOF <"cadena">)
Valor retornado: un número real.
(atof "97.1") devuelve 97.1
(atof "3") devuelve 3.0
(atof "3.9") 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"
22
RTOS
Convierte un número real en una cadena de caracteres
Sintaxis: (RTOS <número> [modo [precisión]])
numero: número real (o entero que tomará como real)
modo (opcional): entero del 1 al 5 que determina el formato numérico de la cadena:
1. Unidades científicas
2. Unidades decimales
3. Pies y pulgadas I (fracción decimal)
4. Pies y pulgadas II (fracción propia)
5. Unidades fraccionarias
precisión (opcional): entero que determina el número de decimales de precisión en la cadena
Si no se especifican los argumentos modo y precisión 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 2 4) => “5.6000"
(RTOS 5.6 5 4) => “5 5/8"
DISTOF
Convierte un cadena en un número real, con un determinado formato de visualización.
Sintaxis: (DISTOF <"cadena"> [ modo])
Cadena: cadena de caracteres que expresa un valor numérico.
modo (opcional): entero del 1 al 5 que indica el formato numérico del número real expresado en
la cadena (El código se corresponde con el dado en la función anterior), la función deberá ser
capaz de interpretar el argumento cadena de acuerdo con el modo especificado:
Valor retornado: Un número real
ANGTOS
Convierte un número (que representa un ángulo en radianes) en una cadena de caracteres
Sintaxis: (ANGTOS <ángulo> [modo [precisión]])
angulo: valor del ángulo en radianes.
modo (opcional): entero del 0 al 4 que determina el formato numérico en la cadena:
0. Grados sexagesimales.
1. Grados, minutos y segundos
2. Grados centesimales.
3. Radianes
4. Unidades geodésicas.
precisión (opcional): entero que determina el número de decimales de precisión en la cadena.
Si no se especifican los argumentos modo y precisión 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 número real que representa un ángulo
Sintaxis: (ANGTOF <"cadena"> [ modo])
Cadena: cadena de caracteres que expresa un valor numérico de ángulo
modo (opcional): entero del 0 al 4 que indica el formato numérico del ángulo expresado en la
cadena (El código se corresponde con el dado en la función anterior), la función 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 numérico de un ángulo en radianes.
Ejemplos: (ANGTOF “180" 0) => 3.1416 (ANGTOF “200" 2) => 3.1416
23
ASCII
Convierte el primer carácter de una cadena de caracteres a su código ASCII
Sintaxis: (ASCII <"cadena">)
Valor retornado: Un entero que representa el código ASCII
(ascii "A") devuelve 65
(ascii "a") devuelve 97
(ascii "GRANDE") devuelve 66
CHR
Convierte un número entero que representa un carácter ASCII en la cadena de un sólo carácter
correspondiente
Sintaxis: (CHR <entero>)
Valor retornado: una cadena de un sólo carácter.
(chr 65) devuelve "A"
(chr 66) devuelve "B"
(chr 97) 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”) hola
(read “( 20 30 40)”) (20 30 40)
(read ""Hola a todos"") devuelve la cadena "Hola a todos"
(read "(a b c) (d)") devuelve la lista (A B C)
(read "1.2300") devuelve el número real 1.23
(read "87 3.2") 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: código que expresa el sistema de coordenadas en el cual se expresa el punto.
conue: código que expresa el sistema de coordenadas en el cual se quiere expresar el punto
0. SCU
1. SCP
2. SCV (visualización)
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 número o lista de números de una unidad de medida a otra (Las cadenas que
representan unidades de medida válidas en esta función están almacenadas en el fichero
ACAD.UNT)
Sintaxis: (CVUNIT <nº o lista> <cadvie> <cadnue>)
cadvie: cadena de unidad de medida vieja.
cadvie: cadena de unidad de medida nueva.
Valor retornado: Un número o lista de números convertida a la unidad de medida nueva.
(cvunit 1 "minuto" "segundo") devuelve 60.0
(cvunit 1.0 "pulgada" "cm") devuelve 2.54
(cvunit 1.0 "acre" "yarda cuadrada ") devuelve 4840.0
(cvunit '(1.0 2.5) "pie" "pulgada") devuelve (12.0 30.0)
(cvunit '(1 2 3) "pie" "pulgada") devuelve (12.0 24.0 36.0)
24
5.7. FUNCIONES DE RELACIÓN
=
Comprueba la igualdad numérica
Sintaxis: (= <átomo> <átomo> <átomo>……….)
Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como
iguales numéricamente, Nil en caso contrario.
Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico ASCII
(= 4 4.0) devuelve T
(= 20 388) devuelve nil
(= 2.4 2.4 2.4) devuelve T
(= 499 499 500) devuelve nil
(= "yo" "yo") devuelve T
(= "yo" "tú") devuelve nil
/=
Comprueba la desigualdad numérica
Sintaxis: (/= <átomo> <átomo>)
Valor retornado: T si los dos argumentos (números o cadenas de caracteres) no se evalúan como
iguales numéricamente, Nil en caso contrario
(/= 10 20) devuelve T
(/= "tú" "tú") devuelve nil
(/= 5.43 5.44) devuelve T
(/= 10 20) devuelve T
<
Comprueba la relación “menor que” entre los argumentos
Sintaxis: (< <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente menor que el argumento de su derecha y
Nil en caso contrario.
(< 10 20) devuelve T
(< "b" "c") devuelve T
(< 357 33.2) devuelve nil
(< 2 3 88) devuelve T
(< 2 3 4 4) devuelve nil
>
Comprueba la relación “mayor que” entre los argumentos
Sintaxis: (> <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente mayor que el argumento de su derecha y
Nil en caso contrario
(> 120 17) devuelve T
(> "c" "b") devuelve T
(> 3.5 1792) devuelve nil
(> 77 4 2) devuelve T
(> 77 4 4) devuelve nil
(> “Pablo” “pablo”) devuelve nil
25
<=
Comprueba la relación “menor o igual que” entre los argumentos
Sintaxis: (<= <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente menor o igual que el argumento de su
derecha y Nil en caso contrario.
(<= 10 20) devuelve T
(<= "b" "b") devuelve T
(<= 357 33.2) devuelve nil
(<= 2 9 9) devuelve T
(<= 2 9 4 5) devuelve nil
>=
Comprueba la relación “mayor o igual que” entre los argumentos
Sintaxis: (>= <átomo> <átomo> <átomo>……….)
Valor retornado: T si cada argumento es numéricamente mayor o igual que el argumento de su
derecha y Nil en caso contrario.
(>= 120 17) devuelve T
(>= "c" "c") devuelve T
(>= 3.5 1792) devuelve nil
(>= 77 4 4) devuelve T
(>= 77 4 9) devuelve nil
AND
Comprueba los valores de una serie de expresiones. (Y lógico)
Sintaxis: (AND <exp> <exp> <exp>……….)
Valor retornado: T si todos los argumentos se evalúan con un valor no nulo y Nil en caso
contrario.
(and 1.4 2 "hola") devuelve T
(and 1.4 ( = 3 4)) devuelve nil
OR
Comprueba de izquierda a derecha una serie de expresiones hasta hallar la primera que se evalúa
con un valor no nulo. (O lógico)
Sintaxis: (OR <exp> <exp> <exp>……….)
Valor retornado: T si alguno de los argumentos se evalúa con un valor no nulo y Nil en caso
contrario.
(or 1.4 2 "hola") devuelve T
(or 1.4 ( = 3 4)) devuelve T
(or nil 45 ) devuelve T
(or nil (= 3 4)) devuelve 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) devuelve T
(not (= 3 4)) devuelve T
(not (= 4 4)) devuelve nil
26
EQ
Comprueba si los valores atribuidos a ambas expresiones son idénticas
Sintaxis: (EQ <exp> <exp> )
Valor retornado: T si las dos expresiones están ligadas a los mismos datos y Nil en otro caso.
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
entonces:
(eq f1 f3) devuelve nil, f1 y f3 no son la misma lista
(eq f3 f2) devuelve T, f3 y f2 son exactamente la misma lista
EQUAL
Comprueba si dos expresiones se evalúan con valores iguales
Sintaxis: (EQUAL <exp> <exp> [margen de error] )
Valor retornado: T si las dos expresiones se evalúan igual y Nil en caso contrario.
Si las dos expresiones son números reales se puede incluir un margen de error.
(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) devuelve T
(equal f3 f2) devuelve T
(equal a b) devuelve nil
(equal a b 0.000001) devuelve T
=
Comprueba la igualdad numérica
Sintaxis: (= <átomo> <átomo> <átomo>……….)
Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como
iguales numéricamente Nil en caso contrario.
Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico
ASCII.
(= 4 4.0) devuelve T
(= 20 388) devuelve nil
(= 2.4 2.4 2.4) devuelve T
(= 499 499 500) devuelve nil
(= "yo" "yo") devuelve T
(= "yo" "tú") devuelve nil
Uso de las funciones anteriores en línea de comandos:
Comando: (setq a 2 b 2)
2
Comando: (= a b)
T
Comando: (eq a b)
T
Comando: (equal a b)
T
27
5.8. FUNCIONES DE CONDICIÓN
COND
Lee una serie de listas. Evalúa el primer elemento de cada lista (en el orden indicado) hasta que uno
de ellos devuelva un valor distinto de nil. A continuación, evalúa las expresiones que siguen a este
elemento y pasa por alto las restantes listas.
Sintaxis: (COND <lista1> <lista2>………..)
Valor retornado: El retornado por la última expresión de la lista evaluada. Si no se evalúa ninguna
lista, la función 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) la variable b se evalúa como un par punteado
a = 25 => b = (a 25) la variable b se evalúa como una lista
a = 20 => b = "b=20" la variable b se evalúa como un string
Como se muestra, COND se puede utilizar como una función de tipo case. Es habitual utilizar T
como última (por defecto) expresión de prueba.
Dada una cadena de respuesta de usuario en la variable s, esta función prueba la respuesta y
devuelve 1 si es Y o y, 0 si es N o n y nil en cualquier otro caso.
(cond
((= s "Y") 1) ((= s "y") 1)
((= s "N") 0) ((= s "n") 0)
(t nil)
)
IF
Evalúa una expresión Autolisp basándose en si una expresión de comprobación inicial se evalúa
como no nula
Sintaxis: (IF <test> <expresión si test es /= nil > [expresión si test es = nil ] )
Valor retornado: El valor retornado por expresión evaluada; nil en otro caso.
(if (= 1 3) "¡¡SÍ!!" "no.") devuelve "no."
(if (= 2 (+ 1 1)) "¡¡SÍ!!") devuelve "¡¡SÍ!!"
(if (= 2 (+ 3 4)) "¡¡SÍ!!") devuelve nil
PROGN
Evalúa secuencialmente una serie de expresiones.
Sintaxis: (PROGN <exp1> <exp2> ……………)
Valor retornado: La última expresión evaluada.
Se puede utilizar PROGN para calcular varias expresiones cuando sólo se espera una expresión.
(if (= a b)
(progn
(princ "nA = B ")
(setq a (+ a 10) b (- b 10))
)
)
28
5.9. FUNCIONES PARA GESTIÓN DE CICLOS
REPEAT
Evalúa repetidamente una serie de una o más expresiones Autolisp un número determinado de
veces.
Sintaxis: (REPEAT<n> <exp1> <exp2> ……………)
n: Entero que indica el nº de repeticiones a realizar.
Valor retornado: El resultado de la última expresión evaluada
(setq a 10 b 100)
(repeat 4
(setq a (+ a 10))
(setq b (+ b 100))
) Define a como 50, b como 500 y devuelve 500
(setq L '( 1 2 3 4 5 6)
n (length L) i 0 Ln nil
)
(repeat n
(setq elem (nth i L)
elem (1+ elem)
Ln (cons elem ln)
i (1+ i)
)
)
(setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7)
(setq L '( 1 2 3 4 5 6)
n (length L) Ln nil
)
(repeat n
(setq elem (car L)
L (cdr L)
elem (1+ elem)
Ln (cons elem ln)
)
)
(setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7)
(setq pt1 (getpoint "n¿pt1?:")
pt2 (getpoint "n¿pt2?:")
pt3 (getpoint "n¿pt3?:")
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 polilínea que pasa por los puntos
pt1 pt2 y pt3
29
WHILE
Evalúa repetidamente una serie de una o más expresiones Autolisp basándose en si una expresión
de comprobación inicial se evalúa como un valor nulo o no nulo.
Sintaxis: (WHILE <test> <exp1> <exp2> ……………)
Test: Expresión de comprobación, que hace que las demás expresiones se evalúen mientras
ésta se mantenga distinta de Nil .
Valor retornado: El resultado de la última expresión evaluada
(setq a 10 )
(While (< a 100)
(setq a (+ a 10))
) Define a como 90.
(setq L '( 1 2 3 4 5 6) i 0 Ln nil )
(While (setq elem (nth i L))
(setq elem (1+ elem)
Ln (cons elem ln)
i (1+ i)
)
)
(setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7)
(setq L '( 1 2 3 4 5 6) 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)
(setq pt1 (getpoint "n¿pt1?:")pt2 (getpoint "n¿pt2?:")pt3 (getpoint "n¿pt3?:")
listap (list pt1 pt2 pt3)
)
(Command "_pline")
(While (setq pt (car listap ))
(setq listap (cdr listap)))
(command pt)
)
(command "") Equivale a dibujar una polilínea 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 "n¿pt1?:") pt2 (getpoint "n¿pt2?:") pt3 (getpoint "n¿pt3?:")
listap (list pt1 pt2 pt3)
)
(command "_pline")
(foreach punto listap (command punto))
(command "") Equivale a dibujar una polilínea que pasa por los puntos
pt1 pt2 y pt3.
30
5.10. FUNCIÓN PARA CREAR FUNCIONES DE USUARIO
DEFUN
Define una nueva función Autolisp o una orden o comando Autocad
Sintaxis (DEFUN <nombre> <( [lista-argumentos][ / símbolos locales])> [expr] ...)
Nombre: el nombre de la función 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 más símbolos locales para la función.
Argumentos: variables que toman valor en la llamada a la función
Símbolos locales: variables que sólo tienen valor en la función que se define.
La barra oblicua debe ir separada del primer símbolo local y del último argumento, si existe, por
un espacio como mínimo. Si no se declara ningún argumento ni símbolo local, se debe escribir
un conjunto vacío de paréntesis tras el nombre de la función.
Los siguientes ejemplos de lista-argumentos muestran valores válidos y no válidos:
(defun mifunc (x y) ...) La función toma dos argumentos
(defun mifunc (/ a b) ...) La función tiene dos símbolos locales
(defun mifunc (x / temp) ...) Un argumento, un símbolo local
(defun mifunc () ...) Ningún argumento ni símbolo local
Expr: Expresiones que se ejecutan en la función y que utilizan como variables:
- Los argumentos de la función.
- Las variables locales que tienen que tomar valor en la función y lo pierden al ejecutarse la
misma.
- Las variables globales definidas, bien en esta función, bien en otras y que por no haber
sido definidas como locales en ninguna función tienen valor en todo el programa.
Valor retornado: La función DEFUN devuelve el nombre de la función que se va a definir. Al invocar
esta función, sus argumentos se evalúan y se asocian a los símbolos correspondientes. La función
devuelve el resultado de la última expresión evaluada.
(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") devuelve "a...b"
(puntos "de" "a") devuelve "de...a"
(eval temp) devuelve nil
Advertencia: No se debe utilizar nunca el nombre de una función interna o un símbolo como nombre
de función creada por el usuario, ya que quedaría inaccesible.
31
5.11. FUNCIONES GRÁFICAS
ANGLE
Calcula el ángulo que formaría una recta definida por dos puntos con la dirección positiva del eje X
del SCP actual (si los puntos son 3D se proyectan sobre el plano de construcción actual)
Sintaxis: ( ANGLE <pt1> <pt2>)
Valor retornado: Un ángulo en radianes
(angle '(1.0 1.0) '(1.0 4.0)) devuelve 1.5708
(angle '(5.0 1.33) '(2.4 1.33) devuelves 3.14159
DISTANCE
Calcula la distancia entre dos puntos
Sintaxis: ( DISTANCE <pt1> <pt2>)
Valor retornado: Un número 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 construcción 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 relación 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 relación al SCP actual. El ángulo siempre se refiere al
plano de construcción actual.
(polar '(1 1 3.5) 0.785398 1.414214) devuelve (2.0 2.0 3.5)
(polar ‘(1 1) (/ pi 2) 3) devuelve (1.0 4.0)
INTERS
Calcula el punto de intersección entre dos líneas
Sintaxis: ( INTERS <pt1> <pt2> <pt3> <pt4> [extend])
Valor retornado: Un punto que indica el punto de intersección de la línea definida por pt1 y pt2 y la
línea definida por pt3 y pt4, si no se encuentra ningún punto de intersección la función retorna un nil.
Extend: Si extend se evalúa como nil las líneas se prolongan hasta encontrar el punto de
intersección, en caso contrario o si no se codifica, sólo se busca la intersección 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 intersección 3D. Si hay algún punto 2D, inters proyecta las líneas sobre el plano de
construcción actual y sólo busca una intersección 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) devuelve nil
(inters a b c d T) devuelve nil
(inters a b c d nil) devuelve (4.0 4.0)
32
5.12. FUNCIONES DE ENTRADA INTERACTIVA
GETPOINT
Detiene la ejecución 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 números reales.
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST.
(setq p (getpoint))
(setq p (getpoint "¿Dónde? "))
(setq p (getpoint '(10 20)) respuesta :@40,20 valor retornado: (50.0 40.0 0.0)
GETDIST
Detiene la ejecución del programa para que el usuario introduzca una distancia
Sintaxis: (GETDIST [pt] [mensaje])
pt: punto de base opcional
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la distancia
Valor retornado: Un número real.
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST.
(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 ejecución 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 función GETANGLE mide los ángulos a partir de cero radianes (definidos mediante la variable de
sistema ANGBASE) aumentando en dirección opuesta a las agujas del reloj. El ángulo resultante se
expresa en radianes con respecto al plano de construcción actual (el plano XY del SCP actual, con
la elevación actual).
El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETANGLE.
Para especificar un ángulo, el usuario debe escribir un número en el formato actual de unidades
angulares de AutoCAD. Aunque este formato puede utilizar grados, grados centesimales o cualquier
otra unidad, esta función siempre devuelve el ángulo en radianes. El usuario también puede
designar dos posiciones 2D en la pantalla gráfica para indicar el ángulo a AutoLISP. AutoCAD dibuja
una línea elástica desde el primer punto hasta la posición del cursor en cruz con el fin de facilitar al
usuario la visualización del ángulo.
33
Es importante comprender la diferencia entre el ángulo indicado y el que devuelve GETANGLE. Los
ángulos que se transmiten a GETANGLE se basan en los valores actuales de ANGDIR y
ANGBASE. Sin embargo, una vez que se especifica el ángulo, éste se mide en dirección opuesta a
las agujas del reloj (sin tomar en cuenta el valor de ANGDIR), con cero radianes como valor actual
de ANGBASE. Los siguientes ejemplos de código muestran cómo se pueden utilizar diferentes
argumentos.
(setq ang (getangle))
(setq ang (getangle '(1.0 3.5)))
(setq ang (getangle "¿Hacia dónde? "))
(setq ang (getangle '(1.0 3.5) "¿Hacia dónde? "))
GETORIENT
Detiene la ejecución 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 función 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
introducción del ángulo por parte del usuario todavía se
basa en los parámetros actuales de ANGDIR y ANGBASE.
.
La función GETORIENT mide los ángulos con una
dirección 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 construcción 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 dirección para los ángulos
que se incrementan, se debe utilizar el comando
UNIDADES o las variables de sistema ANGBASE y
ANGDIR para realizar la conversión necesaria.
Se recomienda el uso de GETANGLE para obtener un valor de rotación (un ángulo relativo). Y de
GETORIENT para obtener una orientación (un ángulo absoluto).
GETCORNER
Detiene la ejecución del programa para que el usuario introduzca un punto, y traza un rectángulo de
“banda elástica” en la pantalla a medida que el usuario mueve el dispositivo señalador
Sintaxis: (GETCORNER <pt> [mensaje])
pt: Primera esquina del rectángulo.
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la otra esquina.
Valor retornado: El punto introducido por el usuario
34
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") Devuelve el valor actual para el tipo de punto
(getvar "area") Devuelve el valor del último área calculada por Autocad
(getvar "perimeter") Devuelve el valor del último perímetro calculado por
Autocad.
GETINT
Detiene la ejecución del programa para que el usuario introduzca un número entero.
Sintaxis: (GETINT [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud del entero
Valor retornado: El entero introducido por el usuario.
El rango de valores pasados a GETINT puede ir de -32,768 a +32,767.
El usuario no puede escribir otra expresión de AutoLISP como respuesta a una petición de GETINT.
(setq num (getint))
(setq num (getint "Escriba un número: "))
GETREAL
Detiene la ejecución del programa para que el usuario introduzca un número real
Sintaxis: (GETREAL [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud del número real
Valor retornado: El real introducido por el usuario.
(setq val (getreal))
(setq val (getreal "Factor de escala: "))
GETSTRING
Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres
Sintaxis: (GETSTRING [espacio] [mensaje])
Espacio: Si este argumento es distinto de nil la cadena introducida puede contener espacios en
blanco. (y debe finalizarse con RETURN ).
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la cadena
Valor retornado: La cadena introducida entrecomillada o una cadena vacía (“”) si el usuario pulsó
Enter sin teclear caracteres.
Si tiene más de 132 caracteres, la cadena sólo devuelve estos caracteres. Si contiene el carácter de
contrabarra (), éste se convierte en dos caracteres de contrabarra (). De esta manera, el valor
resultante puede incluir caminos de nombre de archivo a los que tienen acceso otras funciones.
(setq s (getstring "Escriba su nombre ")) Si se responde Juan se define s como "Juan"
(setq s (getstring T "Escriba su nombre completo: ")) Si responde Juan Díaz Pérez se define
como "Juan Díaz Pérez"
(setq s (getstring "Nombre de archivo: ")) Si responde acadmidibuj se define como
"acadmidibuj"
35
GETKWORD
Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres. Esta
función comprueba la validez de lo introducido basándose en una lista de palabras válidas
establecidas usando la función INIGET
Sintaxis: (GETKWORD [mensaje])
mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla,
en el momento de la solicitud de la cadena.
Valor retornado: La cadena introducida o Nil si el usuario pulsó Enter sin teclear caracteres
AutoCAD lo intenta de nuevo si la entrada no es una palabra clave. Si se trata de una entrada nula (
RETURN ), GETKWORD devuelve nil (siempre que se admitan entradas nulas). Esta función
también devuelve nil si antes no se ha realizado una llamada a INITGET que establezca una o
varias palabras clave.
El ejemplo siguiente muestra una llamada inicial a initget que define una lista de palabras clave (Sí y
No) y no admite entradas nulas (valor en bits igual a 1) en la siguiente llamada a getkword:
(initget 1 "Sí No")
(setq x (getkword "¿Seguro? (Sí o No) "))
Este mensaje solicita datos del usuario y define el símbolo x como Sí o No, según la respuesta
proporcionada. Si ésta no coincide con ninguna de las palabras clave o el usuario escribe un valor
nulo, AutoCAD vuelve a mostrar la cadena indicada en el argumento solicitud. Si no se especifica
este argumento, AutoCAD muestra lo siguiente:
Inténtelo de nuevo:
INITGET
Establece las palabras clave que han de usarse con la siguiente llamada a una función introducida
por el usuario. Las funciones que toman en consideración las palabras clave son getint, getreal,
getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel y nentselp. La función
getstring es la única función introducida por el usuario que no las admite.
Sintaxis: (INITGET [bits] [cadena])
Bits: El argumento bits es un número entero binario que admite o rechaza determinados tipos
de datos de usuario. Algunos de los valores que puede tomar junto a su significado asociado:
1: no permite nulos
2: no permite cero
4: no permite negativos
8: no chequea límites del dibujo
64: devuelve una distancia 2D, en lugar de 3D.
Cadena: El argumento cadena define una lista de palabras clave.
Valor retornado: La función initget siempre devuelve nil.
Para más información sobre la función se recomienda consultar el manual de personalización de
Autocad
36
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 ""> <"extensión" o "" (para. *)>
<parámetros>)
Parámetros:
dialogo determina el nombre del cuadro de diálogo,
nombre de Fichero por defecto especifica el nombre de archivo que se va a utilizar por defecto
extensión es la extensión por defecto del nombre del archivo. Si extensión se transmite como
una cadena nula [""], utiliza por defecto * (para todos los tipos).
parámetros es un valor entero (un campo codificado en bits) que controla el funcionamiento del
cuadro de diálogo. Para definir varias condiciones simultáneamente, se añaden los valores en
conjunto y se crea un indicador con un número 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 diálogo
muestra un mensaje de error en la parte inferior. Si se define este bit y el usuario elige un archivo
existente, AutoCAD presenta una casilla de advertencia y ofrece la posibilidad de seguir o cancelar
la operación.
Valor del indicador = 2 (bit 1):Desactiva el botón Teclearlo. Este bit se define si se llama a la función
GETFILED mientras otro cuadro de diálogo está activo (en caso contrario, obliga a cerrar el otro
cuadro de diálogo).Si no se define este bit, se activa el botón Teclearlo. Cuando el usuario
selecciona el botón, el cuadro de diálogo desaparece y GETFILED devuelve 1.
Valor del indicador = 4 (bit 2):Permite al usuario escribir una extensión de nombre de archivo
arbitraria o bien no escribir ninguna. Si no se define este bit, GETFILED sólo acepta la extensión
especificada en el argumento ext, y si el usuario no la escribe en la casilla de texto File, la añade al
nombre del archivo.
Valor del indicador = 8 (bit 3): Si se define este bit y no se define el bit 0, GETFILED inicia en la
biblioteca una búsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el
orden de búsqueda en la estructura, descompone el camino y sólo devuelve el nombre del archivo.
Esto no ocurre si los archivos que se buscan tienen el mismo nombre pero se encuentran en
distintos directorios.
Si no se define este bit, GETFILED devuelve el nombre completo del archivo, incluido el nombre del
camino. Se define este bit si se utiliza el cuadro de diálogo para abrir un archivo existente cuyo
nombre desea guardar en el dibujo (u otra base de datos).
Si el usuario especifica un nombre de archivo en el cuadro de diálogo, GETFILED devuelve una
cadena que corresponde al nombre del archivo, en caso contrario, devuelve nil.
La siguiente llamada a getfiled presenta el cuadro de diálogo Seleccionar un archivo Lisp:
(getfiled "Seleccionar un archivo Lisp" "/acadr14/support/" "lsp" 8)
La función GETFILED muestra un
cuadro de diálogo con una lista que
incluye todos los archivos con la
extensión especificada que están
disponibles. Puede utilizar este cuadro
de diálogo para buscar por los distintos
directorios y unidades, seleccionar un
archivo existente o especificar el nombre
de uno nuevo.
37
COMMAND
Ejecuta órdenes Autocad
Sintaxis: (COMMAND <"nombre de la orden"> [argumentos válidos].....)
Valor retornado: nil
Los argumentos de la función command pueden ser cadenas, números reales, números enteros o
puntos, según solicite la secuencia de mensajes del comando ejecutado. Una cadena nula ("")
equivale a pulsar RETURN en el teclado.
La función command sin argumentos equivale a pulsar ESC y cancela la mayoría de los comandos
de AutoCAD.
La función command devuelve nil.
La función command evalúa los distintos argumentos y los envía a AutoCAD cada vez que aparece
un mensaje que los solicita. Presenta como cadenas los nombres de los comandos y las opciones,
como listas de dos números reales los puntos 2D y como listas de tres números reales los puntos
3D.
(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
Diámetro/<Radio> <10>: d
Diámetro <20>: 40
Comando: nil
Si el programa lisp se va a utilizar con versiones de AutoCAD para idiomas extranjeros, los nombres
de los comandos deben ir precedidos de un subrayado ( _ ), para que puedan traducirse.
Los comandos que se ejecutan mediante la función command no se reproducen en la línea 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 función 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 función command de AutoLISP.
Se crea un grupo DESHACER explícitamente alrededor de cada comando utilizado con la función
command. Si un usuario escribe H (o DESHACER) después de ejecutar una rutina de AutoLISP,
sólo se deshará el último comando. Si se introduce DESHACER más veces, se retrocederá por los
comandos utilizados en dicha rutina. Si se desea que un grupo de comandos se considere un grupo
(o toda la rutina), se utilizan las opciones Inicio y Fin de DESHACER.
Si un comando de AutoCAD está activo y el símbolo PAUSE se encuentra predefinido como un
argumento de la función command, esta función se interrumpirá para que el usuario pueda escribir
información.
Ejemplo ejecutado a nivel de línea de comandos:
Comando: (setq centro '(10 20))
(10 20)
Comando: (command "circulo" centro PAUSE "linea" centro PAUSE "")
circulo 3P/2P/TTR/<centro>: Diámetro/<Radio>:
Comando: linea Desde el punto:
Al punto:
38
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") devuelve nil
(osnap p7 "fin") devuelve nil
Cambiando la variable APERTURE:
(osnap p5 "int") devuelve nil
(osnap p7 "fin") devuelve p4
39
5.13. FUNCIONES PARA GESTIÓN DE FICHEROS
LOAD
Carga un archivo Autolisp en la memoria y evalúa las expresiones en el archivo.
Sintaxis: (LOAD <"nombre del fichero"> [si falla] )
nombre de fichero: cadena de caracteres con el nombre, sin extensión .lsp, del fichero. Si no se
indica ningún camino se busca el fichero según el camino de acceso a bibliotecas Autocad. .
Una barra oblicua (/) o dos contrabarras () son delimitadores de directorio válidos.
Si falla: valor vuelto por la función en el caso de que la carga del fichero fracase. Si no se
proporciona este argumento, la función presenta un mensaje de error AutoLISP
Valor retornado: El de la última expresión evaluada, si la carga es buena.
Los ficheros que se quiere sean cargados al iniciarse la sesión del editor de dibujo tendrán que estar
especificados en el fichero ACAD.LSP que Autocad carga automáticamente.
Estudiar este ejemplo después de ver la función DEFUN
(defun MI-FUNC1 (x) ...cuerpo de la función...)
(defun MI-FUNC2 (x) ...cuerpo de la función. )
y el archivo prueba2.lsp no existe, entonces:
(load "/luis/prueba1") devuelve MI-FUNC2
(load "luisprueba1") devuelve MI-FUNC2
(load "/luis/prueba1" "mal") devuelve MI-FUNC2
(load "prueba2" "mal") devuelve "mal"
(load "prueba2") produce un error de AutoLISP
Cuando un programa define varias funciones deben estar todas codificadas en un único fichero que
se cargará con la función 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 extensión del
archivo que debe abrirse.
clave de acceso: cadena de una letra minúscula, es la etiqueta de lectura/escritura y debe
contener una cadena de una sola letra en minúsculas. En la tabla siguiente se describen las
letras de modo válidas.
"r": Abre un fichero para lectura
"w": Abre un fichero para escritura
"a": Abre un fichero para escribir añadiendo nuevos datos al final del mismo. Sitúa 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 símbolo 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, código ASCII decimal 26) al final del texto. Cuando lee un archivo de texto, el DOS devuelve un
estado de fin de archivo si encuentra una marca CTRL Z, aunque a ésta le sigan más datos. Si va a utilizar el modo "a"
de OPEN para añadir datos a archivos creados en otros programas, cerciórese de que éstos no insertan marcas CTRL
Z al final de sus archivos de texto.
40
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")) devuelve <Archivo #nnn>
(setq f (open "xnueva.tst" "w")) devuelve <Archivo #nnn>
CLOSE
Cierra un archivo abierto
Sintaxis: (CLOSE <símbolo correspondiente al descriptor de fichero>)
El argumento símbolo correspondiente al descriptor de fichero es un descriptor de archivo que
se obtiene mediante la función OPEN. Tras utilizar la función CLOSE, aunque el descriptor de
fichero no cambia, deja de ser válido. Los datos añadidos a un archivo abierto no se escriben
realmente hasta que se cierra el archivo.
Valor retornado: nil si descriptor_archivo es válido, en caso contrario devuelve un mensaje de error.
Por ejemplo, el siguiente código calcula el número de líneas del archivo unarchivo.txt y define la
variable ct en ese número.
(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 búsqueda de archivos de Autocad
Sintaxis: (FINDFILE <"nombre_archivo">)
Valor retornado: una cadena de caracteres con el nombre completo del archivo indicando la ruta de
localización.
La función FINDFILE no asigna el tipo o extensión 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 función 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 función 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 sólo existe en el directorio/acad/support.
(findfile "xyz.txt") devuelve "/acad/support/xyz.txt"
Si ninguno de los directorios del camino de búsqueda de la biblioteca contiene el archivo no esta.
(findfile "noesta") devuelve nil
41
5.14. FUNCIONES DE LECTURA Y ESCRITURA
5.14.1. ESCRITURA
PRIN1
Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo abierto en modo
de escritura.
Sintaxis: (PRIN1 [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión.
Es posible llamar a la función prin1 sin argumentos, en cuyo caso devuelve (e imprime) la cadena
nula.
(setq a 123 b '(a))
(prin1 'a) imprime A y devuelve A
(prin1 a) imprime 123 y devuelve 123
(prin1 b) imprime (A) y devuelve (A)
(prin1 "Hola") imprime "Hola" y devuelve "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 válido para un archivo
abierto para escritura,
(prin1 "Hola" f) escribirá "Hola" en el archivo indicado y devolverá "Hola".
PRINC
Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo. (La diferencia
con PRIN1 es que PRINC evalúa los caracteres de control que aparezcan en la expresión.).
Sintaxis: (PRINC [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión.
PRINT
Imprime un salto de línea, una expresión AutoLISP y un espacio en el área de órdenes o lo escribe
en un archivo.
Sintaxis: (PRINT [expresión] [descriptor de fichero])
Valor retornado: el argumento de la expresión
PROMPT
Presenta una cadena de caracteres en el área de órdenes. (Evalúa 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 más útil princ.
(prompt "Nuevo valor: " ) muestra Nuevo valor: en la(s) pantalla(s)
WRITE-CHAR
Escribe un solo carácter en el área de órdenes o bien en un fichero abierto.
Sintaxis: (WRITE-CHAR <num> [descriptor de fichero])
El argumento núm es el código ASCII decimal del carácter que debe escribirse.
Valor retornado: El código 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.
42
WRITE-LINE
Escribe una cadena de caracteres en al área de órdenes o bien en un archivo (evalúa caracteres de
control.
Sintaxis: (WRITE-LINE <”cadena”> [descriptor de fichero])
Valor retornado: La cadena de caracteres.
(write-line "Prueba" f) escribe Prueba y devuelve "Prueba"
TERPRI
Imprime un salto de línea 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 código ASCII para el carácter leído.
Por ejemplo, si se tiene en cuenta que el búfer de entradas por teclado está vacío,
(read-char)
espera a que se escriban datos. Si introduce los caracteres ABC seguidos de RETURN, read-char
devuelve 65 (el código ASCII decimal correspondiente a la letra A). Las tres llamadas siguientes a
read-char devuelven 66, 67 y 10 (línea nueva), respectivamente. Si se efectúa otra llamada, read-
char vuelve a esperar a que se escriban datos.
READ- LINE
Lee una cadena de caracteres procedentes del bufer del teclado o de un archivo abierto en modo de
lectura.
Sintaxis: (READ-LINE [descriptor de fichero])
Valor retornado: la cadena leída. (Cuando se alcanza el final de un archivo de lectura el valor
retornado es nil )
Por ejemplo, si tiene en cuenta que f es un puntero de archivo abierto válido,
(read-line f)
devuelve la siguiente línea de entrada del archivo, o nil si ha llegado al final del archivo.
43
Ejemplo ejecutado a nivel de línea de órdenes de Autocad:
(SETQ A 10 B “HOLA”)
“HOLA”
(PRIN1 A)
1010
(PRIN1 “nCASA”)
“nCASA”“nCASA”
(PRINC A)
1010
(PRINC “nCASA”)
“CASA“nCASA”
(PRINT A)
10 10
(PRINT “nCASA”)
“nCASA” “nCASA”
(PROMPT “nCASA”)
CASAnil
(WRITE-CHAR A)
10
(WRITE-CHAR 67)
C67
(WRITE-LINE B)
HOLA
“HOLA”
(WRITE-LINE “nCASA”)
CASA
“CASA”
44
5.15. FUNCIONES DE ORDENACIÓN
ACAD_STRLSORT
Ordena alfabéticamente listas de cadenas de caracteres
Sintaxis: (ACAD_STRLSORT lista)
Valor retornado: La lista con las cadenas ordenadas alfabéticamente. Si la lista no contiene cadenas
o no hay memoria suficiente para realizar la ordenación, la función 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 función de comparación dada. En
determinados casos puede eliminar los objetos duplicados.
Sintaxis: (VL-SORT lista función)
Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva
T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio
de ordenación.
Valor retornado: La lista con los elementos de la lista original ordenados, aunque no se garantiza la
conservación de todos los elementos originales (elimina las cadena y los enteros duplicados).
(vl-sort '(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 función de comparación dada, y
devuelve sus índices. No elimina duplicados.
Sintaxis: (VL-SORT-I lista función)
Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva
T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio
de ordenación.
Valor retornado: Una lista que contiene los índices de los elementos de la lista, ordenados conforme
al criterio establecido por la función de comparación.
(vl-sort-i '("a" "d" "f" "c") '>) devuelve: (2 1 3 0)
El orden en la lista ordenada sería: "f" "d" "c" "a"; donde "f" es el tercer elemento (índice 2) en la lista
original, "d" es el segundo elemento (índice 1) en la lista, y así sucesivamente.
(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 función 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)
45
5.16. FUNCIONES DE CONTROL DE PANTALLA
REDRAW
Redibuja la pantalla de presentación (o las entidades especificadas)
Sintaxis: (REDRAW ) (sintaxis simplificada para el redibujado de la pantalla)
Valor retornado: Nil
GRAPHSCR
Fuerza la presentación de pantalla gráfica 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 números de identificación de las ventanas gráficas
Sintaxis: (VPORTS)
Valor retornado: Una lista de sublistas donde los elementos de cada sublista son:
1. El número de identificación de cada ventana gráfica.
2. Coordenadas de la esquina inferior izquierda (coordenadas normalizadas).
3. Coordenadas de las esquina superior derecha..
46
5.17. OTRAS FUNCIONES DE UTILIDAD
EVAL
Evalúa expresiones
Sintaxis:(EVAL <expresión>)
Valor retornado: El valor retornado por la expresión evaluada
En la línea de órdenes la abreviatura es el signo !
(setq a 123)
(setq b 'a)
entonces:
(eval 4.0) devuelve 4.0
(eval (abs -10)) devuelve 10
(eval a) devuelve 123
(eval b) devuelve 123
QUOTE
Procesa una instrucción sin evaluarla
Sintaxis:(QUOTE <expresión>)
Valor retornado: La expresión sin evaluarla
La sintaxis alternativa es el apóstrofo. No puede usarse en el indicador COMMAND.
(quote a) devuelve A
(quote cat) devuelve CAT
(quote (a b)) devuelve (A B)
'a devuelve A
'cat devuelve CAT
'(a b) devuelve (A B)
Los tres últimos ejemplos no tienen efecto si se introducen directamente desde el teclado como
respuesta a un mensaje de AutoCAD.
NULL
Comprueba si una expresión se evalúa como nulo
Sintaxis: (NULL <expresión>)
Valor retornado: T si la expresión evaluada es nulo y nil en caso contrario.
(setq a 123 b "cadena" c nil)
(null a) devuelve nil
(null b) devuelve nil
(null c) devuelve T
(null ' ) devuelve T
QUIT
Fuerza a la rutina actual a abandonar el procesamiento.
Sintaxis: (QUIT)
Valor retornado: El mensaje “”quit/exit abort”” (abandonar/salir abortar)
47
TEXTBOX
Mide un objeto de texto designado y devuelve las coordenadas diagonales del cuadro donde está
contenido el texto
Sintaxis: (TEXTBOX <lista_e>)
lista_e: es una lista de definición de entidad en la forma devuelta por ENTGET y debe definir un
objeto de texto. Debe definir un objeto de texto. Si en lista_e se omiten los campos que definen
parámetros de texto distintos del texto en sí, se utilizan los valores actuales (por defecto).
Valor retornado: Si textbox se ejecuta satisfactoriamente, devuelve una lista de dos puntos, en caso
contrario devuelve nil.
Lo mínimo que TEXTBOX acepta como lista es el texto en sí.
(textbox '((1 . "Hola mundo."))) puede devolver ((0.0 0.0 0.0) (0.8 0.2 0.0))
48
6. FUNCIONES AVANZADAS DE PROGRAMACIÓN AUTOLISP
6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIÓN AutoLISP
LISP BÁSICO: El objetivo ha sido la incorporación de ALTAS en la base de datos geométrica. La gran
limitación consiste, por consiguiente, en plantear MODIFICACIONES.
LISP AVANZADO: Resuelve el problema anterior proporcionando formas de conexión con el
metaarchivo de información gráfica.
6.2. CONCEPTOS BÁSICOS
Conjunto designado: Conjunto de entidades designado, bien, interactivamente, bien,
automáticamente y retenido como una variable en la corriente del programa.
Nombre de entidad: clave alfanumérica asociada a cada entidad del dibujo en el formato interno.
(puntero capaz de producir una lectura en la base de datos del dibujo)
<Nombre de objeto: 3c50500>
Registro de entidad: Información relativa a la entidad estructurada como una lista de asociaciones
que utilizan como claves los códigos estudiados para la estructura interna en el formato DXF.
Definición de una línea 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 línea 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))
49
6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS
- Creación del conjunto designado:
(SETQ)
Creación interactiva: SSGET
Creación automática: SSGET "X" filtros
Modos de designación de Autocad
- Obtención de los nombres de entidad.
(SETQ)
SSLENGTH
SSNAME
SSMEMB
SSADD
SSDEL
- Obtención del registro de entidad.
(SETQ)
ENGET
- Gestión de subentidades (entidades compuestas)
Polilíneas => Vértices
Bloques con atributos => Atributos
(SETQ)
ENTLAST
ENTNEXT
ENTSEL
ENTDEL
- Manipulación del registro de entidad:
ASSOC
CONS
SUBST
Órdenes relacionadas con la manipulación de listas
- Creación de una nueva entidad:
ENTMAKE
- Modificación de la información del registro y regeneración del dibujo:
ENTMOD
ENTUPD (entidades compuestas).
50
6.4. DESCRIPCIÓN DE LAS FUNCIONES
SSGET
Solicita al usuario que designe objetos (entidades) y devuelve un conjunto de selección (un puntero
a la información del conjunto).
Sintaxis: (SSGET [modo] [pt1 [pt2]] [lista_pt] [lista_filtros])
Modo: es una cadena que especifica el método de designación de objetos. Los modos válidos
son "_W", "_WP", "_C", "_CP", "_L", "_P", "_I" y "_F", que corresponden a los métodos de
designación Ventana, PolígonoV, Captura, PolígonoC, Ultimo, Previo, Implícito y Borde.
Otro valor optativo de modo es "X", que selecciona toda la base de datos.
pt1 y pt2: especifican puntos relevantes para la designación. Introducir un punto sin ningún
argumento modo equivale a seleccionar un objeto designando un solo punto.
Lista_pt: especifican puntos relevantes para la designación para los casos en que sea
necesario.
lista_filtros: es una lista de asociaciones que especifica propiedades de objeto. Los objetos que
coinciden con la lista_filtros se añaden al conjunto de selección.
Si se omiten todos los argumentos, SSGET muestra la solicitud Designar objetos para que el
conjunto de selección pueda construirse de forma interactiva.
Valor retornado: un conjunto de selección (un puntero a la información del conjunto)
Los conjuntos de selección pueden contener objetos de los espacios papel y modelo, pero cuando
el conjunto se utiliza en una operación, los objetos del espacio no activo se descartan. Los
conjuntos de selección devueltos por SSGET sólo contienen entidades principales (ningún atributo
ni vértice de polilínea).
Ejemplos de uso de SSGET
(ssget):
Solicita al usuario que realice una designación general de objetos y los incluye en un conjunto
de selección
(ssget "_P"):
Crea un conjunto de selección con los últimos Objetos seleccionados
(ssget "_L"):
Crea un conjunto de selección con los últimos objetos visibles añadidos a la base de datos
(ssget '(2 2)):
Crea un conjunto de selección con un objeto que pasa por el punto (2,2)
(ssget "_W" '(0 0) '(5 5)):
Crea un conjunto de selección con los objetos incluidos en la ventana desde (0,0) hasta (5,5).
(ssget "_C" '(0 0) '(1 1)):
Crea un conjunto de selección con los objetos que pasan por el rectángulo de (0,0) a (1,1)
(ssget "X"):
Crea un conjunto de selección con todos los objetos de la base de datos
(ssget "X" lista_filtros):
Analiza la base de datos y crea un conjunto de selección de objetos que coinciden con la
lista_filtros.
(ssget lista_filtros ):
Solicita al usuario que realice una selección general de objetos y coloca sólo los objetos que
coinciden con y los Incluye en un conjunto de selección
(ssget "_P" lista_filtros):
Crea un conjunto de selección con los últimos objetos seleccionados que coinciden con la
lista_filtros
51
Los siguientes ejemplos de ssget requieren que se suministre una lista de puntos a la función. La
variable lista_pt no puede contener puntos que definan segmentos con longitud cero.
(setq lista_pt '((1 1)(3 1)(5 2)(2 4)) )
(ssget "_WP" lista_pt):
Crea un conjunto de selección con todos los objetos incluidos en el polígono definido por
lista_pt
(ssget "_CP" lista_pt):
Crea un conjunto de selección con todos los objetos que pasan por el polígono y los que están
dentro definidos por lista_pt
(ssget "_F" lista_pt):
Crea un conjunto de selección con todos los objetos que intersecan el borde definido por
lista_pt
(ssget "_WP" lista_pt lista_filtros):
Crea un conjunto de selección con todos los objetos dentro del polígono definido por lista_pt
que coinciden con la lista_filtros
AutoLISP no permite manejar más de 128 conjuntos abiertos a la vez. Si se alcanza este límite,
AutoCAD se niega a crear más conjuntos de selección y devuelve nil a todas las llamadas SSGET.
SSLENGTH
Devuelve el número entero correspondiente al número de entidades del conjunto designado
indicado.
Sintaxis: ( SSLENGTH < conjunto designado> )
Valor retornado: Un número entero.
(setq cs (ssget "U")) Coloca el último objeto en el conjunto de selección cs
(sslength cs) devuelve 1
SSNAME
Devuelve el nombre de entidad de la entidad perteneciente al conjunto designado indicado y que
ocupa la posición que especifica el índice.
Sintaxis: ( SSNAME < conjunto designado> < índice> )
El argumento índice debe ser un número entero. Si es negativo o mayor que la entidad con el
número más alto del conjunto de selección, 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 información de la entidad)
(setq cs (ssget)) Crea un conjunto de selección llamado cs
(setq ent1 (ssname cs 0)) Obtiene el nombre de la primera entidad de cs
(setq ent1 (ssname cs 3)) Obtiene el nombre de la cuarta entidad de cs
SSMEMB
Comprueba si un objeto (entidad) forma parte de un conjunto de selección
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 selección cs1 pero e2 no, entonces
(ssmemb e1 cs1) devuelve el nombre de entidad e1
(ssmemb e2 cs1) devuelve nil
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf
PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf

Más contenido relacionado

Similar a PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf

Estructura sintactica de los lenguajes de programacion y bases de datos
Estructura sintactica de los lenguajes de programacion y bases de datosEstructura sintactica de los lenguajes de programacion y bases de datos
Estructura sintactica de los lenguajes de programacion y bases de datosspedy93
 
Trabajo Del Blogger
Trabajo Del BloggerTrabajo Del Blogger
Trabajo Del Bloggerwalin_lalo
 
Estructura Sintactica
Estructura SintacticaEstructura Sintactica
Estructura SintacticaluchoGL
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostreamTensor
 
Lenguajes De Bajo Nivel
Lenguajes De Bajo NivelLenguajes De Bajo Nivel
Lenguajes De Bajo Nivelguestbf0046
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacionCarlos Chevez
 
Unidad 4 Técnicas para la formulación de algoritmos
Unidad 4 Técnicas para la formulación de algoritmosUnidad 4 Técnicas para la formulación de algoritmos
Unidad 4 Técnicas para la formulación de algoritmosCarlos M. Sandoval
 
Qué Es Una Hoja De CáLculo
Qué Es Una Hoja De CáLculoQué Es Una Hoja De CáLculo
Qué Es Una Hoja De CáLculoguest0589b7
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculoguest677597
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculoguest5019ed
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculoguest677597
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)Pato Brito
 

Similar a PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf (20)

Estructura sintactica de los lenguajes de programacion y bases de datos
Estructura sintactica de los lenguajes de programacion y bases de datosEstructura sintactica de los lenguajes de programacion y bases de datos
Estructura sintactica de los lenguajes de programacion y bases de datos
 
Trabajo Del Blogger
Trabajo Del BloggerTrabajo Del Blogger
Trabajo Del Blogger
 
Estructura Sintactica
Estructura SintacticaEstructura Sintactica
Estructura Sintactica
 
Doc15
Doc15Doc15
Doc15
 
Doc15
Doc15Doc15
Doc15
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Data segment
Data segmentData segment
Data segment
 
Lenguajes De Bajo Nivel
Lenguajes De Bajo NivelLenguajes De Bajo Nivel
Lenguajes De Bajo Nivel
 
EXPO PERL UTT
EXPO PERL UTTEXPO PERL UTT
EXPO PERL UTT
 
Pascal [modo de compatibilidad]
Pascal [modo de compatibilidad]Pascal [modo de compatibilidad]
Pascal [modo de compatibilidad]
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacion
 
Unidad 4 Técnicas para la formulación de algoritmos
Unidad 4 Técnicas para la formulación de algoritmosUnidad 4 Técnicas para la formulación de algoritmos
Unidad 4 Técnicas para la formulación de algoritmos
 
Qué Es Una Hoja De CáLculo
Qué Es Una Hoja De CáLculoQué Es Una Hoja De CáLculo
Qué Es Una Hoja De CáLculo
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculo
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculo
 
Hojas De CáLculo
Hojas De CáLculoHojas De CáLculo
Hojas De CáLculo
 
Excel 2016
Excel 2016Excel 2016
Excel 2016
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)
 
Conceptos de algoritmos
Conceptos de algoritmosConceptos de algoritmos
Conceptos de algoritmos
 
Pascal
PascalPascal
Pascal
 

Último

tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolicalf1231
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismosaultorressep
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfDiegoMadrigal21
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 

Último (20)

tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismo
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdf
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 

PROGRAMACION_AUTOLISP_PERSONALIZACION_DE.pdf

  • 1. PROGRAMACIÓN AUTOLISP (PERSONALIZACIÓN DE AUTOCAD) MILAGROS CANGA VILLEGAS JOSÉ ANDRÉS DÍAZ SEVERIANO Departamento de Ingeniería Geográfica y Técnicas de Expresión Gráfica T a a/2 a/3 T a a/2 a/2 Pa P cenp ceng cen a/2 a/3 a/12 a/12 a/12 Sistema de rectas paralelas a/3 a/3 Formas homotéticas rad Pa P cen Figura 1: Definición geométrica Figura 2: Mosaico
  • 2. “No basta el recuerdo Cuando aún queda tiempo” (Luis Cernuda) “El hoy es malo, pero el mañana ... es mío” (Antonio Machado)
  • 3. i
  • 4. ii INDICE: 1. PRESENTACIÓN GENERAL DE AUTOLISP 1 2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS 2 2.1. Números 2 2.2. Cadenas 2 2.3. Listas 3 2.4. Símbolos y variables 3 2.5. Conjuntos de selección 3 2.6. Nombres de entidad 4 2.7. Descriptores de archivo 4 2.8. Subrutinas 4 3. EXPRESIONES DE AUTOLISP 5 4. RECOMENDACIONES INICIALES PARA LA CODIFICACIÓN DE UNA RUTINA LISP 6 5. FUNCIONES AUTOLISP 7 5.1. FUNCIONES ARITMÉTICAS 8 5.2. FUNCIONES DE ASIGNACIÓN 12 5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO 13 5.4. FUNCIONES PARA GESTIÓN DE LISTAS 15 5.4.1. CREACIÓN DE LISTAS 15 5.4.2. EXTRACCIÓN DE ELEMENTOS DE UNA LISTA 16 5.4.3. MANIPULACIÓN DE LISTAS 18 5.5. FUNCIONES MONOLÍNEA 20 5.6. FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN 21 5.7. FUNCIONES DE RELACIÓN 24 5.8. FUNCIONES DE CONDICIÓN 27 5.9. FUNCIONES PARA GESTIÓN DE CICLOS 28 5.10. FUNCIÓN PARA CREAR FUNCIONES DE USUARIO 30 5.11. FUNCIONES GRÁFICAS 31 5.12. FUNCIONES DE ENTRADA INTERACTIVA 32 5.13. FUNCIONES PARA GESTIÓN DE FICHEROS 39 5.14. FUNCIONES DE LECTURA Y ESCRITURA 41 5.14.1. ESCRITURA 41 5.14.2. LECTURA 42 5.15. FUNCIONES DE ORDENACIÓN 44 5.16. FUNCIONES DE CONTROL DE PANTALLA 45 5.17. OTRAS FUNCIONES DE UTILIDAD 46 6. FUNCIONES AVANZADAS DE PROGRAMACIÓN AUTOLISP 48 6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIÓN AutoLISP 48 6.2. CONCEPTOS BÁSICOS 48 6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS 49 6.4. DESCRIPCIÓN DE LAS FUNCIONES 50 7. CÓDIGOS Y MENSAJES DE ERROR DE AUTOLISP 59 8. ÍNDICE DE FUNCIONES 63 9. BIBLIOGRAFÍA BÁSICA 63
  • 5. 1 1. PRESENTACIÓN GENERAL DE AUTOLISP AutoLISP es una adaptación del lenguaje de programación LISP y forma parte integral del paquete AutoCAD. Autolisp es un pequeño subconjunto del CommonLISP, y por ello se ajusta muy estrechamente a la misma sintaxis y convenciones, pero consta de muchas funciones específicas de AutoCAD. AutoLISP es la más potente herramienta para optimizar la ejecución de AutoCAD. Le habilita para «automatizar» AutoCAD incluso más allá de lo que puede llevar a cabo usando macros. Las rutinas AutoLISP tienen aplicaciones como: - La creación de nuevas y únicas órdenes AutoCAD. - La inserción de funciones especiales para dibujar y para calcular. - Análisis detallados de gráficos 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 gráficos. AutoLISP es flexible y fácil de aprender y utilizar para los no-programadores, quienes al aprender AutoLISP sólo necesitan conceptos básicos de programación, tales como: - 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 condición específica (bucles). - Específicamente: Acceder a los datos de la base de datos geométrica El código de AutoLISP no se compila 1 , se puede teclear el código en la línea de comandos y ver los resultados inmediatamente haciéndose más sencilla la introducción a este lenguaje para los no iniciados. En un segundo nivel de aprendizaje resulta mucho más fácil realizar pruebas y depurar cuando este código se carga desde un archivo, en lugar de volverlo a escribir cada vez que se realiza alguna modificación. El código de AutoLISP se almacena en archivos de texto ASCII con la extensión *. lsp. La sintaxis de las expresiones de AutoLISP escritas en los archivos es básicamente la misma que se utiliza para escribirlas en la solicitud de comando. 1 Se trabaja a este nivel docente sin compilar. Se recomienda consultar los manuales de VisualLISP de la versión 2000 de AutoCad o superior.
  • 6. 2 2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS El evaluador de AutoLISP procesa las expresiones de acuerdo con el orden y el tipo de datos del código. Este código se caracteriza especialmente porque aparece entre paréntesis. 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. Números Números enteros Los enteros son números sin coma decimal. Los enteros de AutoLISP son números de 32 bits con signo cuyos valores están comprendidos entre +2 147 483 648 (231 ) y –2 147 483 647. Aunque AutoLISP utiliza internamente valores de 32 bits, los que se transmiten de AutoLISP a AutoCAD y viceversa están limitados a 16 bits. Por tanto, no pueden transmitirse a AutoCAD valores superiores a +32 767 (215 ) ni valores inferiores a –32 768. Los enteros que se utilizan de forma explícita en expresiones de AutoLISP se conocen como constantes. Números como 2, -56, y 1 200 196 son enteros válidos de AutoLISP. Números reales Los números reales son aquellos que contienen la coma decimal. Los comprendidos entre -1 y 1 deben empezar por cero. (No se admiten formatos como .2 ó 2.) Los números reales se almacenan en formato de coma flotante de doble precisión, lo cual proporciona una precisión mínima de 14 dígitos significativos, aunque el área de comandos de AutoCAD muestra sólo 6. Los números reales pueden expresarse en notación científica, que consta de una e o E opcional seguida por el exponente del número (por ejemplo, 0.0000041 es lo mismo que 4.1e-6). Los números reales que se utilizan de forma explícita en expresiones de AutoLISP se conocen como constantes. Números como 3,1, 0,23, -56,123, y 21 000 000.0 son números reales válidos de AutoLISP. 2.2. Cadenas 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 códigos de escape): para el carácter e para el carácter ESC n para el salto de línea r para RETURN t para tabulador Las cadenas individuales tienen una limitación de 132 caracteres. Las cadenas entre comillas que se utilizan de forma explícita en expresiones de AutoLISP se conocen como cadenas de texto o constantes de cadena. Ejemplos de cadenas válidas son "cadena 1" y "nPrimer punto: ".
  • 7. 3 2.3. Listas Las listas de AutoLISP son grupos de valores relacionados, separados por espacios en blanco (uno o varios se interpretan como uno sólo) e incluidos entre paréntesis. Las listas proporcionan un método eficaz para almacenar numerosos valores relacionados. AutoCAD expresa los puntos 3D como una lista de tres números reales. Ejemplos de listas son: (1.0 1.0 0.0), ("éste" "ése" "aquél") y (1 "UNO"). 2.4. Símbolos y variables AutoLISP utiliza símbolos para almacenar los datos. En los nombres de símbolos no se distingue entre mayúsculas y minúsculas, pudiendo emplearse cualquier secuencia de caracteres alfanuméricos, siempre que no contenga a alguno de los siguientes: - Paréntesis ( ) Reservado para lista y expresiones - Punto . Punto decimal - Apostrofo ' Abreviatura de la Función QUOTE - Comillas " Reservado a las cadenas de caracteres. - Punto y coma; Para comenzar una línea de comentarios. Un nombre de símbolo no puede estar compuesto sólo por caracteres numéricos. Las aplicaciones de AutoLISP hacen uso de símbolos o valores constantes, como cadenas, números reales o enteros, y variables, empleadas para almacenar datos generados durante las ejecución de los programas. AutoCAD proporciona tres variables predefinidas que pueden emplearse en las aplicaciones de AutoLISP: - PAUSE: está definida como una cadena compuesta que consta sólo de una contrabarra (). Esta variable se emplea con la función command para que el programa espere a que el usuario escriba datos. - PI: está definida como la constante p (pi). Su valor aproximado es 3.1415926. - T: está definida como la constante T. Se emplea como valor distinto de nil. - Nil: símbolo que en Lisp significa “nada” o “vacío”. Es posible cambiar el valor de estas variables con la función setq. Sin embargo, otras aplicaciones podrían considerar que sus valores son fiables; por tanto, se recomienda no modificar estas variables. A estas tres variables, junto con los nombres de funciones del lenguaje y los nombres de funciones definidas por el usuario, las denominaremos palabras reservadas del lenguaje Los valores asignados a las variables pueden usarse como respuesta a las solicitudes de comando de AutoCAD. Esto proporciona una forma de almacenar y reutilizar nombres o números complejos. Si se desea utilizar el valor de una variable como respuesta a una solicitud de AutoCAD, basta escribir el nombre de la variable precedido por un signo de admiración (!). 2.5. Conjuntos de selección Los conjuntos de selección son grupos compuestos por uno o varios objetos (entidades). Las rutinas de AutoLISP permiten añadir o suprimir de forma interactiva objetos de los conjuntos de selección.
  • 8. 4 2.6. Nombres de entidad Un nombre de entidad es un identificador numérico 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 selección de objetos para un posterior empleo de maneras varias. 2.7. Descriptores de archivo Los descriptores de archivo son identificadores alfanuméricos asignados a archivos abiertos por AutoLISP. Cuando sea necesario que una función de AutoLISP lea o escriba en un archivo, debe hacerse referencia a su identificador. 2.8. Subrutinas Es un símbolo con el nombre de una función predefinida por Autolisp. Pueden ser: - Internas, cuando pertenecen al conjunto base de Autolisp, incluidas las definidas por el usuario. - Externas, las que se han definido mediante otras aplicaciones ligadas a Autocad.
  • 9. 5 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, básicamente, el siguiente formato: (función argumentos) Cada expresión comienza con un paréntesis abierto y se compone de un nombre de función seguido de una lista ordenada de argumentos para dicha función, cada uno de los cuales puede constituir una expresión por sí mismo. La expresión termina con un paréntesis cerrado. Cada expresión devuelve un valor que puede ser empleado por una expresión circundante (Anidacion de expresiones); en caso de que no haya ninguna, AutoLISP devuelve el valor a la línea de comando de AutoCAD. Por ejemplo, el siguiente código incluye tres funciones. (fun1 (fun2 argumentos)(fun3 argumentos)) La primera función, fun1, tiene dos argumentos, mientras que las otras dos, fun2 y fun3, tienen un argumento cada una. Las funciones fun2 y fun3 están delimitadas por la función fun1, por lo que sus valores pasan a fun1 como argumentos. La función fun1 evalúa estos dos argumentos y devuelve el valor a la línea de comando. Si se escribe una expresión de AutoLISP en la solicitud de comando de AutoCAD, AutoLISP la evalúa y muestra el resultado, tras lo cual vuelve a aparecer la solicitud de comando. El siguiente ejemplo ilustra el uso de la función *(multiplicación), que acepta uno o más números reales como argumentos. Comando: (* 2 27) 54 Dado que este ejemplo no tiene expresión circundante, devuelve el resultado a la línea de comando. Las expresiones anidadas en otras expresiones devuelven sus resultados a la expresión circundante. El siguiente ejemplo utiliza el resultado de la función + (suma) como uno de los argumentos de la función * (multiplicación). Comando: (* 2 (+ 5 10) ) 30 El formato completo que estudiaremos para cada función Autolisp es el siguiente: (función argumentos .....[ Argumentos opcionales... ] ) Los puntos suspensivos significan que el último argumento puede repetirse un número cualquiera de veces. Cuando AutoCAD recibe algún código de AutoLISP, lo transmite al intérprete de AutoLISP, cuyo núcleo contiene el evaluador. El evaluador lee una línea de código, la evalúa y devuelve el resultado. El código puede leerse de un archivo o como datos tecleados por el usuario desde la línea de comando, pero en cualquier caso deberá tener el formato de una expresión de AutoLISP. Al respecto, hay que decir que: - Una expresión puede ser más larga que una línea. - Varios espacios en blanco se interpretan como uno sólo. - Una línea que se inició con ; no es interpretada. Se trata de una línea de comentarios. - Se puede responder a las solicitudes de comando de AutoCAD con expresiones de AutoLISP.
  • 10. 6 4. RECOMENDACIONES INICIALES PARA LA CODIFICACIÓN DE UNA RUTINA LISP - Conocer la sintaxis y las reglas del lenguaje. - Saber de qué funciones dispone el lenguaje. - Describir exactamente cuál es el objeto de la rutina LISP. Los programadores se refieren a esta versión de una rutina como pseudocódigo. - Recorrer el proceso manualmente desde el teclado, si es posible. Este procedimiento de verificación a priori, ayudará a reconocer rápidamente los problemas en el proceso de desarrollo. - Tomar notas de cada paso. - Anotar qué cálculos tuvieron lugar y en qué figuras se basaron. - Escribir el código lo más ordenado posible, distinguiendo entre: - Función principal (que será la que se invoca al utilizar el programa). Suele incluir la definición de un nuevo comando Autocad. - Funciones intermedias, según la estructura que el programar decida. - Utilizar nombres de funciones y variables fácilmente identificables, limitando el empleo de estas últimas a aquellas que sean estrictamente necesarias. - Escribir líneas de comentarios. - Utilizar funciones creadas en otros programas. Hacer Bibliotecas de funciones de usuario. - Sangrar el texto del código para facilitar la interpretación posterior.
  • 11. 7 5. FUNCIONES AUTOLISP Las funciones proporcionadas por el lenguaje se pueden clasificar de la siguiente manera: FUNCIONES BÁSICAS FUNCIONES ARITMÉTICAS, ...................................................................................................................8 FUNCIONES DE ASIGNACIÓN, ............................................................................................................. 12 FUNCIONES PARA MANEJAR CADENAS DE TEXTO, ....................................................................... 13 FUNCIONES PARA GESTIÓN DE LISTAS, ........................................................................................... 15 FUNCIONES MONOLÍNEA, .................................................................................................................... 20 FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN, ..................................................................... 21 FUNCIONES DE RELACIÓN, ................................................................................................................. 24 FUNCIONES DE CONDICIÓN, ............................................................................................................... 27 FUNCIONES PARA GESTIÓN DE CICLOS, .......................................................................................... 28 FUNCIÓN PARA CREAR FUNCIONES DE USUARIO, ......................................................................... 30 FUNCIONES GRÁFICAS, ....................................................................................................................... 31 FUNCIONES DE ENTRADA INTERACTIVA, ......................................................................................... 32 FUNCIONES PARA GESTIÓN DE FICHEROS, ..................................................................................... 39 FUNCIONES DE LECTURA Y ESCRITURA, ......................................................................................... 41 FUNCIONES DE ORDENACIÓN, ........................................................................................................... 44 FUNCIONES DE CONTROL DE PANTALLA, ........................................................................................ 45 OTRAS FUNCIONES DE UTILIDAD, ..................................................................................................... 46 FUNCIONES AVANZADAS
  • 12. 8 5.1. FUNCIONES ARITMÉTICAS + Suma números Sintaxis: (+ <n1> <n2> . . . ) Valor retornado: Suma de todos los argumentos numéricos. Ningún argumento devuelve Nil (+ 1 2) devuelve 3 (+ 1 2 3 4.5) devuelve 10.5 (+ 1 2 3 4.0) devuelve 10.0 - Sustrae n números Sintaxis: (- <n1> <n2> . . . ) Valor retornado: La diferencia entre el primer argumento y la suma de los restantes argumentos. Ningún argumento devuelve Nil (- 50 40) devuelve 10 (- 50 40.0) devuelve 10.0 (- 50 40.0 2.5) devuelve 7.5 (- 8) devuelve -8 * Multiplica números Sintaxis: (* <n1> <n2> . . . ) Valor retornado: Producto de todos los argumentos numéricos. Ningún argumento devuelve Nil (* 2 3) devuelve 6 (* 2 3.0) devuelve 6.0 (* 2 3 4.0) devuelve 24.0 (* 3 -4.5) devuelve -13.5 (* 3) devuelve 3 / Divide números Sintaxis: (/ <n1> <n2> . . . ) Valor retornado: El cociente del primer argumento dividido por el producto de los demás argumentos. (/ 100 2) devuelve 50 (/ 100 2.0) devuelve 50.0 (/ 100 20 2) devuelve 2 (/ 100 20 2.0) devuelve 2.5 (/ 4) devuelve 4 (/ 1 2) devuelve 0 (/ 4 (/ 1 2)) devuelve ERROR (/ 4 (/ 1.0 2)) devuelve 8.0 ∼ Devuelve el operador NOT binario (complemento de -1) del argumento Sintaxis: ( ∼ <entero>) Valor retornado = -1 - <entero>. (~ 3) devuelve -4 (~ 100) devuelve -101 (~ -4) devuelve 3
  • 13. 9 1+ Incrementa un número en uno Sintaxis: (1+ <n> ) Valor retornado = 1+n (entero o real según n sea entero o real.) (1+ 5) devuelve 6 (1+ -17.5) devuelve -16.5 1- Disminuye en uno un número. Sintaxis: (1- <n> ) Valor retornado = n-1 (entero o real según n sea entero o real.) (1- 5) devuelve 4 (1- -17.5) devuelve -18.5 ABS Convierte un número a su valor absoluto Sintaxis: (ABS <n> ) Valor retornado = el valor absoluto de n. (abs 100) devuelve 100 (abs -100) devuelve 100 (abs -99.25) devuelve 99.25 ATAN Calcula el arcotangente Sintaxis: (ATAN <n1> [n2]), donde los argumentos n1 y n2 se convierten en números reales antes de calcular el valor del arco tangente. Valor retornado = Arco tangente de n1/n2. Valor en radianes entre -π/2 y π/2. (atan 0.5) devuelve 0.463648 (atan 1.0) devuelve 0.785398 (atan -1.0) devuelve -0.785398 (atan 2.0 3.0) devuelve 0.588003 (atan 2.0 -3.0) devuelve 2.55359 (atan 1.0 0.0) devuelve 1.5708 (atan 1 2) devuelve 0.463648 (atan (/ 1 2)) devuelve 0.0 COS Calcula el coseno de un ángulo expresado en radianes Sintaxis: (COS <ang> ) Valor retornado = El coseno de ang (cos 0.0) devuelve 1.0 (cos pi) devuelve -1.0 (cos (/ pi 3)) 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) devuelve 0.841471 (sin 0.0) devuelve 0.0 (sin (/ pi 6)) devuelve 0.5
  • 14. 10 EXP Calcula el antilogaritmo neperiano de un numero Sintaxis:(EXP <n> ) Valor retornado: número real igual a en (exp 1.0) devuelve 2.71828 (exp 2.2) devuelve 9.02501 (exp -0.4) devuelve 0.67032 EXPT Calcula el resultado de elevar un número a una potencia Sintaxis:(EXPT <base> <potencia>) Valor retornado: número real o entero (expt 2 4) devuelve 16 (expt 3.0 2.0) devuelve 9.0 GCD Calcula el máximo común denominador de dos enteros Sintaxis: (GCD <n1> <n2>) Valor retornado = El valor del máximo común denominador. (gcd 81 57) devuelve 3 (gcd 12 20) devuelve 4 LOG Calcula el logaritmo neperiano de un número real Sintaxis: (LOG <n> ) Valor retornado = Un número real. (log 4.5) devuelve 1.50408 (log 1.22) devuelve 0.198851 (log 2.718281) devuelve 1.0 MAX Extrae el mayor valor de una serie de números Sintaxis: (MAX <n1> <n2> <n3>……..) Valor retornado = El mayor valor encontrado. (max 4.07 -144) devuelve 4.07 (max -88 19 5 2) devuelve 19 (max 2.1 4 8) devuelve 8.0 MIN Extrae el menor valor de una serie de números Sintaxis: (MIN <n1> <n2> <n3>……..) Valor retornado = El menor valor encontrado. (min 683 -10.0) devuelve -10.0 (min 73 2 48 5) devuelve 2 (min 2 4 6.7) devuelve 2.0 MINUSP Comprueba si un número es menor que 0 Sintaxis: (MINUSP <n> ) Valor retornado = T si el argumento n es un número y es negativo y nil en caso contrario. (minusp -1) devuelve T (minusp -4.293) devuelve T (minusp 830.2) devuelve nil
  • 15. 11 REM Calcula el resto de la división entre dos números Sintaxis: (REM <n1> <n2>) Valor retornado: El resto de dividir n1 entre n2. (rem 42 12) devuelve 6 (rem 12.0 16) devuelve 12.0 (rem 26 7) devuelve 5 (rem 5 2) devuelve 1 (rem 26 7 2) devuelve 1 SQRT Calcula la raíz cuadrada de un número Sintaxis: (SQRT <n> ) Valor retornado = Un número real, raíz cuadrada de n (sqrt 4) devuelve 2.0 (sqrt 2.0) devuelve 1.41421 ZEROP Comprueba si un número es 0 Sintaxis: (ZEROP <elemento>) Valor retornado: T si el elemento es 0 y nil en caso contrario. (zerop 0) devuelve T (zerop 0.0) devuelve T (zerop 0.0001) devuelve nil. NUMBERP Comprueba si la evaluación de una función es un número Sintaxis: (NUMBERP <expresión>) Valor retornado: T si la expresión evaluada es un numero y nil en caso contrario. (setq a 123 b 'a) (numberp 4) devuelve T (numberp 3.8348) devuelve T (numberp "Hola") devuelve nil (numberp a) devuelve T (numberp b) devuelve nil (numberp (eval b)) devuelve T
  • 16. 12 5.2. FUNCIONES DE ASIGNACIÓN SETQ Liga el nombre de símbolos al valor de una expresión Sintaxis: (SETQ < Símbolo> <exp> < Símbolo> <exp>. . . . . . . .) Valor retornado: El devuelto por el último argumento de la función. (setq a 5.0) devuelve 5.0 y define el símbolo (variable) a como 5.0. (setq b 123 c 4.7) devuelve 4.7 y define los símbolos (variables): b como 123 y c como 4.7 (setq s "el") devuelve "el" (setq x '(a b)) 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 sólo 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) Devuelve 0 y desactiva las marcas auxiliares. (setvar "pdmode" 34) Devuelve 34 y establece un tipo de punto (setvar "pellipse" 3) Error: AutoCAD rechazó la función TYPE Extrae el tipo de dato de un argumento. Sintaxis: (TYPE <elemento>) Valor retornado: El tipo de dato como una cadena en mayúsculas REAL: numero entero FILE: descriptor de fichero STR: cadenas INT: numero entero. SYM: símbolos LIST: listas y funciones de usuario SUBR: funciones internas PICKSET Conjuntos de selección ENAME Nombres de entidades .......... Los elementos que dan como resultado nil (como un símbolo no asignado) devuelven nil. (setq a 123 r 3.45 s "Hola!" x '(a b c)) (setq f (open "nombre" "r")) entonces: (type 'a) devuelve SYM (type a) devuelve INT (type f) devuelve FILE (type r) devuelve REAL (type s) devuelve STR (type x) devuelve LIST (type +) devuelve SUBR (type nil) devuelve nil
  • 17. 13 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 minúsculas o mayúsculas Sintaxis: (STRCASE <"cadena"> [modo]) - conversión a minúsculas: modo /= nil - conversión a mayúsculas : modo = nil o no se presenta. Valor retornado: La cadena convertida. (strcase "Ejemplo") devuelve "EJEMPLO" (strcase "Ejemplo" T) devuelve "ejemplo" STRCAT Empalma (concatena ) dos o más cadenas Sintaxis: (STRCAT <"cadena1"> ["cadena2"]...........) Valor retornado: Una sola cadena empalmada. (strcat "a" "cerca") devuelve "acerca" (strcat "a" "b" "c") devuelve "abc" (strcat "a" "" "c") devuelve "ac" STRLEN Cuenta los caracteres de una cadena Sintaxis: (STRLEN <"cadena">........) Valor retornado: Un número entero. Si se especifican varios argumentos cadena, la función devuelve la suma de las longitudes de todos los argumentos. Si éstos se omiten o se escribe una cadena vacía, el resultado es 0 (cero). (strlen "abcd") devuelve 4 (strlen "ab") devuelve 2 (strlen "uno" "dos" "tres") devuelve 10 (strlen) devuelve 0 (strlen "") devuelve 0 SUBSTR Extrae una porción de una cadena de caracteres. Sintaxis: (SUBSTR <"cadena"> <inicio>[ long ]) inicio: número entero que indica la posición del primer carácter a extraer. long: longitud de la subcadena a extraer ( si no se da proporciona la subcadena desde la posición inicial hasta el final) Valor retornado: La subcadena extraída. (substr "abcde" 2) devuelve "bcde" (substr "abcde" 2 1) devuelve "b" (substr "abcde" 3 2) devuelve "cd" (substr "abcde" 3 7) devuelve "cde" (substr "hola" 5) devuelve "" (cadena vacía)
  • 18. 14 VL-PRINC-TO-STRING Devuelve la representación en cadena de caracteres de cualquier objeto Lisp como si fuera presentada mediante la función princ. Sintaxis: (VL-PRINC-TO-STRING <dato>) Valor retornado: Una cadena de caracteres que contiene la representación del dato tal y como la mostraría la función princ. (vl-princ-to-string 120) devuelve ”120” (vl-princ-to-string 120.8) devuelve ”120.8” (vl-princ-to-string “abc”) devuelve ”abc” (vl-princ-to-string ‘(10 20)) devuelve ”(10 20)” VL-LIST->STRING Concatena los caracteres representados en una lista por sus códigos numéricos ASCII. Sintaxis: (VL-LIST->STRING ‘(entero … ) ) Valor retornado: Una cadena formada por los caracteres cuyos códigos ASCII se incluyen en la lista pasada como argumento. ((vl-list->string ‘(97 98 99 100) ) devuelve ”abcd” VL- STRING->LIST Convierte una cadena de caracteres en una lista de los códigos numéricos ASCII correspondientes. Sintaxis: (VL-STRING->LIST <cadena>) Valor retornado: Una lista con los códigos ASCII correspondientes a los caracteres que integran la cadena. ((vl-string->list ”abcd” ) devuelve (97 98 99 100)
  • 19. 15 5.4. FUNCIONES PARA GESTIÓN DE LISTAS 5.4.1. CREACIÓN DE LISTAS LIST Crea una lista a partir de un número de expresiones Sintaxis: ( LIST <expresión>...........) Valor retornado: Una lista de los argumentos de la función. (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 explícita con la función QUOTE si la lista no contiene variables ni opciones sin definir. El carácter de comilla ( ' ) se define como la función QUOTE. APPEND Funde varias listas en una Sintaxis: (APPEND <lista>...........) Valor retornado: Una lista única. (setq L5 (append '(a b) '(c d))) devuelve (A B C D) (setq L6 (append '((a)(b)) '((c)(d)))) devuelve ((A)(B)(C)(D)) (setq L7 (append L3 L4_1)) devuelve (3.9 6.7 10 20 30) (setq L8 (append L4_2 L4_1) devuelve ((10) (20) (30) 10 20 30) (setq L9 (append La Lb Lc) devuelve (10 20 30) CONS Añade al principio de una lista como primer elemento una expresión Sintaxis: (CONS <expresión> <lista>) Valor retornado: La nueva lista. (cons 'a '(b c d)) devuelve (A B C D) (cons '(a) '(b c d)) devuelve ((A) B C D) La función CONS también acepta un átomo en lugar del argumento lista, en cuyo caso construye una estructura denominada pares punteados. En los pares punteados, AutoLISP incluye un punto entre el primer y el segundo elemento. Un par punteado es un tipo especial de lista, por lo que algunas funciones que utilizan listas normales no los aceptan como argumento. (cons 'a 2) devuelve (A . 2) LENGTH Cuenta los elementos de una lista Sintaxis: (LENGTH <lista>) Valor retornado: El número entero correspondiente. (length '(a b c d)) devuelve 4 (length '(a b (c d))) devuelve 3 (length '()) devuelve 0
  • 20. 16 5.4.2. EXTRACCIÓN 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á vacía, CAR devuelve nil. (car '(a b c)) devuelve A (car '((a b) c)) devuelve (A B) (car '()) devuelve nil (car (cons 'a 2) devuelve a CDR Extrae una nueva lista donde están todos los elemento de la lista menos el primero. Sintaxis: (CDR <lista>) Valor retornado: la nueva lista. Si lista está vacía, CDR devuelve nil. (cdr '(a b c)) devuelve (B C) (cdr '((a b) c)) devuelve (C) (cdr '()) devuelve nil Para obtener el segundo átomo de un par punteado, se puede utilizar la función CDR. (cdr '(a . b)) devuelve B (cdr '(1 . "Texto")) devuelve "Texto" FUNCIONES ANIDADES DE CAR Y CDR AutoLISP permite concatenar las funciones CAR y CDR hasta en cuatro niveles. Las siguientes son funciones válidas. CAAAAR CADAAR CDAAAR CDDAAR CAAADR CADADR CDAADR CDDADR CAAAR CADAR CDAAR CDDAR CAADAR CADDAR CDADAR CDDDAR CAADDR CADDDR CDADDR CDDDDR CAADR CADDR CDADR CDDDR CAAR CADR CDAR CDDR Cada a representa una llamada a CAR y cada d representa una llamada a CDR. Por ejemplo: (caar x) es equivalente a (car (car x)) (caar L4_2) devuelve 10 (cdar x) es equivalente a (cdr (car x)) (cadar x) es equivalente a (car (cdr (car x))) (cadr x) es equivalente a (car (cdr x)) (cadr L4_2) devuelve (20) (cddr x) es equivalente a (cdr (cdr x)) (caddr x) es equivalente a (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 números 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)) un punto 2D (setq pt3 '(5.25 1.0 3.0)) un punto 3D (car pt2) devuelve 5.25 (cadr pt2) devuelve 1.0 (caddr pt2) devuelve nil (car pt3) devuelve 5.25 (cadr pt3) devuelve 1.0
  • 21. 17 (caddr pt3) devuelve 3.0 (car (cons 'a 2)) devuelve A (cdr (cons 'a 2)) 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)) devuelve E (last '(a b c (d e))) devuelve (D E) (last pt3 ) devuelve 3.0 (last L4_2) devuelve (30) NTH Extrae un elemento de una lista a partir de especificar su posición en ella (pos) Sintaxis: (NTH <pos> <lista>) Las posiciones dentro de la lista son numeradas de izquierda a derecha empezando por la posición 0. Valor retornado: El elemento encontrado, o un nulo si no se encontró. (nth 3 '(a b c d e)) devuelve D (nth 0 '(a b c d e)) devuelve A (nth 5 '(a b c d e)) devuelve nil (nth 0 L4_2) devuelve (10) (nth 0 (car L4_2)) devuelve 10 ASSOC Localiza sublistas en una lista de asociaciones utilizando elemento como palabra clave, y donde éste puede ser cualquier expresión válida susceptible de aparecer como primer elemento de una de las sublistas. 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 función SUBST proporciona un medio apropiado para sustituir el valor asociado con una clave en una lista de asociaciones.
  • 22. 18 5.4.3. MANIPULACIÓN DE LISTAS MEMBER Busca la primera aparición de una expresión en una lista y devuelve el resto de la lista a partir de la expresión encontrada. Sintaxis: (MEMBER <expresión><lista>) Valor retornado: una lista donde el primer elemento es la expresión encontrada y el resto, el resto de la lista hasta el final. Si no se encuentra la expresión devuelve nil . (member 'c '(a b c d e)) devuelve (C D E) (member 20 L4_1) devuelve (20 30) (member '(30) L4_2) devuelve ((30)) (member 'q '(a b c d e)) 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 <expresión>) Valor retornado: T si la expresión es una lista , nil en caso contrario. (listp L8) devuelve T (listp "hola") devuelve nil SUBST Busca en una lista un miembro especificado y sustituye cada aparición de éste por otro especificado Sintaxis: (SUBST <elemento nuevo> <elemento viejo> <lista>) Valor retornado: La lista modificada. (setq ejemplo '(a b (c d) b)) (subst 'qq 'b ejemplo) devuelve (A QQ (C D) QQ) (subst 'qq 'z ejemplo) devuelve (A B (C D) B) (subst 'qq '(c d) ejemplo) devuelve (A B QQ B) (subst '(qq rr) '(c d) ejemplo) devuelve (A B (QQ RR) B) (subst '(qq rr) 'z ejemplo) devuelve (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)) define sublvieja como (b 20) sublnueva '(b 50)) define sublnueva como (b 50) ) (setq lista (subst sublnueva sublvieja lista)) devuelve ((a 10) (b 50)(c 30))
  • 23. 19 FOREACH Procesa uno a uno los elementos de una lista y evalúa cada expresión para cada uno de los elemento de la lista Sintaxis: (FOREACH <nombre-var> <lista> <expresión>.........) Nombre-var: variable de memoria a la que FOREACH ligará secuencialmente los valores de la lista suministrada y que normalmente será usada en la expresión. Valor retornado: El resultado de la última expresión evaluada. Avanza por la lista, asignando un nombre-var a cada elemento y evalúa cada expresión para todos los elementos de la lista. Se pueden especificar tantas expresiones como se desee. La función FOREACH devuelve el resultado de la última expresión evaluada. (setq pt1 (getpoint "n¿pt1?:") pt2 (getpoint "n¿pt2?:") pt3 (getpoint "n¿pt3?:") 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) devuelve nil (atom b) devuelve T
  • 24. 20 5.5. FUNCIONES MONOLÍNEA APPLY Devuelve el resultado de ejecutar la "función" tomando como argumentos los elementos de la "lista". Sintaxis: ( APPLY <función> <Lista> ) Valor retornado: El devuelto por el argumento de la función (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 "función" tomando como argumentos de función los elementos sucesivos de "lista 1" ............."lista n" Sintaxis: ( MAPCAR <función> <lista 1> .................<lista n> ) Valor retornado: una lista con las sucesivas soluciones. (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 ) (mapcar 'expt '( 1 2 3 ) '( 4 5 6 ) ) devuelve ( 14 25 36 ) (setq A 10 B 20 C 30) (mapcar '1+ (LIST A B C) devuelve la lista (11 21 31) Ejemplo anterior: (setq L '( 1 2 3 4 5 6)) (mapcar '1+ L) devuelve la lista (2 3 4 5 6 7) LAMBDA Define una función sin darle un nombre. El conjunto de expresiones se aplica sobre los argumentos Sintaxis: ( LAMBDA < argumentos > < expresión >...............) Valor retornado: el resultado de la última evaluación. 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 )
  • 25. 21 5.6. FUNCIONES DE CONVERSIÓN Y TRANSFORMACIÓN FIX Convierte un número real en entero. Sintaxis: (FIX <numero real>) Valor retornado: El número entero que resulta de quitar los decimales al real. (fix 3) devuelve 3 (fix 3.7) devuelve 3 FLOAT Convierte un número entero en real. Sintaxis: (FLOAT <numero entero>) Valor retornado: un numero real. (float 3) devuelve 3.0 (float 3.75) devuelve 3.75 ATOI Convierte una cadena de caracteres en un número entero Sintaxis: (ATOI <cadena>) Valor retornado: un número entero. (atoi "97") devuelve 97 (atoi "3") devuelve 3 (atoi "3.9") devuelve 3 Ejemplo de código que introduce puntos en una lista solicitando el punto por su posición 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 número real Sintaxis: (ATOF <"cadena">) Valor retornado: un número real. (atof "97.1") devuelve 97.1 (atof "3") devuelve 3.0 (atof "3.9") 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"
  • 26. 22 RTOS Convierte un número real en una cadena de caracteres Sintaxis: (RTOS <número> [modo [precisión]]) numero: número real (o entero que tomará como real) modo (opcional): entero del 1 al 5 que determina el formato numérico de la cadena: 1. Unidades científicas 2. Unidades decimales 3. Pies y pulgadas I (fracción decimal) 4. Pies y pulgadas II (fracción propia) 5. Unidades fraccionarias precisión (opcional): entero que determina el número de decimales de precisión en la cadena Si no se especifican los argumentos modo y precisión 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 2 4) => “5.6000" (RTOS 5.6 5 4) => “5 5/8" DISTOF Convierte un cadena en un número real, con un determinado formato de visualización. Sintaxis: (DISTOF <"cadena"> [ modo]) Cadena: cadena de caracteres que expresa un valor numérico. modo (opcional): entero del 1 al 5 que indica el formato numérico del número real expresado en la cadena (El código se corresponde con el dado en la función anterior), la función deberá ser capaz de interpretar el argumento cadena de acuerdo con el modo especificado: Valor retornado: Un número real ANGTOS Convierte un número (que representa un ángulo en radianes) en una cadena de caracteres Sintaxis: (ANGTOS <ángulo> [modo [precisión]]) angulo: valor del ángulo en radianes. modo (opcional): entero del 0 al 4 que determina el formato numérico en la cadena: 0. Grados sexagesimales. 1. Grados, minutos y segundos 2. Grados centesimales. 3. Radianes 4. Unidades geodésicas. precisión (opcional): entero que determina el número de decimales de precisión en la cadena. Si no se especifican los argumentos modo y precisión 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 número real que representa un ángulo Sintaxis: (ANGTOF <"cadena"> [ modo]) Cadena: cadena de caracteres que expresa un valor numérico de ángulo modo (opcional): entero del 0 al 4 que indica el formato numérico del ángulo expresado en la cadena (El código se corresponde con el dado en la función anterior), la función 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 numérico de un ángulo en radianes. Ejemplos: (ANGTOF “180" 0) => 3.1416 (ANGTOF “200" 2) => 3.1416
  • 27. 23 ASCII Convierte el primer carácter de una cadena de caracteres a su código ASCII Sintaxis: (ASCII <"cadena">) Valor retornado: Un entero que representa el código ASCII (ascii "A") devuelve 65 (ascii "a") devuelve 97 (ascii "GRANDE") devuelve 66 CHR Convierte un número entero que representa un carácter ASCII en la cadena de un sólo carácter correspondiente Sintaxis: (CHR <entero>) Valor retornado: una cadena de un sólo carácter. (chr 65) devuelve "A" (chr 66) devuelve "B" (chr 97) 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”) hola (read “( 20 30 40)”) (20 30 40) (read ""Hola a todos"") devuelve la cadena "Hola a todos" (read "(a b c) (d)") devuelve la lista (A B C) (read "1.2300") devuelve el número real 1.23 (read "87 3.2") 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: código que expresa el sistema de coordenadas en el cual se expresa el punto. conue: código que expresa el sistema de coordenadas en el cual se quiere expresar el punto 0. SCU 1. SCP 2. SCV (visualización) 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 número o lista de números de una unidad de medida a otra (Las cadenas que representan unidades de medida válidas en esta función están almacenadas en el fichero ACAD.UNT) Sintaxis: (CVUNIT <nº o lista> <cadvie> <cadnue>) cadvie: cadena de unidad de medida vieja. cadvie: cadena de unidad de medida nueva. Valor retornado: Un número o lista de números convertida a la unidad de medida nueva. (cvunit 1 "minuto" "segundo") devuelve 60.0 (cvunit 1.0 "pulgada" "cm") devuelve 2.54 (cvunit 1.0 "acre" "yarda cuadrada ") devuelve 4840.0 (cvunit '(1.0 2.5) "pie" "pulgada") devuelve (12.0 30.0) (cvunit '(1 2 3) "pie" "pulgada") devuelve (12.0 24.0 36.0)
  • 28. 24 5.7. FUNCIONES DE RELACIÓN = Comprueba la igualdad numérica Sintaxis: (= <átomo> <átomo> <átomo>……….) Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como iguales numéricamente, Nil en caso contrario. Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico ASCII (= 4 4.0) devuelve T (= 20 388) devuelve nil (= 2.4 2.4 2.4) devuelve T (= 499 499 500) devuelve nil (= "yo" "yo") devuelve T (= "yo" "tú") devuelve nil /= Comprueba la desigualdad numérica Sintaxis: (/= <átomo> <átomo>) Valor retornado: T si los dos argumentos (números o cadenas de caracteres) no se evalúan como iguales numéricamente, Nil en caso contrario (/= 10 20) devuelve T (/= "tú" "tú") devuelve nil (/= 5.43 5.44) devuelve T (/= 10 20) devuelve T < Comprueba la relación “menor que” entre los argumentos Sintaxis: (< <átomo> <átomo> <átomo>……….) Valor retornado: T si cada argumento es numéricamente menor que el argumento de su derecha y Nil en caso contrario. (< 10 20) devuelve T (< "b" "c") devuelve T (< 357 33.2) devuelve nil (< 2 3 88) devuelve T (< 2 3 4 4) devuelve nil > Comprueba la relación “mayor que” entre los argumentos Sintaxis: (> <átomo> <átomo> <átomo>……….) Valor retornado: T si cada argumento es numéricamente mayor que el argumento de su derecha y Nil en caso contrario (> 120 17) devuelve T (> "c" "b") devuelve T (> 3.5 1792) devuelve nil (> 77 4 2) devuelve T (> 77 4 4) devuelve nil (> “Pablo” “pablo”) devuelve nil
  • 29. 25 <= Comprueba la relación “menor o igual que” entre los argumentos Sintaxis: (<= <átomo> <átomo> <átomo>……….) Valor retornado: T si cada argumento es numéricamente menor o igual que el argumento de su derecha y Nil en caso contrario. (<= 10 20) devuelve T (<= "b" "b") devuelve T (<= 357 33.2) devuelve nil (<= 2 9 9) devuelve T (<= 2 9 4 5) devuelve nil >= Comprueba la relación “mayor o igual que” entre los argumentos Sintaxis: (>= <átomo> <átomo> <átomo>……….) Valor retornado: T si cada argumento es numéricamente mayor o igual que el argumento de su derecha y Nil en caso contrario. (>= 120 17) devuelve T (>= "c" "c") devuelve T (>= 3.5 1792) devuelve nil (>= 77 4 4) devuelve T (>= 77 4 9) devuelve nil AND Comprueba los valores de una serie de expresiones. (Y lógico) Sintaxis: (AND <exp> <exp> <exp>……….) Valor retornado: T si todos los argumentos se evalúan con un valor no nulo y Nil en caso contrario. (and 1.4 2 "hola") devuelve T (and 1.4 ( = 3 4)) devuelve nil OR Comprueba de izquierda a derecha una serie de expresiones hasta hallar la primera que se evalúa con un valor no nulo. (O lógico) Sintaxis: (OR <exp> <exp> <exp>……….) Valor retornado: T si alguno de los argumentos se evalúa con un valor no nulo y Nil en caso contrario. (or 1.4 2 "hola") devuelve T (or 1.4 ( = 3 4)) devuelve T (or nil 45 ) devuelve T (or nil (= 3 4)) devuelve 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) devuelve T (not (= 3 4)) devuelve T (not (= 4 4)) devuelve nil
  • 30. 26 EQ Comprueba si los valores atribuidos a ambas expresiones son idénticas Sintaxis: (EQ <exp> <exp> ) Valor retornado: T si las dos expresiones están ligadas a los mismos datos y Nil en otro caso. (setq f1 '(a b c)) (setq f2 '(a b c)) (setq f3 f2) entonces: (eq f1 f3) devuelve nil, f1 y f3 no son la misma lista (eq f3 f2) devuelve T, f3 y f2 son exactamente la misma lista EQUAL Comprueba si dos expresiones se evalúan con valores iguales Sintaxis: (EQUAL <exp> <exp> [margen de error] ) Valor retornado: T si las dos expresiones se evalúan igual y Nil en caso contrario. Si las dos expresiones son números reales se puede incluir un margen de error. (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) devuelve T (equal f3 f2) devuelve T (equal a b) devuelve nil (equal a b 0.000001) devuelve T = Comprueba la igualdad numérica Sintaxis: (= <átomo> <átomo> <átomo>……….) Valor retornado: T si todos los argumentos (números o cadenas de caracteres) se evalúan como iguales numéricamente Nil en caso contrario. Las cadenas son comparadas en esta función y en las siguientes en base a su valor numérico ASCII. (= 4 4.0) devuelve T (= 20 388) devuelve nil (= 2.4 2.4 2.4) devuelve T (= 499 499 500) devuelve nil (= "yo" "yo") devuelve T (= "yo" "tú") devuelve nil Uso de las funciones anteriores en línea de comandos: Comando: (setq a 2 b 2) 2 Comando: (= a b) T Comando: (eq a b) T Comando: (equal a b) T
  • 31. 27 5.8. FUNCIONES DE CONDICIÓN COND Lee una serie de listas. Evalúa el primer elemento de cada lista (en el orden indicado) hasta que uno de ellos devuelva un valor distinto de nil. A continuación, evalúa las expresiones que siguen a este elemento y pasa por alto las restantes listas. Sintaxis: (COND <lista1> <lista2>………..) Valor retornado: El retornado por la última expresión de la lista evaluada. Si no se evalúa ninguna lista, la función 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) la variable b se evalúa como un par punteado a = 25 => b = (a 25) la variable b se evalúa como una lista a = 20 => b = "b=20" la variable b se evalúa como un string Como se muestra, COND se puede utilizar como una función de tipo case. Es habitual utilizar T como última (por defecto) expresión de prueba. Dada una cadena de respuesta de usuario en la variable s, esta función prueba la respuesta y devuelve 1 si es Y o y, 0 si es N o n y nil en cualquier otro caso. (cond ((= s "Y") 1) ((= s "y") 1) ((= s "N") 0) ((= s "n") 0) (t nil) ) IF Evalúa una expresión Autolisp basándose en si una expresión de comprobación inicial se evalúa como no nula Sintaxis: (IF <test> <expresión si test es /= nil > [expresión si test es = nil ] ) Valor retornado: El valor retornado por expresión evaluada; nil en otro caso. (if (= 1 3) "¡¡SÍ!!" "no.") devuelve "no." (if (= 2 (+ 1 1)) "¡¡SÍ!!") devuelve "¡¡SÍ!!" (if (= 2 (+ 3 4)) "¡¡SÍ!!") devuelve nil PROGN Evalúa secuencialmente una serie de expresiones. Sintaxis: (PROGN <exp1> <exp2> ……………) Valor retornado: La última expresión evaluada. Se puede utilizar PROGN para calcular varias expresiones cuando sólo se espera una expresión. (if (= a b) (progn (princ "nA = B ") (setq a (+ a 10) b (- b 10)) ) )
  • 32. 28 5.9. FUNCIONES PARA GESTIÓN DE CICLOS REPEAT Evalúa repetidamente una serie de una o más expresiones Autolisp un número determinado de veces. Sintaxis: (REPEAT<n> <exp1> <exp2> ……………) n: Entero que indica el nº de repeticiones a realizar. Valor retornado: El resultado de la última expresión evaluada (setq a 10 b 100) (repeat 4 (setq a (+ a 10)) (setq b (+ b 100)) ) Define a como 50, b como 500 y devuelve 500 (setq L '( 1 2 3 4 5 6) n (length L) i 0 Ln nil ) (repeat n (setq elem (nth i L) elem (1+ elem) Ln (cons elem ln) i (1+ i) ) ) (setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7) (setq L '( 1 2 3 4 5 6) n (length L) Ln nil ) (repeat n (setq elem (car L) L (cdr L) elem (1+ elem) Ln (cons elem ln) ) ) (setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7) (setq pt1 (getpoint "n¿pt1?:") pt2 (getpoint "n¿pt2?:") pt3 (getpoint "n¿pt3?:") 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 polilínea que pasa por los puntos pt1 pt2 y pt3
  • 33. 29 WHILE Evalúa repetidamente una serie de una o más expresiones Autolisp basándose en si una expresión de comprobación inicial se evalúa como un valor nulo o no nulo. Sintaxis: (WHILE <test> <exp1> <exp2> ……………) Test: Expresión de comprobación, que hace que las demás expresiones se evalúen mientras ésta se mantenga distinta de Nil . Valor retornado: El resultado de la última expresión evaluada (setq a 10 ) (While (< a 100) (setq a (+ a 10)) ) Define a como 90. (setq L '( 1 2 3 4 5 6) i 0 Ln nil ) (While (setq elem (nth i L)) (setq elem (1+ elem) Ln (cons elem ln) i (1+ i) ) ) (setq L (reverse Ln)) Devuelve la lista (2 3 4 5 6 7) (setq L '( 1 2 3 4 5 6) 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) (setq pt1 (getpoint "n¿pt1?:")pt2 (getpoint "n¿pt2?:")pt3 (getpoint "n¿pt3?:") listap (list pt1 pt2 pt3) ) (Command "_pline") (While (setq pt (car listap )) (setq listap (cdr listap))) (command pt) ) (command "") Equivale a dibujar una polilínea 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 "n¿pt1?:") pt2 (getpoint "n¿pt2?:") pt3 (getpoint "n¿pt3?:") listap (list pt1 pt2 pt3) ) (command "_pline") (foreach punto listap (command punto)) (command "") Equivale a dibujar una polilínea que pasa por los puntos pt1 pt2 y pt3.
  • 34. 30 5.10. FUNCIÓN PARA CREAR FUNCIONES DE USUARIO DEFUN Define una nueva función Autolisp o una orden o comando Autocad Sintaxis (DEFUN <nombre> <( [lista-argumentos][ / símbolos locales])> [expr] ...) Nombre: el nombre de la función 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 más símbolos locales para la función. Argumentos: variables que toman valor en la llamada a la función Símbolos locales: variables que sólo tienen valor en la función que se define. La barra oblicua debe ir separada del primer símbolo local y del último argumento, si existe, por un espacio como mínimo. Si no se declara ningún argumento ni símbolo local, se debe escribir un conjunto vacío de paréntesis tras el nombre de la función. Los siguientes ejemplos de lista-argumentos muestran valores válidos y no válidos: (defun mifunc (x y) ...) La función toma dos argumentos (defun mifunc (/ a b) ...) La función tiene dos símbolos locales (defun mifunc (x / temp) ...) Un argumento, un símbolo local (defun mifunc () ...) Ningún argumento ni símbolo local Expr: Expresiones que se ejecutan en la función y que utilizan como variables: - Los argumentos de la función. - Las variables locales que tienen que tomar valor en la función y lo pierden al ejecutarse la misma. - Las variables globales definidas, bien en esta función, bien en otras y que por no haber sido definidas como locales en ninguna función tienen valor en todo el programa. Valor retornado: La función DEFUN devuelve el nombre de la función que se va a definir. Al invocar esta función, sus argumentos se evalúan y se asocian a los símbolos correspondientes. La función devuelve el resultado de la última expresión evaluada. (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") devuelve "a...b" (puntos "de" "a") devuelve "de...a" (eval temp) devuelve nil Advertencia: No se debe utilizar nunca el nombre de una función interna o un símbolo como nombre de función creada por el usuario, ya que quedaría inaccesible.
  • 35. 31 5.11. FUNCIONES GRÁFICAS ANGLE Calcula el ángulo que formaría una recta definida por dos puntos con la dirección positiva del eje X del SCP actual (si los puntos son 3D se proyectan sobre el plano de construcción actual) Sintaxis: ( ANGLE <pt1> <pt2>) Valor retornado: Un ángulo en radianes (angle '(1.0 1.0) '(1.0 4.0)) devuelve 1.5708 (angle '(5.0 1.33) '(2.4 1.33) devuelves 3.14159 DISTANCE Calcula la distancia entre dos puntos Sintaxis: ( DISTANCE <pt1> <pt2>) Valor retornado: Un número 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 construcción 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 relación 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 relación al SCP actual. El ángulo siempre se refiere al plano de construcción actual. (polar '(1 1 3.5) 0.785398 1.414214) devuelve (2.0 2.0 3.5) (polar ‘(1 1) (/ pi 2) 3) devuelve (1.0 4.0) INTERS Calcula el punto de intersección entre dos líneas Sintaxis: ( INTERS <pt1> <pt2> <pt3> <pt4> [extend]) Valor retornado: Un punto que indica el punto de intersección de la línea definida por pt1 y pt2 y la línea definida por pt3 y pt4, si no se encuentra ningún punto de intersección la función retorna un nil. Extend: Si extend se evalúa como nil las líneas se prolongan hasta encontrar el punto de intersección, en caso contrario o si no se codifica, sólo se busca la intersección 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 intersección 3D. Si hay algún punto 2D, inters proyecta las líneas sobre el plano de construcción actual y sólo busca una intersección 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) devuelve nil (inters a b c d T) devuelve nil (inters a b c d nil) devuelve (4.0 4.0)
  • 36. 32 5.12. FUNCIONES DE ENTRADA INTERACTIVA GETPOINT Detiene la ejecución 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 números reales. El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST. (setq p (getpoint)) (setq p (getpoint "¿Dónde? ")) (setq p (getpoint '(10 20)) respuesta :@40,20 valor retornado: (50.0 40.0 0.0) GETDIST Detiene la ejecución del programa para que el usuario introduzca una distancia Sintaxis: (GETDIST [pt] [mensaje]) pt: punto de base opcional mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud de la distancia Valor retornado: Un número real. El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETDIST. (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 ejecución 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 función GETANGLE mide los ángulos a partir de cero radianes (definidos mediante la variable de sistema ANGBASE) aumentando en dirección opuesta a las agujas del reloj. El ángulo resultante se expresa en radianes con respecto al plano de construcción actual (el plano XY del SCP actual, con la elevación actual). El usuario no puede escribir otra expresión AutoLISP como respuesta a una petición GETANGLE. Para especificar un ángulo, el usuario debe escribir un número en el formato actual de unidades angulares de AutoCAD. Aunque este formato puede utilizar grados, grados centesimales o cualquier otra unidad, esta función siempre devuelve el ángulo en radianes. El usuario también puede designar dos posiciones 2D en la pantalla gráfica para indicar el ángulo a AutoLISP. AutoCAD dibuja una línea elástica desde el primer punto hasta la posición del cursor en cruz con el fin de facilitar al usuario la visualización del ángulo.
  • 37. 33 Es importante comprender la diferencia entre el ángulo indicado y el que devuelve GETANGLE. Los ángulos que se transmiten a GETANGLE se basan en los valores actuales de ANGDIR y ANGBASE. Sin embargo, una vez que se especifica el ángulo, éste se mide en dirección opuesta a las agujas del reloj (sin tomar en cuenta el valor de ANGDIR), con cero radianes como valor actual de ANGBASE. Los siguientes ejemplos de código muestran cómo se pueden utilizar diferentes argumentos. (setq ang (getangle)) (setq ang (getangle '(1.0 3.5))) (setq ang (getangle "¿Hacia dónde? ")) (setq ang (getangle '(1.0 3.5) "¿Hacia dónde? ")) GETORIENT Detiene la ejecución 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 función 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 introducción del ángulo por parte del usuario todavía se basa en los parámetros actuales de ANGDIR y ANGBASE. . La función GETORIENT mide los ángulos con una dirección 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 construcción 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 dirección para los ángulos que se incrementan, se debe utilizar el comando UNIDADES o las variables de sistema ANGBASE y ANGDIR para realizar la conversión necesaria. Se recomienda el uso de GETANGLE para obtener un valor de rotación (un ángulo relativo). Y de GETORIENT para obtener una orientación (un ángulo absoluto). GETCORNER Detiene la ejecución del programa para que el usuario introduzca un punto, y traza un rectángulo de “banda elástica” en la pantalla a medida que el usuario mueve el dispositivo señalador Sintaxis: (GETCORNER <pt> [mensaje]) pt: Primera esquina del rectángulo. mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud de la otra esquina. Valor retornado: El punto introducido por el usuario
  • 38. 34 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") Devuelve el valor actual para el tipo de punto (getvar "area") Devuelve el valor del último área calculada por Autocad (getvar "perimeter") Devuelve el valor del último perímetro calculado por Autocad. GETINT Detiene la ejecución del programa para que el usuario introduzca un número entero. Sintaxis: (GETINT [mensaje]) mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud del entero Valor retornado: El entero introducido por el usuario. El rango de valores pasados a GETINT puede ir de -32,768 a +32,767. El usuario no puede escribir otra expresión de AutoLISP como respuesta a una petición de GETINT. (setq num (getint)) (setq num (getint "Escriba un número: ")) GETREAL Detiene la ejecución del programa para que el usuario introduzca un número real Sintaxis: (GETREAL [mensaje]) mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud del número real Valor retornado: El real introducido por el usuario. (setq val (getreal)) (setq val (getreal "Factor de escala: ")) GETSTRING Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres Sintaxis: (GETSTRING [espacio] [mensaje]) Espacio: Si este argumento es distinto de nil la cadena introducida puede contener espacios en blanco. (y debe finalizarse con RETURN ). mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud de la cadena Valor retornado: La cadena introducida entrecomillada o una cadena vacía (“”) si el usuario pulsó Enter sin teclear caracteres. Si tiene más de 132 caracteres, la cadena sólo devuelve estos caracteres. Si contiene el carácter de contrabarra (), éste se convierte en dos caracteres de contrabarra (). De esta manera, el valor resultante puede incluir caminos de nombre de archivo a los que tienen acceso otras funciones. (setq s (getstring "Escriba su nombre ")) Si se responde Juan se define s como "Juan" (setq s (getstring T "Escriba su nombre completo: ")) Si responde Juan Díaz Pérez se define como "Juan Díaz Pérez" (setq s (getstring "Nombre de archivo: ")) Si responde acadmidibuj se define como "acadmidibuj"
  • 39. 35 GETKWORD Detiene la ejecución del programa para que el usuario introduzca una cadena de caracteres. Esta función comprueba la validez de lo introducido basándose en una lista de palabras válidas establecidas usando la función INIGET Sintaxis: (GETKWORD [mensaje]) mensaje: cadena opcional que será presentada en el área de órdenes/peticiones de la pantalla, en el momento de la solicitud de la cadena. Valor retornado: La cadena introducida o Nil si el usuario pulsó Enter sin teclear caracteres AutoCAD lo intenta de nuevo si la entrada no es una palabra clave. Si se trata de una entrada nula ( RETURN ), GETKWORD devuelve nil (siempre que se admitan entradas nulas). Esta función también devuelve nil si antes no se ha realizado una llamada a INITGET que establezca una o varias palabras clave. El ejemplo siguiente muestra una llamada inicial a initget que define una lista de palabras clave (Sí y No) y no admite entradas nulas (valor en bits igual a 1) en la siguiente llamada a getkword: (initget 1 "Sí No") (setq x (getkword "¿Seguro? (Sí o No) ")) Este mensaje solicita datos del usuario y define el símbolo x como Sí o No, según la respuesta proporcionada. Si ésta no coincide con ninguna de las palabras clave o el usuario escribe un valor nulo, AutoCAD vuelve a mostrar la cadena indicada en el argumento solicitud. Si no se especifica este argumento, AutoCAD muestra lo siguiente: Inténtelo de nuevo: INITGET Establece las palabras clave que han de usarse con la siguiente llamada a una función introducida por el usuario. Las funciones que toman en consideración las palabras clave son getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel y nentselp. La función getstring es la única función introducida por el usuario que no las admite. Sintaxis: (INITGET [bits] [cadena]) Bits: El argumento bits es un número entero binario que admite o rechaza determinados tipos de datos de usuario. Algunos de los valores que puede tomar junto a su significado asociado: 1: no permite nulos 2: no permite cero 4: no permite negativos 8: no chequea límites del dibujo 64: devuelve una distancia 2D, en lugar de 3D. Cadena: El argumento cadena define una lista de palabras clave. Valor retornado: La función initget siempre devuelve nil. Para más información sobre la función se recomienda consultar el manual de personalización de Autocad
  • 40. 36 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 ""> <"extensión" o "" (para. *)> <parámetros>) Parámetros: dialogo determina el nombre del cuadro de diálogo, nombre de Fichero por defecto especifica el nombre de archivo que se va a utilizar por defecto extensión es la extensión por defecto del nombre del archivo. Si extensión se transmite como una cadena nula [""], utiliza por defecto * (para todos los tipos). parámetros es un valor entero (un campo codificado en bits) que controla el funcionamiento del cuadro de diálogo. Para definir varias condiciones simultáneamente, se añaden los valores en conjunto y se crea un indicador con un número 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 diálogo muestra un mensaje de error en la parte inferior. Si se define este bit y el usuario elige un archivo existente, AutoCAD presenta una casilla de advertencia y ofrece la posibilidad de seguir o cancelar la operación. Valor del indicador = 2 (bit 1):Desactiva el botón Teclearlo. Este bit se define si se llama a la función GETFILED mientras otro cuadro de diálogo está activo (en caso contrario, obliga a cerrar el otro cuadro de diálogo).Si no se define este bit, se activa el botón Teclearlo. Cuando el usuario selecciona el botón, el cuadro de diálogo desaparece y GETFILED devuelve 1. Valor del indicador = 4 (bit 2):Permite al usuario escribir una extensión de nombre de archivo arbitraria o bien no escribir ninguna. Si no se define este bit, GETFILED sólo acepta la extensión especificada en el argumento ext, y si el usuario no la escribe en la casilla de texto File, la añade al nombre del archivo. Valor del indicador = 8 (bit 3): Si se define este bit y no se define el bit 0, GETFILED inicia en la biblioteca una búsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el orden de búsqueda en la estructura, descompone el camino y sólo devuelve el nombre del archivo. Esto no ocurre si los archivos que se buscan tienen el mismo nombre pero se encuentran en distintos directorios. Si no se define este bit, GETFILED devuelve el nombre completo del archivo, incluido el nombre del camino. Se define este bit si se utiliza el cuadro de diálogo para abrir un archivo existente cuyo nombre desea guardar en el dibujo (u otra base de datos). Si el usuario especifica un nombre de archivo en el cuadro de diálogo, GETFILED devuelve una cadena que corresponde al nombre del archivo, en caso contrario, devuelve nil. La siguiente llamada a getfiled presenta el cuadro de diálogo Seleccionar un archivo Lisp: (getfiled "Seleccionar un archivo Lisp" "/acadr14/support/" "lsp" 8) La función GETFILED muestra un cuadro de diálogo con una lista que incluye todos los archivos con la extensión especificada que están disponibles. Puede utilizar este cuadro de diálogo para buscar por los distintos directorios y unidades, seleccionar un archivo existente o especificar el nombre de uno nuevo.
  • 41. 37 COMMAND Ejecuta órdenes Autocad Sintaxis: (COMMAND <"nombre de la orden"> [argumentos válidos].....) Valor retornado: nil Los argumentos de la función command pueden ser cadenas, números reales, números enteros o puntos, según solicite la secuencia de mensajes del comando ejecutado. Una cadena nula ("") equivale a pulsar RETURN en el teclado. La función command sin argumentos equivale a pulsar ESC y cancela la mayoría de los comandos de AutoCAD. La función command devuelve nil. La función command evalúa los distintos argumentos y los envía a AutoCAD cada vez que aparece un mensaje que los solicita. Presenta como cadenas los nombres de los comandos y las opciones, como listas de dos números reales los puntos 2D y como listas de tres números reales los puntos 3D. (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 Diámetro/<Radio> <10>: d Diámetro <20>: 40 Comando: nil Si el programa lisp se va a utilizar con versiones de AutoCAD para idiomas extranjeros, los nombres de los comandos deben ir precedidos de un subrayado ( _ ), para que puedan traducirse. Los comandos que se ejecutan mediante la función command no se reproducen en la línea 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 función 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 función command de AutoLISP. Se crea un grupo DESHACER explícitamente alrededor de cada comando utilizado con la función command. Si un usuario escribe H (o DESHACER) después de ejecutar una rutina de AutoLISP, sólo se deshará el último comando. Si se introduce DESHACER más veces, se retrocederá por los comandos utilizados en dicha rutina. Si se desea que un grupo de comandos se considere un grupo (o toda la rutina), se utilizan las opciones Inicio y Fin de DESHACER. Si un comando de AutoCAD está activo y el símbolo PAUSE se encuentra predefinido como un argumento de la función command, esta función se interrumpirá para que el usuario pueda escribir información. Ejemplo ejecutado a nivel de línea de comandos: Comando: (setq centro '(10 20)) (10 20) Comando: (command "circulo" centro PAUSE "linea" centro PAUSE "") circulo 3P/2P/TTR/<centro>: Diámetro/<Radio>: Comando: linea Desde el punto: Al punto:
  • 42. 38 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") devuelve nil (osnap p7 "fin") devuelve nil Cambiando la variable APERTURE: (osnap p5 "int") devuelve nil (osnap p7 "fin") devuelve p4
  • 43. 39 5.13. FUNCIONES PARA GESTIÓN DE FICHEROS LOAD Carga un archivo Autolisp en la memoria y evalúa las expresiones en el archivo. Sintaxis: (LOAD <"nombre del fichero"> [si falla] ) nombre de fichero: cadena de caracteres con el nombre, sin extensión .lsp, del fichero. Si no se indica ningún camino se busca el fichero según el camino de acceso a bibliotecas Autocad. . Una barra oblicua (/) o dos contrabarras () son delimitadores de directorio válidos. Si falla: valor vuelto por la función en el caso de que la carga del fichero fracase. Si no se proporciona este argumento, la función presenta un mensaje de error AutoLISP Valor retornado: El de la última expresión evaluada, si la carga es buena. Los ficheros que se quiere sean cargados al iniciarse la sesión del editor de dibujo tendrán que estar especificados en el fichero ACAD.LSP que Autocad carga automáticamente. Estudiar este ejemplo después de ver la función DEFUN (defun MI-FUNC1 (x) ...cuerpo de la función...) (defun MI-FUNC2 (x) ...cuerpo de la función. ) y el archivo prueba2.lsp no existe, entonces: (load "/luis/prueba1") devuelve MI-FUNC2 (load "luisprueba1") devuelve MI-FUNC2 (load "/luis/prueba1" "mal") devuelve MI-FUNC2 (load "prueba2" "mal") devuelve "mal" (load "prueba2") produce un error de AutoLISP Cuando un programa define varias funciones deben estar todas codificadas en un único fichero que se cargará con la función 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 extensión del archivo que debe abrirse. clave de acceso: cadena de una letra minúscula, es la etiqueta de lectura/escritura y debe contener una cadena de una sola letra en minúsculas. En la tabla siguiente se describen las letras de modo válidas. "r": Abre un fichero para lectura "w": Abre un fichero para escritura "a": Abre un fichero para escribir añadiendo nuevos datos al final del mismo. Sitúa 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 símbolo 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, código ASCII decimal 26) al final del texto. Cuando lee un archivo de texto, el DOS devuelve un estado de fin de archivo si encuentra una marca CTRL Z, aunque a ésta le sigan más datos. Si va a utilizar el modo "a" de OPEN para añadir datos a archivos creados en otros programas, cerciórese de que éstos no insertan marcas CTRL Z al final de sus archivos de texto.
  • 44. 40 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")) devuelve <Archivo #nnn> (setq f (open "xnueva.tst" "w")) devuelve <Archivo #nnn> CLOSE Cierra un archivo abierto Sintaxis: (CLOSE <símbolo correspondiente al descriptor de fichero>) El argumento símbolo correspondiente al descriptor de fichero es un descriptor de archivo que se obtiene mediante la función OPEN. Tras utilizar la función CLOSE, aunque el descriptor de fichero no cambia, deja de ser válido. Los datos añadidos a un archivo abierto no se escriben realmente hasta que se cierra el archivo. Valor retornado: nil si descriptor_archivo es válido, en caso contrario devuelve un mensaje de error. Por ejemplo, el siguiente código calcula el número de líneas del archivo unarchivo.txt y define la variable ct en ese número. (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 búsqueda de archivos de Autocad Sintaxis: (FINDFILE <"nombre_archivo">) Valor retornado: una cadena de caracteres con el nombre completo del archivo indicando la ruta de localización. La función FINDFILE no asigna el tipo o extensión 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 función 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 función 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 sólo existe en el directorio/acad/support. (findfile "xyz.txt") devuelve "/acad/support/xyz.txt" Si ninguno de los directorios del camino de búsqueda de la biblioteca contiene el archivo no esta. (findfile "noesta") devuelve nil
  • 45. 41 5.14. FUNCIONES DE LECTURA Y ESCRITURA 5.14.1. ESCRITURA PRIN1 Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo abierto en modo de escritura. Sintaxis: (PRIN1 [expresión] [descriptor de fichero]) Valor retornado: el argumento de la expresión. Es posible llamar a la función prin1 sin argumentos, en cuyo caso devuelve (e imprime) la cadena nula. (setq a 123 b '(a)) (prin1 'a) imprime A y devuelve A (prin1 a) imprime 123 y devuelve 123 (prin1 b) imprime (A) y devuelve (A) (prin1 "Hola") imprime "Hola" y devuelve "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 válido para un archivo abierto para escritura, (prin1 "Hola" f) escribirá "Hola" en el archivo indicado y devolverá "Hola". PRINC Imprime una expresión AutoLISP en el área de órdenes o la escribe en un archivo. (La diferencia con PRIN1 es que PRINC evalúa los caracteres de control que aparezcan en la expresión.). Sintaxis: (PRINC [expresión] [descriptor de fichero]) Valor retornado: el argumento de la expresión. PRINT Imprime un salto de línea, una expresión AutoLISP y un espacio en el área de órdenes o lo escribe en un archivo. Sintaxis: (PRINT [expresión] [descriptor de fichero]) Valor retornado: el argumento de la expresión PROMPT Presenta una cadena de caracteres en el área de órdenes. (Evalúa 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 más útil princ. (prompt "Nuevo valor: " ) muestra Nuevo valor: en la(s) pantalla(s) WRITE-CHAR Escribe un solo carácter en el área de órdenes o bien en un fichero abierto. Sintaxis: (WRITE-CHAR <num> [descriptor de fichero]) El argumento núm es el código ASCII decimal del carácter que debe escribirse. Valor retornado: El código 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.
  • 46. 42 WRITE-LINE Escribe una cadena de caracteres en al área de órdenes o bien en un archivo (evalúa caracteres de control. Sintaxis: (WRITE-LINE <”cadena”> [descriptor de fichero]) Valor retornado: La cadena de caracteres. (write-line "Prueba" f) escribe Prueba y devuelve "Prueba" TERPRI Imprime un salto de línea 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 código ASCII para el carácter leído. Por ejemplo, si se tiene en cuenta que el búfer de entradas por teclado está vacío, (read-char) espera a que se escriban datos. Si introduce los caracteres ABC seguidos de RETURN, read-char devuelve 65 (el código ASCII decimal correspondiente a la letra A). Las tres llamadas siguientes a read-char devuelven 66, 67 y 10 (línea nueva), respectivamente. Si se efectúa otra llamada, read- char vuelve a esperar a que se escriban datos. READ- LINE Lee una cadena de caracteres procedentes del bufer del teclado o de un archivo abierto en modo de lectura. Sintaxis: (READ-LINE [descriptor de fichero]) Valor retornado: la cadena leída. (Cuando se alcanza el final de un archivo de lectura el valor retornado es nil ) Por ejemplo, si tiene en cuenta que f es un puntero de archivo abierto válido, (read-line f) devuelve la siguiente línea de entrada del archivo, o nil si ha llegado al final del archivo.
  • 47. 43 Ejemplo ejecutado a nivel de línea de órdenes de Autocad: (SETQ A 10 B “HOLA”) “HOLA” (PRIN1 A) 1010 (PRIN1 “nCASA”) “nCASA”“nCASA” (PRINC A) 1010 (PRINC “nCASA”) “CASA“nCASA” (PRINT A) 10 10 (PRINT “nCASA”) “nCASA” “nCASA” (PROMPT “nCASA”) CASAnil (WRITE-CHAR A) 10 (WRITE-CHAR 67) C67 (WRITE-LINE B) HOLA “HOLA” (WRITE-LINE “nCASA”) CASA “CASA”
  • 48. 44 5.15. FUNCIONES DE ORDENACIÓN ACAD_STRLSORT Ordena alfabéticamente listas de cadenas de caracteres Sintaxis: (ACAD_STRLSORT lista) Valor retornado: La lista con las cadenas ordenadas alfabéticamente. Si la lista no contiene cadenas o no hay memoria suficiente para realizar la ordenación, la función 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 función de comparación dada. En determinados casos puede eliminar los objetos duplicados. Sintaxis: (VL-SORT lista función) Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio de ordenación. Valor retornado: La lista con los elementos de la lista original ordenados, aunque no se garantiza la conservación de todos los elementos originales (elimina las cadena y los enteros duplicados). (vl-sort '(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 función de comparación dada, y devuelve sus índices. No elimina duplicados. Sintaxis: (VL-SORT-I lista función) Puede emplearse como función de comparación cualquiera que acepte dos argumentos y devuelva T (u otro valor distinto de Nil) cuando el primer argumento precede al segundo conforme al criterio de ordenación. Valor retornado: Una lista que contiene los índices de los elementos de la lista, ordenados conforme al criterio establecido por la función de comparación. (vl-sort-i '("a" "d" "f" "c") '>) devuelve: (2 1 3 0) El orden en la lista ordenada sería: "f" "d" "c" "a"; donde "f" es el tercer elemento (índice 2) en la lista original, "d" es el segundo elemento (índice 1) en la lista, y así sucesivamente. (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 función 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)
  • 49. 45 5.16. FUNCIONES DE CONTROL DE PANTALLA REDRAW Redibuja la pantalla de presentación (o las entidades especificadas) Sintaxis: (REDRAW ) (sintaxis simplificada para el redibujado de la pantalla) Valor retornado: Nil GRAPHSCR Fuerza la presentación de pantalla gráfica 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 números de identificación de las ventanas gráficas Sintaxis: (VPORTS) Valor retornado: Una lista de sublistas donde los elementos de cada sublista son: 1. El número de identificación de cada ventana gráfica. 2. Coordenadas de la esquina inferior izquierda (coordenadas normalizadas). 3. Coordenadas de las esquina superior derecha..
  • 50. 46 5.17. OTRAS FUNCIONES DE UTILIDAD EVAL Evalúa expresiones Sintaxis:(EVAL <expresión>) Valor retornado: El valor retornado por la expresión evaluada En la línea de órdenes la abreviatura es el signo ! (setq a 123) (setq b 'a) entonces: (eval 4.0) devuelve 4.0 (eval (abs -10)) devuelve 10 (eval a) devuelve 123 (eval b) devuelve 123 QUOTE Procesa una instrucción sin evaluarla Sintaxis:(QUOTE <expresión>) Valor retornado: La expresión sin evaluarla La sintaxis alternativa es el apóstrofo. No puede usarse en el indicador COMMAND. (quote a) devuelve A (quote cat) devuelve CAT (quote (a b)) devuelve (A B) 'a devuelve A 'cat devuelve CAT '(a b) devuelve (A B) Los tres últimos ejemplos no tienen efecto si se introducen directamente desde el teclado como respuesta a un mensaje de AutoCAD. NULL Comprueba si una expresión se evalúa como nulo Sintaxis: (NULL <expresión>) Valor retornado: T si la expresión evaluada es nulo y nil en caso contrario. (setq a 123 b "cadena" c nil) (null a) devuelve nil (null b) devuelve nil (null c) devuelve T (null ' ) devuelve T QUIT Fuerza a la rutina actual a abandonar el procesamiento. Sintaxis: (QUIT) Valor retornado: El mensaje “”quit/exit abort”” (abandonar/salir abortar)
  • 51. 47 TEXTBOX Mide un objeto de texto designado y devuelve las coordenadas diagonales del cuadro donde está contenido el texto Sintaxis: (TEXTBOX <lista_e>) lista_e: es una lista de definición de entidad en la forma devuelta por ENTGET y debe definir un objeto de texto. Debe definir un objeto de texto. Si en lista_e se omiten los campos que definen parámetros de texto distintos del texto en sí, se utilizan los valores actuales (por defecto). Valor retornado: Si textbox se ejecuta satisfactoriamente, devuelve una lista de dos puntos, en caso contrario devuelve nil. Lo mínimo que TEXTBOX acepta como lista es el texto en sí. (textbox '((1 . "Hola mundo."))) puede devolver ((0.0 0.0 0.0) (0.8 0.2 0.0))
  • 52. 48 6. FUNCIONES AVANZADAS DE PROGRAMACIÓN AUTOLISP 6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIÓN AutoLISP LISP BÁSICO: El objetivo ha sido la incorporación de ALTAS en la base de datos geométrica. La gran limitación consiste, por consiguiente, en plantear MODIFICACIONES. LISP AVANZADO: Resuelve el problema anterior proporcionando formas de conexión con el metaarchivo de información gráfica. 6.2. CONCEPTOS BÁSICOS Conjunto designado: Conjunto de entidades designado, bien, interactivamente, bien, automáticamente y retenido como una variable en la corriente del programa. Nombre de entidad: clave alfanumérica asociada a cada entidad del dibujo en el formato interno. (puntero capaz de producir una lectura en la base de datos del dibujo) <Nombre de objeto: 3c50500> Registro de entidad: Información relativa a la entidad estructurada como una lista de asociaciones que utilizan como claves los códigos estudiados para la estructura interna en el formato DXF. Definición de una línea 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 línea 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))
  • 53. 49 6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS - Creación del conjunto designado: (SETQ) Creación interactiva: SSGET Creación automática: SSGET "X" filtros Modos de designación de Autocad - Obtención de los nombres de entidad. (SETQ) SSLENGTH SSNAME SSMEMB SSADD SSDEL - Obtención del registro de entidad. (SETQ) ENGET - Gestión de subentidades (entidades compuestas) Polilíneas => Vértices Bloques con atributos => Atributos (SETQ) ENTLAST ENTNEXT ENTSEL ENTDEL - Manipulación del registro de entidad: ASSOC CONS SUBST Órdenes relacionadas con la manipulación de listas - Creación de una nueva entidad: ENTMAKE - Modificación de la información del registro y regeneración del dibujo: ENTMOD ENTUPD (entidades compuestas).
  • 54. 50 6.4. DESCRIPCIÓN DE LAS FUNCIONES SSGET Solicita al usuario que designe objetos (entidades) y devuelve un conjunto de selección (un puntero a la información del conjunto). Sintaxis: (SSGET [modo] [pt1 [pt2]] [lista_pt] [lista_filtros]) Modo: es una cadena que especifica el método de designación de objetos. Los modos válidos son "_W", "_WP", "_C", "_CP", "_L", "_P", "_I" y "_F", que corresponden a los métodos de designación Ventana, PolígonoV, Captura, PolígonoC, Ultimo, Previo, Implícito y Borde. Otro valor optativo de modo es "X", que selecciona toda la base de datos. pt1 y pt2: especifican puntos relevantes para la designación. Introducir un punto sin ningún argumento modo equivale a seleccionar un objeto designando un solo punto. Lista_pt: especifican puntos relevantes para la designación para los casos en que sea necesario. lista_filtros: es una lista de asociaciones que especifica propiedades de objeto. Los objetos que coinciden con la lista_filtros se añaden al conjunto de selección. Si se omiten todos los argumentos, SSGET muestra la solicitud Designar objetos para que el conjunto de selección pueda construirse de forma interactiva. Valor retornado: un conjunto de selección (un puntero a la información del conjunto) Los conjuntos de selección pueden contener objetos de los espacios papel y modelo, pero cuando el conjunto se utiliza en una operación, los objetos del espacio no activo se descartan. Los conjuntos de selección devueltos por SSGET sólo contienen entidades principales (ningún atributo ni vértice de polilínea). Ejemplos de uso de SSGET (ssget): Solicita al usuario que realice una designación general de objetos y los incluye en un conjunto de selección (ssget "_P"): Crea un conjunto de selección con los últimos Objetos seleccionados (ssget "_L"): Crea un conjunto de selección con los últimos objetos visibles añadidos a la base de datos (ssget '(2 2)): Crea un conjunto de selección con un objeto que pasa por el punto (2,2) (ssget "_W" '(0 0) '(5 5)): Crea un conjunto de selección con los objetos incluidos en la ventana desde (0,0) hasta (5,5). (ssget "_C" '(0 0) '(1 1)): Crea un conjunto de selección con los objetos que pasan por el rectángulo de (0,0) a (1,1) (ssget "X"): Crea un conjunto de selección con todos los objetos de la base de datos (ssget "X" lista_filtros): Analiza la base de datos y crea un conjunto de selección de objetos que coinciden con la lista_filtros. (ssget lista_filtros ): Solicita al usuario que realice una selección general de objetos y coloca sólo los objetos que coinciden con y los Incluye en un conjunto de selección (ssget "_P" lista_filtros): Crea un conjunto de selección con los últimos objetos seleccionados que coinciden con la lista_filtros
  • 55. 51 Los siguientes ejemplos de ssget requieren que se suministre una lista de puntos a la función. La variable lista_pt no puede contener puntos que definan segmentos con longitud cero. (setq lista_pt '((1 1)(3 1)(5 2)(2 4)) ) (ssget "_WP" lista_pt): Crea un conjunto de selección con todos los objetos incluidos en el polígono definido por lista_pt (ssget "_CP" lista_pt): Crea un conjunto de selección con todos los objetos que pasan por el polígono y los que están dentro definidos por lista_pt (ssget "_F" lista_pt): Crea un conjunto de selección con todos los objetos que intersecan el borde definido por lista_pt (ssget "_WP" lista_pt lista_filtros): Crea un conjunto de selección con todos los objetos dentro del polígono definido por lista_pt que coinciden con la lista_filtros AutoLISP no permite manejar más de 128 conjuntos abiertos a la vez. Si se alcanza este límite, AutoCAD se niega a crear más conjuntos de selección y devuelve nil a todas las llamadas SSGET. SSLENGTH Devuelve el número entero correspondiente al número de entidades del conjunto designado indicado. Sintaxis: ( SSLENGTH < conjunto designado> ) Valor retornado: Un número entero. (setq cs (ssget "U")) Coloca el último objeto en el conjunto de selección cs (sslength cs) devuelve 1 SSNAME Devuelve el nombre de entidad de la entidad perteneciente al conjunto designado indicado y que ocupa la posición que especifica el índice. Sintaxis: ( SSNAME < conjunto designado> < índice> ) El argumento índice debe ser un número entero. Si es negativo o mayor que la entidad con el número más alto del conjunto de selección, 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 información de la entidad) (setq cs (ssget)) Crea un conjunto de selección llamado cs (setq ent1 (ssname cs 0)) Obtiene el nombre de la primera entidad de cs (setq ent1 (ssname cs 3)) Obtiene el nombre de la cuarta entidad de cs SSMEMB Comprueba si un objeto (entidad) forma parte de un conjunto de selección 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 selección cs1 pero e2 no, entonces (ssmemb e1 cs1) devuelve el nombre de entidad e1 (ssmemb e2 cs1) devuelve nil