Apuntes Lisp

68
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

Transcript of Apuntes Lisp

  • PROGRAMACIN AUTOLISP

    (PERSONALIZACIN

    DE AUTOCAD)

    MILAGROS CANGA VILLEGAS

    JOS ANDRS DAZ SEVERIANO

    Departamento de Ingeniera Geogrfica y Tcnicas de Expresin Grfica

    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 rectasparalelas

    a/3

    a/3

    Formashomotticas

    rad

    Pa

    P

    cen

    Figura 1: Definicin geomtrica

    Figura 2: Mosaico

  • No basta el recuerdo Cuando an queda tiempo (Luis Cernuda) El hoy es malo, pero el maana ... es mo (Antonio Machado)

  • i

  • ii

    INDICE:

    1. PRESENTACIN GENERAL DE AUTOLISP 1 2. ELEMENTOS DEL LENGUAJE Y TIPOS DE DATOS 2

    2.1. Nmeros 2 2.2. Cadenas 2 2.3. Listas 3 2.4. Smbolos y variables 3 2.5. Conjuntos de seleccin 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 CODIFICACIN DE UNA RUTINA LISP 6 5. FUNCIONES AUTOLISP 7

    5.1. FUNCIONES ARITMTICAS 8 5.2. FUNCIONES DE ASIGNACIN 12 5.3. FUNCIONES PARA MANEJAR CADENAS DE TEXTO 13 5.4. FUNCIONES PARA GESTIN DE LISTAS 15

    5.4.1. CREACIN DE LISTAS 15 5.4.2. EXTRACCIN DE ELEMENTOS DE UNA LISTA 16 5.4.3. MANIPULACIN DE LISTAS 18

    5.5. FUNCIONES MONOLNEA 20 5.6. FUNCIONES DE CONVERSIN Y TRANSFORMACIN 21 5.7. FUNCIONES DE RELACIN 24 5.8. FUNCIONES DE CONDICIN 27 5.9. FUNCIONES PARA GESTIN DE CICLOS 28 5.10. FUNCIN PARA CREAR FUNCIONES DE USUARIO 30 5.11. FUNCIONES GRFICAS 31 5.12. FUNCIONES DE ENTRADA INTERACTIVA 32 5.13. FUNCIONES PARA GESTIN 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 ORDENACIN 44 5.16. FUNCIONES DE CONTROL DE PANTALLA 45 5.17. OTRAS FUNCIONES DE UTILIDAD 46

    6. FUNCIONES AVANZADAS DE PROGRAMACIN AUTOLISP 48 6.1. OBJETIVOS Y ENTORNO DE LA PROGRAMACIN AutoLISP 48 6.2. CONCEPTOS BSICOS 48 6.3. FORMA DE TRABAJO Y FUNCIONES UTILIZADAS 49 6.4. DESCRIPCIN DE LAS FUNCIONES 50

    7. CDIGOS Y MENSAJES DE ERROR DE AUTOLISP 59 8. NDICE DE FUNCIONES 63 9. BIBLIOGRAFA BSICA 63

  • 1

    1. PRESENTACIN GENERAL DE AUTOLISP

    AutoLISP es una adaptacin del lenguaje de programacin LISP y forma parte integral del paquete AutoCAD. Autolisp es un pequeo subconjunto del CommonLISP, y por ello se ajusta muy estrechamente a la misma sintaxis y convenciones, pero consta de muchas funciones especficas de AutoCAD.

    AutoLISP es la ms potente herramienta para optimizar la ejecucin de AutoCAD. Le habilita para

    automatizar AutoCAD incluso ms all de lo que puede llevar a cabo usando macros. Las rutinas AutoLISP tienen aplicaciones como: - La creacin de nuevas y nicas rdenes AutoCAD. - La insercin de funciones especiales para dibujar y para calcular. - Anlisis detallados de grficos y de dibujos dentro del editor de dibujos de AutoCAD.

    Con AutoLISP, se pueden escribir programas y generar funciones de macros con un lenguaje potente y

    de alto nivel, apropiado para las aplicaciones de grficos. AutoLISP es flexible y fcil de aprender y utilizar para los no-programadores, quienes al aprender AutoLISP slo necesitan conceptos bsicos de programacin, tales como:

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

    El cdigo de AutoLISP no se compila 1, se puede teclear el cdigo en la lnea de comandos y ver los

    resultados inmediatamente hacindose ms sencilla la introduccin a este lenguaje para los no iniciados. En un segundo nivel de aprendizaje resulta mucho ms fcil realizar pruebas y depurar cuando este cdigo se carga desde un archivo, en lugar de volverlo a escribir cada vez que se realiza alguna modificacin.

    El cdigo de AutoLISP se almacena en archivos de texto ASCII con la extensin *. lsp. La sintaxis de las

    expresiones de AutoLISP escritas en los archivos es bsicamente la misma que se utiliza para escribirlas en la solicitud de comando.

    1 Se trabaja a este nivel docente sin compilar. Se recomienda consultar los manuales de VisualLISP de la versin 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 cdigo.

    Este cdigo se caracteriza especialmente porque aparece entre parntesis. Para poder utilizar plenamente AutoLISP, es necesario entender las diferencias entre los distintos tipos

    de datos y el modo en que deben utilizarse. Los elementos del lenguaje y sus convenciones son las siguientes:

    2.1. Nmeros Nmeros enteros Los enteros son nmeros sin coma decimal. Los enteros de AutoLISP son nmeros de 32 bits con signo

    cuyos valores estn comprendidos entre +2 147 483 648 (231) y 2 147 483 647. Aunque AutoLISP utiliza internamente valores de 32 bits, los que se transmiten de AutoLISP a AutoCAD y viceversa estn limitados a 16 bits. Por tanto, no pueden transmitirse a AutoCAD valores superiores a +32 767 (215) ni valores inferiores a 32 768. Los enteros que se utilizan de forma explcita en expresiones de AutoLISP se conocen como constantes. Nmeros como 2, -56, y 1 200 196 son enteros vlidos de AutoLISP.

    Nmeros reales Los nmeros reales son aquellos que contienen la coma decimal. Los comprendidos entre -1 y 1 deben

    empezar por cero. (No se admiten formatos como .2 2.) Los nmeros reales se almacenan en formato de coma flotante de doble precisin, lo cual proporciona

    una precisin mnima de 14 dgitos significativos, aunque el rea de comandos de AutoCAD muestra slo 6. Los nmeros reales pueden expresarse en notacin cientfica, que consta de una e o E opcional seguida por el exponente del nmero (por ejemplo, 0.0000041 es lo mismo que 4.1e-6).

    Los nmeros reales que se utilizan de forma explcita en expresiones de AutoLISP se conocen como

    constantes. Nmeros como 3,1, 0,23, -56,123, y 21 000 000.0 son nmeros reales vlidos de AutoLISP.

    2.2. Cadenas Las cadenas son grupos de caracteres delimitados por comillas. Dentro de las cadenas que aparecen entre comillas: la contrabarra (\) permite incluir caracteres de

    control (o cdigos de escape): \\ para el carcter \ \e para el carcter ESC \n para el salto de lnea \r para RETURN \t para tabulador Las cadenas individuales tienen una limitacin de 132 caracteres. Las cadenas entre comillas que se utilizan de forma explcita en expresiones de AutoLISP se conocen

    como cadenas de texto o constantes de cadena. Ejemplos de cadenas vlidas son "cadena 1" y "\nPrimer punto: ".

  • 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 slo) e incluidos entre parntesis. Las listas proporcionan un mtodo eficaz para almacenar numerosos valores relacionados. AutoCAD expresa los puntos 3D como una lista de tres nmeros reales. Ejemplos de listas son: (1.0 1.0 0.0), ("ste" "se" "aqul") y (1 "UNO").

    2.4. Smbolos y variables AutoLISP utiliza smbolos para almacenar los datos. En los nombres de smbolos no se distingue entre maysculas y minsculas, pudiendo emplearse

    cualquier secuencia de caracteres alfanumricos, siempre que no contenga a alguno de los siguientes: - Parntesis ( ) Reservado para lista y expresiones - Punto . Punto decimal - Apostrofo ' Abreviatura de la Funcin QUOTE - Comillas " Reservado a las cadenas de caracteres. - Punto y coma; Para comenzar una lnea de comentarios.

    Un nombre de smbolo no puede estar compuesto slo por caracteres numricos. Las aplicaciones de AutoLISP hacen uso de smbolos o valores constantes, como cadenas, nmeros

    reales o enteros, y variables, empleadas para almacenar datos generados durante las ejecucin de los programas.

    AutoCAD proporciona tres variables predefinidas que pueden emplearse en las aplicaciones de

    AutoLISP: - PAUSE: est definida como una cadena compuesta que consta slo de una contrabarra (\). Esta

    variable se emplea con la funcin command para que el programa espere a que el usuario escriba datos.

    - PI: est definida como la constante p (pi). Su valor aproximado es 3.1415926. - T: est definida como la constante T. Se emplea como valor distinto de nil. - Nil: smbolo que en Lisp significa nada o vaco.

    Es posible cambiar el valor de estas variables con la funcin setq. Sin embargo, otras aplicaciones

    podran considerar que sus valores son fiables; por tanto, se recomienda no modificar estas variables. A estas tres variables, junto con los nombres de funciones del lenguaje y los nombres de funciones

    definidas por el usuario, las denominaremos palabras reservadas del lenguaje Los valores asignados a las variables pueden usarse como respuesta a las solicitudes de comando de

    AutoCAD. Esto proporciona una forma de almacenar y reutilizar nombres o nmeros complejos. Si se desea utilizar el valor de una variable como respuesta a una solicitud de AutoCAD, basta escribir el nombre de la variable precedido por un signo de admiracin (!).

    2.5. Conjuntos de seleccin Los conjuntos de seleccin son grupos compuestos por uno o varios objetos (entidades). Las rutinas de AutoLISP permiten aadir o suprimir de forma interactiva objetos de los conjuntos de

    seleccin.

  • 4

    2.6. Nombres de entidad Un nombre de entidad es un identificador numrico asignado a los objetos de un dibujo. En realidad, se

    trata de un puntero a un archivo mantenido por AutoCAD, en el que AutoLISP puede encontrar el registro de la base de datos de objetos

    A este identificador pueden hacer referencia las funciones de AutoLISP con el fin de permitir la seleccin

    de objetos para un posterior empleo de maneras varias.

    2.7. Descriptores de archivo Los descriptores de archivo son identificadores alfanumricos asignados a archivos abiertos por

    AutoLISP. Cuando sea necesario que una funcin de AutoLISP lea o escriba en un archivo, debe hacerse

    referencia a su identificador.

    2.8. Subrutinas Es un smbolo con el nombre de una funcin predefinida por Autolisp. Pueden ser: - Internas, cuando pertenecen al conjunto base de Autolisp, incluidas las definidas por el usuario. - Externas, las que se han definido mediante otras aplicaciones ligadas a Autocad.

  • 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, bsicamente, el siguiente formato: (funcin argumentos) Cada expresin comienza con un parntesis abierto y se compone de un nombre de funcin seguido de

    una lista ordenada de argumentos para dicha funcin, cada uno de los cuales puede constituir una expresin por s mismo. La expresin termina con un parntesis cerrado.

    Cada expresin devuelve un valor que puede ser empleado por una expresin circundante (Anidacion

    de expresiones); en caso de que no haya ninguna, AutoLISP devuelve el valor a la lnea de comando de AutoCAD.

    Por ejemplo, el siguiente cdigo incluye tres funciones. (fun1 (fun2 argumentos)(fun3 argumentos)) La primera funcin, fun1, tiene dos argumentos, mientras que las otras dos, fun2 y fun3, tienen un

    argumento cada una. Las funciones fun2 y fun3 estn delimitadas por la funcin fun1, por lo que sus valores pasan a fun1 como argumentos. La funcin fun1 evala estos dos argumentos y devuelve el valor a la lnea de comando.

    Si se escribe una expresin de AutoLISP en la solicitud de comando de AutoCAD, AutoLISP la evala y

    muestra el resultado, tras lo cual vuelve a aparecer la solicitud de comando. El siguiente ejemplo ilustra el uso de la funcin *(multiplicacin), que acepta uno o ms nmeros reales

    como argumentos. Comando: (* 2 27) 54 Dado que este ejemplo no tiene expresin circundante, devuelve el resultado a la lnea de comando. Las expresiones anidadas en otras expresiones devuelven sus resultados a la expresin circundante. El siguiente ejemplo utiliza el resultado de la funcin + (suma) como uno de los argumentos de la

    funcin * (multiplicacin). Comando: (* 2 (+ 5 10) ) 30 El formato completo que estudiaremos para cada funcin Autolisp es el siguiente: (funcin argumentos .....[ Argumentos opcionales... ] ) Los puntos suspensivos significan que el ltimo argumento puede repetirse un nmero cualquiera de

    veces. Cuando AutoCAD recibe algn cdigo de AutoLISP, lo transmite al intrprete de AutoLISP, cuyo ncleo

    contiene el evaluador. El evaluador lee una lnea de cdigo, la evala y devuelve el resultado. El cdigo puede leerse de un archivo o como datos tecleados por el usuario desde la lnea de comando, pero en cualquier caso deber tener el formato de una expresin de AutoLISP. Al respecto, hay que decir que:

    - Una expresin puede ser ms larga que una lnea. - Varios espacios en blanco se interpretan como uno slo. - Una lnea que se inici con ; no es interpretada. Se trata de una lnea de comentarios. - Se puede responder a las solicitudes de comando de AutoCAD con expresiones de AutoLISP.

  • 6

    4. RECOMENDACIONES INICIALES PARA LA CODIFICACIN DE UNA RUTINA LISP

    - Conocer la sintaxis y las reglas del lenguaje. - Saber de qu funciones dispone el lenguaje. - Describir exactamente cul es el objeto de la rutina LISP. Los programadores se refieren a esta

    versin de una rutina como pseudocdigo. - Recorrer el proceso manualmente desde el teclado, si es posible. Este procedimiento de verificacin

    a priori, ayudar a reconocer rpidamente los problemas en el proceso de desarrollo. - Tomar notas de cada paso. - Anotar qu clculos tuvieron lugar y en qu figuras se basaron. - Escribir el cdigo lo ms ordenado posible, distinguiendo entre:

    - Funcin principal (que ser la que se invoca al utilizar el programa). Suele incluir la definicin de un nuevo comando Autocad.

    - Funciones intermedias, segn la estructura que el programar decida. - Utilizar nombres de funciones y variables fcilmente identificables, limitando el empleo de estas

    ltimas a aquellas que sean estrictamente necesarias. - Escribir lneas de comentarios. - Utilizar funciones creadas en otros programas. Hacer Bibliotecas de funciones de usuario. - Sangrar el texto del cdigo para facilitar la interpretacin posterior.

  • 7

    5. FUNCIONES AUTOLISP

    Las funciones proporcionadas por el lenguaje se pueden clasificar de la siguiente manera:

    FUNCIONES BSICAS

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

    FUNCIONES AVANZADAS

  • 8

    5.1. FUNCIONES ARITMTICAS + Suma nmeros Sintaxis: (+ . . . ) Valor retornado: Suma de todos los argumentos numricos. Ningn 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 nmeros Sintaxis: (- . . . )

    Valor retornado: La diferencia entre el primer argumento y la suma de los restantes argumentos. Ningn 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 nmeros Sintaxis: (* . . . ) Valor retornado: Producto de todos los argumentos numricos. Ningn 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 nmeros Sintaxis: (/ . . . )

    Valor retornado: El cociente del primer argumento dividido por el producto de los dems 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: ( ) Valor retornado = -1 - . (~ 3) devuelve -4 (~ 100) devuelve -101 (~ -4) devuelve 3

  • 9

    1+ Incrementa un nmero en uno Sintaxis: (1+ ) Valor retornado = 1+n (entero o real segn n sea entero o real.) (1+ 5) devuelve 6 (1+ -17.5) devuelve -16.5 1- Disminuye en uno un nmero. Sintaxis: (1- ) Valor retornado = n-1 (entero o real segn n sea entero o real.) (1- 5) devuelve 4 (1- -17.5) devuelve -18.5 ABS Convierte un nmero a su valor absoluto Sintaxis: (ABS ) 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 [n2]), donde los argumentos n1 y n2 se convierten en nmeros reales antes de calcular el valor del arco tangente.

    Valor retornado = Arco tangente de n1/n2. Valor en radianes entre -/2 y /2. (atan 0.5) 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 ) 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 ) 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 ) Valor retornado: nmero 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 nmero a una potencia Sintaxis:(EXPT ) Valor retornado: nmero real o entero (expt 2 4) devuelve 16 (expt 3.0 2.0) devuelve 9.0 GCD Calcula el mximo comn denominador de dos enteros Sintaxis: (GCD ) Valor retornado = El valor del mximo comn denominador. (gcd 81 57) devuelve 3 (gcd 12 20) devuelve 4 LOG Calcula el logaritmo neperiano de un nmero real Sintaxis: (LOG ) Valor retornado = Un nmero 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 nmeros Sintaxis: (MAX ..) 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 nmeros Sintaxis: (MIN ..) 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 nmero es menor que 0 Sintaxis: (MINUSP ) Valor retornado = T si el argumento n es un nmero 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 divisin entre dos nmeros Sintaxis: (REM ) 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 raz cuadrada de un nmero Sintaxis: (SQRT ) Valor retornado = Un nmero real, raz cuadrada de n (sqrt 4) devuelve 2.0 (sqrt 2.0) devuelve 1.41421 ZEROP Comprueba si un nmero es 0 Sintaxis: (ZEROP ) 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 evaluacin de una funcin es un nmero Sintaxis: (NUMBERP ) Valor retornado: T si la expresin 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 ASIGNACIN SETQ Liga el nombre de smbolos al valor de una expresin Sintaxis: (SETQ < Smbolo> < Smbolo> . . . . . . . .) Valor retornado: El devuelto por el ltimo argumento de la funcin. (setq a 5.0) devuelve 5.0 y define el smbolo (variable) a como 5.0. (setq b 123 c 4.7) devuelve 4.7 y define los smbolos (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 )

    La variable del sistema no podr ser slo de lectura y el nuevo valor asignado ser de los que el sistema pueda aceptar.

    Valor retornado: El nuevo valor de la variable del sistema. (setvar "blipmode" 0) 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 funcin TYPE Extrae el tipo de dato de un argumento. Sintaxis: (TYPE ) Valor retornado: El tipo de dato como una cadena en maysculas REAL: numero entero FILE: descriptor de fichero STR: cadenas INT: numero entero. SYM: smbolos LIST: listas y funciones de usuario SUBR: funciones internas PICKSET Conjuntos de seleccin ENAME Nombres de entidades .......... Los elementos que dan como resultado nil (como un smbolo no asignado) devuelven nil. (setq a 123 r 3.45 s "Hola!" x '(a b c)) (setq f (open "nombre" "r")) entonces: (type 'a) 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 )

    Valor retornado: El primer tem de una cadena de caracteres o la primera lista si la cadena contiene listas.

    STRCASE Convierte los caracteres de una cadena a minsculas o maysculas Sintaxis: (STRCASE [modo]) - conversin a minsculas: modo /= nil - conversin a maysculas : 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 ms cadenas Sintaxis: (STRCAT ["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 ........) Valor retornado: Un nmero entero.

    Si se especifican varios argumentos cadena, la funcin devuelve la suma de las longitudes de todos los argumentos. Si stos se omiten o se escribe una cadena vaca, el resultado es 0 (cero).

    (strlen "abcd") devuelve 4 (strlen "ab") devuelve 2 (strlen "uno" "dos" "tres") devuelve 10 (strlen) devuelve 0 (strlen "") devuelve 0 SUBSTR Extrae una porcin de una cadena de caracteres. Sintaxis: (SUBSTR [ long ]) inicio: nmero entero que indica la posicin del primer carcter a extraer.

    long: longitud de la subcadena a extraer ( si no se da proporciona la subcadena desde la posicin inicial hasta el final)

    Valor retornado: La subcadena extrada. (substr "abcde" 2) 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 vaca)

  • 14

    VL-PRINC-TO-STRING Devuelve la representacin en cadena de caracteres de cualquier objeto Lisp como si fuera presentada mediante la funcin princ.

    Sintaxis: (VL-PRINC-TO-STRING ) Valor retornado: Una cadena de caracteres que contiene la representacin del dato tal y como la mostrara la funcin princ.

    (vl-princ-to-string 120) 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 cdigos numricos ASCII. Sintaxis: (VL-LIST->STRING (entero ) )

    Valor retornado: Una cadena formada por los caracteres cuyos cdigos ASCII se incluyen en la lista pasada como argumento.

    ((vl-list->string (97 98 99 100) ) devuelve abcd VL- STRING->LIST

    Convierte una cadena de caracteres en una lista de los cdigos numricos ASCII correspondientes. Sintaxis: (VL-STRING->LIST )

    Valor retornado: Una lista con los cdigos ASCII correspondientes a los caracteres que integran la cadena.

    ((vl-string->list abcd ) devuelve (97 98 99 100)

  • 15

    5.4. FUNCIONES PARA GESTIN DE LISTAS 5.4.1. CREACIN DE LISTAS LIST Crea una lista a partir de un nmero de expresiones Sintaxis: ( LIST ...........) Valor retornado: Una lista de los argumentos de la funcin. (setq L1 (list 'a 'b 'c)) devuelve (A B C) (setq L2 (list 'a '(b c) 'd)) devuelve (A (B C) D) (setq L3 (list 3.9 6.7)) devuelve (3.9 6.7) (setq L3 '(3.9 6.7) equivale a (list 3.9 6.7) (setq a 10 b 20 c 30 L4_1 (list a b c)) devuelve (10 20 30) (setq La (list a) Lb (list b) Lc (list c) L4_2( La Lb Lc)) devuelve ((10)(20)(30))

    Como alternativa a utilizar LIST, se puede indicar una lista de forma explcita con la funcin QUOTE si la lista no contiene variables ni opciones sin definir. El carcter de comilla ( ' ) se define como la funcin QUOTE.

    APPEND Funde varias listas en una Sintaxis: (APPEND ...........) 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 Aade al principio de una lista como primer elemento una expresin Sintaxis: (CONS ) 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 funcin CONS tambin acepta un tomo en lugar del argumento lista, en cuyo caso construye una estructura denominada pares punteados. En los pares punteados, AutoLISP incluye un punto entre el primer y el segundo elemento. Un par punteado es un tipo especial de lista, por lo que algunas funciones que utilizan listas normales no los aceptan como argumento.

    (cons 'a 2) devuelve (A . 2) LENGTH Cuenta los elementos de una lista Sintaxis: (LENGTH ) Valor retornado: El nmero entero correspondiente. (length '(a b c d)) devuelve 4 (length '(a b (c d))) devuelve 3 (length '()) devuelve 0

  • 16

    5.4.2. EXTRACCIN DE ELEMENTOS DE UNA LISTA CAR Extrae el primer elemento de una lista. Sintaxis: (CAR ) Valor retornado: El primer elemento de la lista. Si lista est vaca, 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 estn todos los elemento de la lista menos el primero. Sintaxis: (CDR ) Valor retornado: la nueva lista. Si lista est vaca, 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 funcin 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 vlidas.

    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 nmeros reales). De igual modo, CADDR puede utilizarse para obtener la coordenada Z de un punto 3D. Por ejemplo, dadas las asignaciones:

    (setq pt2 '(5.25 1.0)) 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 ) 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 posicin en ella (pos) Sintaxis: (NTH )

    Las posiciones dentro de la lista son numeradas de izquierda a derecha empezando por la posicin 0.

    Valor retornado: El elemento encontrado, o un nulo si no se encontr. (nth 3 '(a b c d e)) 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 expresin vlida susceptible de aparecer como primer elemento de una de las sublistas.

    Lista de asociaciones: ( (clave1 inf1) (clave2 inf2...) (clave3 inf3..)........) Sintaxis: (ASSOC ) Valor retornado: La primera sublista encontrada. Si la clave no aparece devuelve nil (setq pieza '((nombre CAJA) (ancho 3) (largo 4.7263) (alto 5))) (assoc 'largo pieza) devuelve (largo 4.7263) (assoc 'peso pieza) devuelve nil

    Las listas de asociaciones se suelen utilizar para almacenar los datos a los que puede acceder mediante una clave. La funcin SUBST proporciona un medio apropiado para sustituir el valor asociado con una clave en una lista de asociaciones.

  • 18

    5.4.3. MANIPULACIN DE LISTAS MEMBER

    Busca la primera aparicin de una expresin en una lista y devuelve el resto de la lista a partir de la expresin encontrada.

    Sintaxis: (MEMBER ) Valor retornado: una lista donde el primer elemento es la expresin encontrada y el resto, el resto de la lista hasta el final. Si no se encuentra la expresin devuelve nil .

    (member 'c '(a b c d e)) 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 ) 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 ) Valor retornado: T si la expresin 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 aparicin de ste por otro especificado Sintaxis: (SUBST ) 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 evala cada expresin para cada uno de los elemento de la lista

    Sintaxis: (FOREACH .........) Nombre-var: variable de memoria a la que FOREACH ligar secuencialmente los valores de la lista suministrada y que normalmente ser usada en la expresin.

    Valor retornado: El resultado de la ltima expresin evaluada.

    Avanza por la lista, asignando un nombre-var a cada elemento y evala cada expresin para todos los elementos de la lista. Se pueden especificar tantas expresiones como se desee. La funcin FOREACH devuelve el resultado de la ltima expresin evaluada.

    (setq pt1 (getpoint "\npt1?:") pt2 (getpoint "\npt2?:") pt3 (getpoint "\npt3?:") listap (list pt1 pt2 pt3) ) (foreach pto listap (command _point pto) ) equivale a dibujar una marca de punto en los puntos pt1 pt2 y pt3. ATOM

    Predicado que verifica si un elemento es un tomo, es decir, si no es una lista. Sintaxis: (ATOM ) Valor retornado: Nil si 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 MONOLNEA APPLY

    Devuelve el resultado de ejecutar la "funcin" tomando como argumentos los elementos de la "lista".

    Sintaxis: ( APPLY ) Valor retornado: El devuelto por el argumento de la funcin (apply '+ '( 1 2 3 ) ) devuelve el resultado 1 + 2 + 3 = 6 (apply ' strcat '( "A" "B" "C" ) devuelve "ABC" MAPCAR

    Devuelve el resultado de ejecutar la "funcin" tomando como argumentos de funcin los elementos sucesivos de "lista 1" ............."lista n"

    Sintaxis: ( MAPCAR ................. ) 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 funcin sin darle un nombre. El conjunto de expresiones se aplica sobre los argumentos Sintaxis: ( LAMBDA < argumentos > < expresin >...............) Valor retornado: el resultado de la ltima evaluacin. Se suele utilizar combinada con APPLY y MAPCAR. (apply '( lambda ( X Y Z ) (* X ( - Y Z ) ) ) ' ( 5 20 14 ) ) devuelve 30. (apply '( lambda ( X Y Z ) (+ X Y Z ) ) ' ( 1 2 3 4 ) ) devuelve: Error: too many arguments. (mapcar '( lambda ( X Y Z ) (* X ( - Y Z ) ) ) '( 5 6 ) '( 20 30 ) '(14 0 ) ) devuelve ( 30 180 )

  • 21

    5.6. FUNCIONES DE CONVERSIN Y TRANSFORMACIN FIX Convierte un nmero real en entero. Sintaxis: (FIX ) Valor retornado: El nmero entero que resulta de quitar los decimales al real. (fix 3) devuelve 3 (fix 3.7) devuelve 3 FLOAT Convierte un nmero entero en real. Sintaxis: (FLOAT ) Valor retornado: un numero real. (float 3) devuelve 3.0 (float 3.75) devuelve 3.75 ATOI Convierte una cadena de caracteres en un nmero entero Sintaxis: (ATOI ) Valor retornado: un nmero entero. (atoi "97") devuelve 97 (atoi "3") devuelve 3 (atoi "3.9") devuelve 3 Ejemplo de cdigo que introduce puntos en una lista solicitando el punto por su posicin en la lista. (setq i 1 puntos nil) (while (setq dato (getpoint (strcat "\npunto" (itoa i) ":"))) (setq puntos (cons dato puntos) i (+ i 1) ) ) (setq puntos (reverse puntos)) ) ATOF Convierte una cadena de caracteres en un nmero real Sintaxis: (ATOF ) Valor retornado: un nmero 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 ) Valor retornado: una cadena de caracteres. (itoa 33) devuelve "33"

  • 22

    RTOS Convierte un nmero real en una cadena de caracteres Sintaxis: (RTOS [modo [precisin]]) numero: nmero real (o entero que tomar como real) modo (opcional): entero del 1 al 5 que determina el formato numrico de la cadena: 1. Unidades cientficas 2. Unidades decimales 3. Pies y pulgadas I (fraccin decimal) 4. Pies y pulgadas II (fraccin propia) 5. Unidades fraccionarias precisin (opcional): entero que determina el nmero de decimales de precisin en la cadena

    Si no se especifican los argumentos modo y precisin se asume el establecido por la variables de Autocad LUNITS y LUPREC

    Valor retornado: Una cadena de caracteres Ejemplos: (RTOS 5.6 1 4) => 5.6000 E+00" (RTOS 5.6 2 4) => 5.6000" (RTOS 5.6 5 4) => 5 5/8" DISTOF Convierte un cadena en un nmero real, con un determinado formato de visualizacin. Sintaxis: (DISTOF [ modo]) Cadena: cadena de caracteres que expresa un valor numrico.

    modo (opcional): entero del 1 al 5 que indica el formato numrico del nmero real expresado en la cadena (El cdigo se corresponde con el dado en la funcin anterior), la funcin deber ser capaz de interpretar el argumento cadena de acuerdo con el modo especificado:

    Valor retornado: Un nmero real ANGTOS Convierte un nmero (que representa un ngulo en radianes) en una cadena de caracteres Sintaxis: (ANGTOS [modo [precisin]]) angulo: valor del ngulo en radianes. modo (opcional): entero del 0 al 4 que determina el formato numrico en la cadena: 0. Grados sexagesimales. 1. Grados, minutos y segundos 2. Grados centesimales. 3. Radianes 4. Unidades geodsicas.

    precisin (opcional): entero que determina el nmero de decimales de precisin en la cadena. Si no se especifican los argumentos modo y precisin se asume el establecido por la variables de Autocad LUNITS y LUPREC

    Valor retornado: Una cadena de caracteres. Ejemplos: (ANGTOS 3.1416 0) => 180" (ANGTOS 3.1416 2) => 200g" ANGTOF Convierte una cadena de caracteres en un nmero real que representa un ngulo Sintaxis: (ANGTOF [ modo]) Cadena: cadena de caracteres que expresa un valor numrico de ngulo

    modo (opcional): entero del 0 al 4 que indica el formato numrico del ngulo expresado en la cadena (El cdigo se corresponde con el dado en la funcin anterior), la funcin deber ser capaz de interpretar el argumento de la cadena de acuerdo con el modo especificado. Si no se especifica el argumento modo se asume el establecido por la variable de Autocad LUNITS

    Valor retornado: Un valor correspondiente al numrico de un ngulo en radianes. Ejemplos: (ANGTOF 180" 0) => 3.1416 (ANGTOF 200" 2) => 3.1416

  • 23

    ASCII Convierte el primer carcter de una cadena de caracteres a su cdigo ASCII Sintaxis: (ASCII ) Valor retornado: Un entero que representa el cdigo ASCII (ascii "A") devuelve 65 (ascii "a") devuelve 97 (ascii "GRANDE") devuelve 66 CHR

    Convierte un nmero entero que representa un carcter ASCII en la cadena de un slo carcter correspondiente

    Sintaxis: (CHR ) Valor retornado: una cadena de un slo carcter. (chr 65) devuelve "A" (chr 66) devuelve "B" (chr 97) devuelve "a" READ Extrae datos de una cadena de caracteres Sintaxis: (READ )

    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 nmero 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 < codnue> [desp] ). codvie: cdigo que expresa el sistema de coordenadas en el cual se expresa el punto. conue: cdigo que expresa el sistema de coordenadas en el cual se quiere expresar el punto 0. SCU 1. SCP 2. SCV (visualizacin) 3. SCV espacio papel desp : si es distinto de nil entiende el primer argumento como un desplazamiento. Valor retornado: Una lista de punto con sus coordenadas transformadas. CVUNIT

    Convierte un nmero o lista de nmeros de una unidad de medida a otra (Las cadenas que representan unidades de medida vlidas en esta funcin estn almacenadas en el fichero ACAD.UNT)

    Sintaxis: (CVUNIT ) cadvie: cadena de unidad de medida vieja. cadvie: cadena de unidad de medida nueva. Valor retornado: Un nmero o lista de nmeros convertida a la unidad de medida nueva. (cvunit 1 "minuto" "segundo") 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 RELACIN = Comprueba la igualdad numrica Sintaxis: (= .)

    Valor retornado: T si todos los argumentos (nmeros o cadenas de caracteres) se evalan como iguales numricamente, Nil en caso contrario.

    Las cadenas son comparadas en esta funcin y en las siguientes en base a su valor numrico ASCII (= 4 4.0) 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 numrica Sintaxis: (/= )

    Valor retornado: T si los dos argumentos (nmeros o cadenas de caracteres) no se evalan como iguales numricamente, Nil en caso contrario

    (/= 10 20) devuelve T (/= "t" "t") devuelve nil (/= 5.43 5.44) devuelve T (/= 10 20) devuelve T < Comprueba la relacin menor que entre los argumentos Sintaxis: (< .)

    Valor retornado: T si cada argumento es numricamente 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 relacin mayor que entre los argumentos Sintaxis: (> .)

    Valor retornado: T si cada argumento es numricamente 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

    = 77 4 9) devuelve nil AND Comprueba los valores de una serie de expresiones. (Y lgico) Sintaxis: (AND .)

    Valor retornado: T si todos los argumentos se evalan 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 evala con un valor no nulo. (O lgico)

    Sintaxis: (OR .) Valor retornado: T si alguno de los argumentos se evala con un valor no nulo y Nil en caso contrario.

    (or 1.4 2 "hola") 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 )

    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 idnticas Sintaxis: (EQ ) Valor retornado: T si las dos expresiones estn ligadas a los mismos datos y Nil en otro caso. (setq f1 '(a b c)) (setq f2 '(a b c)) (setq f3 f2) entonces: (eq f1 f3) 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 evalan con valores iguales Sintaxis: (EQUAL [margen de error] )

    Valor retornado: T si las dos expresiones se evalan igual y Nil en caso contrario.

    Si las dos expresiones son nmeros reales se puede incluir un margen de error. (setq f1 '(a b c)) (setq f2 '(a b c)) (setq f3 f2) (setq a 1.123456) (setq b 1.123457) entonces: (equal f1 f3) devuelve T (equal f3 f2) devuelve T (equal a b) devuelve nil (equal a b 0.000001) devuelve T = Comprueba la igualdad numrica Sintaxis: (= .)

    Valor retornado: T si todos los argumentos (nmeros o cadenas de caracteres) se evalan como iguales numricamente Nil en caso contrario. Las cadenas son comparadas en esta funcin y en las siguientes en base a su valor numrico ASCII.

    (= 4 4.0) 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 lnea 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 CONDICIN

    COND

    Lee una serie de listas. Evala el primer elemento de cada lista (en el orden indicado) hasta que uno de ellos devuelva un valor distinto de nil. A continuacin, evala las expresiones que siguen a este elemento y pasa por alto las restantes listas.

    Sintaxis: (COND ..) Valor retornado: El retornado por la ltima expresin de la lista evaluada. Si no se evala ninguna lista, la funcin COND devuelve Nil

    (cond ((< a 20) (setq b (cons 'a a))) ((> a 20) (setq b (list 'a a))) (t (setq b "b=20")) ) en los casos: a = 10 => b = (a . 10) la variable b se evala como un par punteado a = 25 => b = (a 25) la variable b se evala como una lista a = 20 => b = "b=20" la variable b se evala como un string

    Como se muestra, COND se puede utilizar como una funcin de tipo case. Es habitual utilizar T como ltima (por defecto) expresin de prueba.

    Dada una cadena de respuesta de usuario en la variable s, esta funcin prueba la respuesta y devuelve 1 si es Y o y, 0 si es N o n y nil en cualquier otro caso.

    (cond ((= s "Y") 1) ((= s "y") 1) ((= s "N") 0) ((= s "n") 0) (t nil) ) IF

    Evala una expresin Autolisp basndose en si una expresin de comprobacin inicial se evala como no nula

    Sintaxis: (IF [expresin si test es = nil ] ) Valor retornado: El valor retornado por expresin 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 Evala secuencialmente una serie de expresiones. Sintaxis: (PROGN ) Valor retornado: La ltima expresin evaluada. Se puede utilizar PROGN para calcular varias expresiones cuando slo se espera una expresin.

    (if (= a b) (progn (princ "\nA = B ") (setq a (+ a 10) b (- b 10)) ) )

  • 28

    5.9. FUNCIONES PARA GESTIN DE CICLOS REPEAT

    Evala repetidamente una serie de una o ms expresiones Autolisp un nmero determinado de veces.

    Sintaxis: (REPEAT ) n: Entero que indica el n de repeticiones a realizar. Valor retornado: El resultado de la ltima expresin evaluada

    (setq a 10 b 100) (repeat 4 (setq a (+ a 10)) (setq b (+ b 100))

    ) 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 "\npt1?:") pt2 (getpoint "\npt2?:") pt3 (getpoint "\npt3?:") listap (list pt1 pt2 pt3) n (length listap) ) (Command "_pline") (repeat n (setq pt (car listap ) listap (cdr listap)) (command pt) ) (command "") Equivale a dibujar una polilnea que pasa por los puntos

    pt1 pt2 y pt3

  • 29

    WHILE

    Evala repetidamente una serie de una o ms expresiones Autolisp basndose en si una expresin de comprobacin inicial se evala como un valor nulo o no nulo.

    Sintaxis: (WHILE ) Test: Expresin de comprobacin, que hace que las dems expresiones se evalen mientras sta se mantenga distinta de Nil .

    Valor retornado: El resultado de la ltima expresin evaluada (setq a 10 ) (While (< a 100) (setq a (+ a 10)) ) 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 "\npt1?:")pt2 (getpoint "\npt2?:")pt3 (getpoint "\npt3?:") listap (list pt1 pt2 pt3) ) (Command "_pline") (While (setq pt (car listap )) (setq listap (cdr listap))) (command pt) ) (command "") Equivale a dibujar una polilnea que pasa por los puntos

    pt1 pt2 y pt3. (setq L '( 1 2 3 4 5 6) Ln nil ) (foreach n L (setq Ln (cons (+ 1 n) Ln))) (setq l (reverse ln)) ) Devuelve la lista (2 3 4 5 6 7) (setq pt1 (getpoint "\npt1?:") pt2 (getpoint "\npt2?:") pt3 (getpoint "\npt3?:") listap (list pt1 pt2 pt3) ) (command "_pline") (foreach punto listap (command punto)) (command "") Equivale a dibujar una polilnea que pasa por los puntos

    pt1 pt2 y pt3.

  • 30

    5.10. FUNCIN PARA CREAR FUNCIONES DE USUARIO DEFUN Define una nueva funcin Autolisp o una orden o comando Autocad Sintaxis (DEFUN [expr] ...)

    Nombre: el nombre de la funcin o de la orden que se est creando. Si es una orden o comando Autocad el nombre ser: c:xxx Lista-argumentos: una lista con los argumentos, que puede estar seguida por una barra oblicua y los nombres de uno o ms smbolos locales para la funcin.

    Argumentos: variables que toman valor en la llamada a la funcin Smbolos locales: variables que slo tienen valor en la funcin que se define.

    La barra oblicua debe ir separada del primer smbolo local y del ltimo argumento, si existe, por un espacio como mnimo. Si no se declara ningn argumento ni smbolo local, se debe escribir un conjunto vaco de parntesis tras el nombre de la funcin.

    Los siguientes ejemplos de lista-argumentos muestran valores vlidos y no vlidos: (defun mifunc (x y) ...) La funcin toma dos argumentos (defun mifunc (/ a b) ...) La funcin tiene dos smbolos locales (defun mifunc (x / temp) ...) Un argumento, un smbolo local (defun mifunc () ...) Ningn argumento ni smbolo local Expr: Expresiones que se ejecutan en la funcin y que utilizan como variables: - Los argumentos de la funcin.

    - Las variables locales que tienen que tomar valor en la funcin y lo pierden al ejecutarse la misma. - Las variables globales definidas, bien en esta funcin, bien en otras y que por no haber sido definidas como locales en ninguna funcin tienen valor en todo el programa.

    Valor retornado: La funcin DEFUN devuelve el nombre de la funcin que se va a definir. Al invocar esta funcin, sus argumentos se evalan y se asocian a los smbolos correspondientes. La funcin devuelve el resultado de la ltima expresin evaluada.

    (DEFUN SUMA_10 (x) (+ 10 x) ) devuelve SUMA10 (SUMA_10 5) devuelve 15 (SUMA_10 -7.4) devuelve 2.6 (defun puntos (x y / temp) (setq temp (strcat x "...")) (strcat temp y) ) devuelve PUNTOS (puntos "a" "b") devuelve "a...b" (puntos "de" "a") devuelve "de...a" (eval temp) devuelve nil

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

  • 31

    5.11. FUNCIONES GRFICAS ANGLE

    Calcula el ngulo que formara una recta definida por dos puntos con la direccin positiva del eje X del SCP actual (si los puntos son 3D se proyectan sobre el plano de construccin actual)

    Sintaxis: ( ANGLE ) 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 )

    Valor retornado: Un nmero real, que es la distancia en unidades de dibujo entre los dos puntos suministrados como argumentos. Si al menos uno de los puntos facilitados es un punto 2D, DISTANCE no toma en cuenta las coordenadas Z de los puntos 3D especificados, y devuelve la distancia 2D entre los puntos, proyectada sobre el plano de construccin actual.

    (distance '(1.0 2.5 3.0) '(7.7 2.5 3.0)) devuelve 6.7 (distance '(1.0 2.0 0.5) '(3.0 4.0 0.5)) devuelve 2.82843 POLAR Computa un punto en relacin a un punto dado. Sintaxis: ( POLAR )

    Valor retornado: Las coordenadas de un punto situado en el ngulo ang (radianes) y a una distancia dis del punto pt todo ello con relacin al SCP actual. El ngulo siempre se refiere al plano de construccin actual.

    (polar '(1 1 3.5) 0.785398 1.414214) devuelve (2.0 2.0 3.5) (polar (1 1) (/ pi 2) 3) devuelve (1.0 4.0) INTERS Calcula el punto de interseccin entre dos lneas Sintaxis: ( INTERS [extend])

    Valor retornado: Un punto que indica el punto de interseccin de la lnea definida por pt1 y pt2 y la lnea definida por pt3 y pt4, si no se encuentra ningn punto de interseccin la funcin retorna un nil.

    Extend: Si extend se evala como nil las lneas se prolongan hasta encontrar el punto de interseccin, en caso contrario o si no se codifica, slo se busca la interseccin en la longitud de los segmentos definidos por los puntos.

    Todos los puntos se expresan respecto al SCP actual. Si los cuatro argumentos de puntos son 3D, inters busca una interseccin 3D. Si hay algn punto 2D, inters proyecta las lneas sobre el plano de construccin actual y slo busca una interseccin 2D.

    (setq a '(1.0 1.0) b '(9.0 9.0)) (setq c '(4.0 1.0) d '(4.0 2.0)) (inters a b c d) 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 ejecucin del programa para que el usuario introduzca un punto. Sintaxis: (GETPOINT [pt] [mensaje]) pt: punto de base opcional

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud del punto

    Valor retornado: El punto introducido, como una lista de nmeros reales. El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETDIST. (setq p (getpoint)) (setq p (getpoint "Dnde? ")) (setq p (getpoint '(10 20)) respuesta :@40,20 valor retornado: (50.0 40.0 0.0) GETDIST Detiene la ejecucin del programa para que el usuario introduzca una distancia Sintaxis: (GETDIST [pt] [mensaje]) pt: punto de base opcional

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud de la distancia

    Valor retornado: Un nmero real. El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETDIST. (setq dist (getdist)) (setq dist (getdist '(1.0 3.5))) (setq dist (getdist "A qu distancia? ")) (setq dist (getdist '(1.0 3.5) "A qu distancia? ")) GETANGLE Detiene la ejecucin del programa para que el usuario introduzca un ngulo. Sintaxis: (GETANGLE [pt] [mensaje]) pt: punto de base opcional

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud del ngulo

    Valor retornado: El valor del ngulo en radianes.

    La funcin GETANGLE mide los ngulos a partir de cero radianes (definidos mediante la variable de sistema ANGBASE) aumentando en direccin opuesta a las agujas del reloj. El ngulo resultante se expresa en radianes con respecto al plano de construccin actual (el plano XY del SCP actual, con la elevacin actual).

    El usuario no puede escribir otra expresin AutoLISP como respuesta a una peticin GETANGLE.

    Para especificar un ngulo, el usuario debe escribir un nmero en el formato actual de unidades angulares de AutoCAD. Aunque este formato puede utilizar grados, grados centesimales o cualquier otra unidad, esta funcin siempre devuelve el ngulo en radianes. El usuario tambin puede designar dos posiciones 2D en la pantalla grfica para indicar el ngulo a AutoLISP. AutoCAD dibuja una lnea elstica desde el primer punto hasta la posicin del cursor en cruz con el fin de facilitar al usuario la visualizacin del ngulo.

  • 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 direccin opuesta a las agujas del reloj (sin tomar en cuenta el valor de ANGDIR), con cero radianes como valor actual de ANGBASE. Los siguientes ejemplos de cdigo muestran cmo se pueden utilizar diferentes argumentos.

    (setq ang (getangle)) (setq ang (getangle '(1.0 3.5))) (setq ang (getangle "Hacia dnde? ")) (setq ang (getangle '(1.0 3.5) "Hacia dnde? ")) GETORIENT Detiene la ejecucin del programa para que el usuario introduzca un ngulo. Sintaxis: (GETORIENT [pt] [mensaje]) pt: punto de base opcional

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud del ngulo

    Valor retornado: El valor del ngulo en radianes . Esta funcin se asemeja a GETANGLE, con la

    diferencia de que el valor de ngulo devuelto por GETORIENT no se ve afectado por las variables de sistema ANGBASE y ANGDIR. Sin embargo, la introduccin del ngulo por parte del usuario todava se basa en los parmetros actuales de ANGDIR y ANGBASE.

    . La funcin GETORIENT mide los ngulos con una

    direccin de cero radianes hacia la derecha (este) y los ngulos que se incrementan en sentido contrario a las agujas del reloj. Al igual que con GETANGLE, GETORIENT expresa el ngulo resultante en radianes, respecto al plano de construccin actual. Los ngulos que se transmiten a GETORIENT se basan en los valores actuales de ANGDIR Y ANGBASE. Sin embargo, una vez proporcionado el ngulo, ste se mide en sentido contrario a las agujas del reloj, con cero radianes a la derecha (ANGDIR y ANGBASE se ignoran). Por ello, si selecciona otra base de cero grados u otra direccin para los ngulos que se incrementan, se debe utilizar el comando UNIDADES o las variables de sistema ANGBASE y ANGDIR para realizar la conversin necesaria.

    Se recomienda el uso de GETANGLE para obtener un valor de rotacin (un ngulo relativo). Y de GETORIENT para obtener una orientacin (un ngulo absoluto).

    GETCORNER

    Detiene la ejecucin del programa para que el usuario introduzca un punto, y traza un rectngulo de banda elstica en la pantalla a medida que el usuario mueve el dispositivo sealador

    Sintaxis: (GETCORNER [mensaje]) pt: Primera esquina del rectngulo.

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud de la otra esquina.

    Valor retornado: El punto introducido por el usuario

  • 34

    GETVAR Extrae un valor almacenado en una variable del sistema de AutoCAD Sintaxis: (GETVAR ) 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 permetro calculado por

    Autocad. GETINT Detiene la ejecucin del programa para que el usuario introduzca un nmero entero. Sintaxis: (GETINT [mensaje])

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud del entero

    Valor retornado: El entero introducido por el usuario. El rango de valores pasados a GETINT puede ir de -32,768 a +32,767. El usuario no puede escribir otra expresin de AutoLISP como respuesta a una peticin de GETINT. (setq num (getint)) (setq num (getint "Escriba un nmero: ")) GETREAL Detiene la ejecucin del programa para que el usuario introduzca un nmero real Sintaxis: (GETREAL [mensaje])

    mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud del nmero real

    Valor retornado: El real introducido por el usuario. (setq val (getreal)) (setq val (getreal "Factor de escala: ")) GETSTRING Detiene la ejecucin del programa para que el usuario introduzca una cadena de caracteres Sintaxis: (GETSTRING [espacio] [mensaje])

    Espacio: Si este argumento es distinto de nil la cadena introducida puede contener espacios en blanco. (y debe finalizarse con RETURN ). mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud de la cadena

    Valor retornado: La cadena introducida entrecomillada o una cadena vaca () si el usuario puls Enter sin teclear caracteres. Si tiene ms de 132 caracteres, la cadena slo devuelve estos caracteres. Si contiene el carcter de contrabarra (\), ste se convierte en dos caracteres de contrabarra (\\). De esta manera, el valor resultante puede incluir caminos de nombre de archivo a los que tienen acceso otras funciones.

    (setq s (getstring "Escriba su nombre ")) Si se responde Juan se define s como "Juan"

    (setq s (getstring T "Escriba su nombre completo: ")) Si responde Juan Daz Prez se define como "Juan Daz Prez" (setq s (getstring "Nombre de archivo: ")) Si responde \acad\midibuj se define como "\\acad\\midibuj"

  • 35

    GETKWORD

    Detiene la ejecucin del programa para que el usuario introduzca una cadena de caracteres. Esta funcin comprueba la validez de lo introducido basndose en una lista de palabras vlidas establecidas usando la funcin INIGET

    Sintaxis: (GETKWORD [mensaje]) mensaje: cadena opcional que ser presentada en el rea de rdenes/peticiones de la pantalla, en el momento de la solicitud de la cadena.

    Valor retornado: La cadena introducida o Nil si el usuario puls Enter sin teclear caracteres AutoCAD lo intenta de nuevo si la entrada no es una palabra clave. Si se trata de una entrada nula ( RETURN ), GETKWORD devuelve nil (siempre que se admitan entradas nulas). Esta funcin tambin devuelve nil si antes no se ha realizado una llamada a INITGET que establezca una o varias palabras clave.

    El ejemplo siguiente muestra una llamada inicial a initget que define una lista de palabras clave (S y No) y no admite entradas nulas (valor en bits igual a 1) en la siguiente llamada a getkword:

    (initget 1 "S No") (setq x (getkword "Seguro? (S o No) "))

    Este mensaje solicita datos del usuario y define el smbolo x como S o No, segn la respuesta proporcionada. Si sta no coincide con ninguna de las palabras clave o el usuario escribe un valor nulo, AutoCAD vuelve a mostrar la cadena indicada en el argumento solicitud. Si no se especifica este argumento, AutoCAD muestra lo siguiente:

    Intntelo de nuevo: INITGET

    Establece las palabras clave que han de usarse con la siguiente llamada a una funcin introducida por el usuario. Las funciones que toman en consideracin las palabras clave son getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel y nentselp. La funcin getstring es la nica funcin introducida por el usuario que no las admite.

    Sintaxis: (INITGET [bits] [cadena]) Bits: El argumento bits es un nmero entero binario que admite o rechaza determinados tipos de datos de usuario. Algunos de los valores que puede tomar junto a su significado asociado: 1: no permite nulos 2: no permite cero 4: no permite negativos 8: no chequea lmites del dibujo 64: devuelve una distancia 2D, en lugar de 3D.

    Cadena: El argumento cadena define una lista de palabras clave. Valor retornado: La funcin initget siempre devuelve nil.

    Para ms informacin sobre la funcin se recomienda consultar el manual de personalizacin de Autocad

  • 36

    GETFILED Presenta un cuadro de dialogo de nombres de archivos y espera una entrada de usuario.

    Sintaxis: (GETFILED )

    Parmetros: dialogo determina el nombre del cuadro de dilogo, nombre de Fichero por defecto especifica el nombre de archivo que se va a utilizar por defecto

    extensin es la extensin por defecto del nombre del archivo. Si extensin se transmite como una cadena nula [""], utiliza por defecto * (para todos los tipos). parmetros es un valor entero (un campo codificado en bits) que controla el funcionamiento del cuadro de dilogo. Para definir varias condiciones simultneamente, se aaden los valores en conjunto y se crea un indicador con un nmero comprendido entre el 0 y el 15.

    Valor del indicador = 1 (bit 0):Se define este bit para solicitar el nombre del archivo que se va a crear. No debe utilizarse para solicitar el nombre de un archivo existente con el fin de abrirlo. En este ltimo caso, si el usuario introduce el nombre de un archivo que no existe, el cuadro de dilogo muestra un mensaje de error en la parte inferior. Si se define este bit y el usuario elige un archivo existente, AutoCAD presenta una casilla de advertencia y ofrece la posibilidad de seguir o cancelar la operacin. Valor del indicador = 2 (bit 1):Desactiva el botn Teclearlo. Este bit se define si se llama a la funcin GETFILED mientras otro cuadro de dilogo est activo (en caso contrario, obliga a cerrar el otro cuadro de dilogo).Si no se define este bit, se activa el botn Teclearlo. Cuando el usuario selecciona el botn, el cuadro de dilogo desaparece y GETFILED devuelve 1. Valor del indicador = 4 (bit 2):Permite al usuario escribir una extensin de nombre de archivo arbitraria o bien no escribir ninguna. Si no se define este bit, GETFILED slo acepta la extensin especificada en el argumento ext, y si el usuario no la escribe en la casilla de texto File, la aade al nombre del archivo. Valor del indicador = 8 (bit 3): Si se define este bit y no se define el bit 0, GETFILED inicia en la biblioteca una bsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el orden de bsqueda en la estructura, descompone el camino y slo devuelve el nombre del archivo. Esto no ocurre si los archivos que se buscan tienen el mismo nombre pero se encuentran en distintos directorios. Si no se define este bit, GETFILED devuelve el nombre completo del archivo, incluido el nombre del camino. Se define este bit si se utiliza el cuadro de dilogo para abrir un archivo existente cuyo nombre desea guardar en el dibujo (u otra base de datos).

    Si el usuario especifica un nombre de archivo en el cuadro de dilogo, GETFILED devuelve una cadena que corresponde al nombre del archivo, en caso contrario, devuelve nil.

    La siguiente llamada a getfiled presenta el cuadro de dilogo Seleccionar un archivo Lisp: (getfiled "Seleccionar un archivo Lisp" "/acadr14/support/" "lsp" 8)

    La funcin GETFILED muestra un

    cuadro de dilogo con una lista que incluye todos los archivos con la extensin especificada que estn disponibles. Puede utilizar este cuadro de dilogo para buscar por los distintos directorios y unidades, seleccionar un archivo existente o especificar el nombre de uno nuevo.

  • 37

    COMMAND Ejecuta rdenes Autocad Sintaxis: (COMMAND [argumentos vlidos].....) Valor retornado: nil

    Los argumentos de la funcin command pueden ser cadenas, nmeros reales, nmeros enteros o puntos, segn solicite la secuencia de mensajes del comando ejecutado. Una cadena nula ("") equivale a pulsar RETURN en el teclado. La funcin command sin argumentos equivale a pulsar ESC y cancela la mayora de los comandos de AutoCAD.

    La funcin command devuelve nil. La funcin command evala los distintos argumentos y los enva a AutoCAD cada vez que aparece un mensaje que los solicita. Presenta como cadenas los nombres de los comandos y las opciones, como listas de dos nmeros reales los puntos 2D y como listas de tres nmeros reales los puntos 3D.

    (setq pt1 '(1 1) pt2 '(1 5)) (command "linea" pt1 pt2 "") (setq p1 '(10 20) p2 '(45 60) d 40) (command "linea" p1 p2 "" "circulo" p1 "d" d ) Se ejecuta: Comando: linea Desde el punto: p1 Al punto:p2 Al punto: "" Comando: circulo 3P/2P/TTR/:p1 Dimetro/ : d Dimetro : 40 Comando: nil

    Si el programa lisp se va a utilizar con versiones de AutoCAD para idiomas extranjeros, los nombres de los comandos deben ir precedidos de un subrayado ( _ ), para que puedan traducirse. Los comandos que se ejecutan mediante la funcin command no se reproducen en la lnea de comando si la variable de sistema CMDECHO est definida como cero. (setvar "CMDECHO" 0). Las funciones indicadas por el usuario getxxx (getangle, getstring, getint, getpoint, etc.) no se pueden utilizar dentro de la funcin command. Los comandos TEXTODIN y BOCETO de AutoCAD leen desde el teclado y el digitalizador directamente, por lo que no se pueden utilizar con la funcin command de AutoLISP. Se crea un grupo DESHACER explcitamente alrededor de cada comando utilizado con la funcin command. Si un usuario escribe H (o DESHACER) despus de ejecutar una rutina de AutoLISP, slo se deshar el ltimo comando. Si se introduce DESHACER ms veces, se retroceder por los comandos utilizados en dicha rutina. Si se desea que un grupo de comandos se considere un grupo (o toda la rutina), se utilizan las opciones Inicio y Fin de DESHACER. Si un comando de AutoCAD est activo y el smbolo PAUSE se encuentra predefinido como un argumento de la funcin command, esta funcin se interrumpir para que el usuario pueda escribir informacin.

    Ejemplo ejecutado a nivel de lnea de comandos: Comando: (setq centro '(10 20)) (10 20) Comando: (command "circulo" centro PAUSE "linea" centro PAUSE "") circulo 3P/2P/TTR/: Dimetro/: Comando: linea Desde el punto: Al punto:

  • 38

    OSNAP Aplica a un punto un modo de referencia Autocad Sintaxis: (OSNAP )

    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 GESTIN DE FICHEROS LOAD Carga un archivo Autolisp en la memoria y evala las expresiones en el archivo. Sintaxis: (LOAD [si falla] )

    nombre de fichero: cadena de caracteres con el nombre, sin extensin .lsp, del fichero. Si no se indica ningn camino se busca el fichero segn el camino de acceso a bibliotecas Autocad. . Una barra oblicua (/) o dos contrabarras (\\) son delimitadores de directorio vlidos. Si falla: valor vuelto por la funcin en el caso de que la carga del fichero fracase. Si no se proporciona este argumento, la funcin presenta un mensaje de error AutoLISP

    Valor retornado: El de la ltima expresin evaluada, si la carga es buena.

    Los ficheros que se quiere sean cargados al iniciarse la sesin del editor de dibujo tendrn que estar especificados en el fichero ACAD.LSP que Autocad carga automticamente.

    Estudiar este ejemplo despus de ver la funcin DEFUN

    (defun MI-FUNC1 (x) ...cuerpo de la funcin...) (defun MI-FUNC2 (x) ...cuerpo de la funcin. ) y el archivo prueba2.lsp no existe, entonces: (load "/luis/prueba1") devuelve MI-FUNC2 (load "\\luis\\prueba1") 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 funcin LOAD.

    OPEN Abre un archivo de disco para leer o almacenar datos Sintaxis: (OPEN )

    El argumento nombre de fichero es una cadena que especifica el nombre y la extensin del archivo que debe abrirse. clave de acceso: cadena de una letra minscula, es la etiqueta de lectura/escritura y debe contener una cadena de una sola letra en minsculas. En la tabla siguiente se describen las letras de modo vlidas.

    "r": Abre un fichero para lectura "w": Abre un fichero para escritura

    "a": Abre un fichero para escribir aadiendo nuevos datos al final del mismo. Sita el puntero al final del fichero abierto.2

    Valor retornado: El descriptor de fichero utilizado por las funciones de Entrada/Salida a fichero, por tanto se deber atribuir a un smbolo que permita referirse a ese descriptor.

    (setq a (open "archivo.ext" "r")) Si se tiene en cuenta que los archivos de los ejemplos siguientes no existen, (setq f (open "nueva.tst" "w")) devuelve (setq f (open "noesta.ahi" "r")) devuelve nil (setq f (open "registro" "a")) devuelve

    2 Nota En sistemas DOS, algunos programas y editores de texto escriben los archivos de texto con una marca de fin de archivo (CTRL Z, cdigo ASCII decimal 26) al final del texto. Cuando lee un archivo de texto, el DOS devuelve un estado de fin de archivo si encuentra una marca CTRL Z, aunque a sta le sigan ms datos. Si va a utilizar el modo "a" de OPEN para aadir datos a archivos creados en otros programas, cercirese de que stos no insertan marcas CTRL Z al final de sus archivos de texto.

  • 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 (setq f (open "\\x\\nueva.tst" "w")) devuelve CLOSE Cierra un archivo abierto Sintaxis: (CLOSE )

    El argumento smbolo correspondiente al descriptor de fichero es un descriptor de archivo que se obtiene mediante la funcin OPEN. Tras utilizar la funcin CLOSE, aunque el descriptor de fichero no cambia, deja de ser vlido. Los datos aadidos a un archivo abierto no se escriben realmente hasta que se cierra el archivo.

    Valor retornado: nil si descriptor_archivo es vlido, en caso contrario devuelve un mensaje de error.

    Por ejemplo, el siguiente cdigo calcula el nmero de lneas del archivo unarchivo.txt y define la variable ct en ese nmero.

    (setq fil "UNARCHIVO.TXT") (setq x (open fil "r") ct 0) (while (read-line x) (setq ct (1+ ct)) ) (close x) FINDFILE Localiza un archivo en la ruta de bsqueda de archivos de Autocad Sintaxis: (FINDFILE )

    Valor retornado: una cadena de caracteres con el nombre completo del archivo indicando la ruta de localizacin. La funcin FINDFILE no asigna el tipo o extensin del archivo especificado en nombre_archivo. Si nombre_archivo no especifica un prefijo de unidad/directorio en este argumento, FINDFILE busca en el camino de la biblioteca de AutoCAD. Si se escribe un prefijo de unidad/directorio, FINDFILE busca en dicho directorio. La funcin FINDFILE siempre devuelve un nombre completo de unidad/directorio/archivo o nil si el archivo especificado no se ha encontrado.

    El nombre completo que devuelve FINDFILE puede utilizarse con la funcin OPEN. Si el directorio actual es /acad y contiene el archivo abc.lsp. (findfile "abc.lsp") devuelve "/acad/abc.lsp"

    Si se est editando un dibujo en el directorio /acad/drawings, la variable de entorno ACAD se define como /acad/support, y el archivo xyz.txt slo existe en el directorio/acad/support.

    (findfile "xyz.txt") devuelve "/acad/support/xyz.txt" Si ninguno de los directorios del camino de bsqueda de la biblioteca contiene el archivo no esta. (findfile "noesta") devuelve nil

  • 41

    5.14. FUNCIONES DE LECTURA Y ESCRITURA 5.14.1. ESCRITURA PRIN1

    Imprime una expresin AutoLISP en el rea de rdenes o la escribe en un archivo abierto en modo de escritura.

    Sintaxis: (PRIN1 [expresin] [descriptor de fichero]) Valor retornado: el argumento de la expresin.

    Es posible llamar a la funcin prin1 sin argumentos, en cuyo caso devuelve (e imprime) la cadena nula.

    (setq a 123 b '(a)) (prin1 'a) 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 vlido para un archivo abierto para escritura,

    (prin1 "Hola" f) escribir "Hola" en el archivo indicado y devolver "Hola". PRINC

    Imprime una expresin AutoLISP en el rea de rdenes o la escribe en un archivo. (La diferencia con PRIN1 es que PRINC evala los caracteres de control que aparezcan en la expresin.).

    Sintaxis: (PRINC [expresin] [descriptor de fichero]) Valor retornado: el argumento de la expresin. PRINT

    Imprime un salto de lnea, una expresin AutoLISP y un espacio en el rea de rdenes o lo escribe en un archivo.

    Sintaxis: (PRINT [expresin] [descriptor de fichero]) Valor retornado: el argumento de la expresin PROMPT Presenta una cadena de caracteres en el rea de rdenes. (Evala caracteres de control) Sintaxis: (PROMPT ) Valor retornado: nil

    En las configuraciones de pantalla dual de AutoCAD, PROMPT muestra la cadena en ambas pantallas, por lo que resulta ms til princ.

    (prompt "Nuevo valor: " ) muestra Nuevo valor: en la(s) pantalla(s) WRITE-CHAR Escribe un solo carcter en el rea de rdenes o bien en un fichero abierto. Sintaxis: (WRITE-CHAR [descriptor de fichero]) El argumento nm es el cdigo ASCII decimal del carcter que debe escribirse. Valor retornado: El cdigo ASCII para los caracteres escritos. (write-char 67) devuelve 67 y escribe la letra C en la pantalla. Si se tiene en cuenta que f es el descriptor de un archivo abierto, (write-char 67 f) devuelve 67 y escribe la letra C en ese archivo.

  • 42

    WRITE-LINE

    Escribe una cadena de caracteres en al rea de rdenes o bien en un archivo (evala caracteres de control. Sintaxis: (WRITE-LINE [descriptor de fichero])

    Valor retornado: La cadena de caracteres. (write-line "Prueba" f) escribe Prueba y devuelve "Prueba" TERPRI Imprime un salto de lnea en el rea de rdenes. Sintaxis: (TERPRI) Valor retornado: nil 5.14.2. LECTURA READ-CHAR Lee caracteres procedentes del bufer del teclado o de un archivo abierto en modo de lectura. Sintaxis: (READ-CHAR [descriptor de fichero]) Valor retornado: El cdigo ASCII para el carcter ledo. Por ejemplo, si se tiene en cuenta que el bfer de entradas por teclado est vaco, (read-char)

    espera a que se escriban datos. Si introduce los caracteres ABC seguidos de RETURN, read-char devuelve 65 (el cdigo ASCII decimal correspondiente a la letra A). Las tres llamadas siguientes a read-char devuelven 66, 67 y 10 (lnea nueva), respectivamente. Si se efecta otra llamada, 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 leda. (Cuando se alcanza el final de un archivo de lectura el valor retornado es nil )

    Por ejemplo, si tiene en cuenta que f es un puntero de archivo abierto vlido, (read-line f) devuelve la siguiente lnea de entrada del archivo, o nil si ha llegado al final del archivo.

  • 43

    Ejemplo ejecutado a nivel de lnea de rdenes de Autocad: (SETQ A 10 B HOLA) HOLA (PRIN1 A) 1010 (PRIN1 \nCASA) \nCASA\nCASA (PRINC A) 1010 (PRINC \nCASA) CASA\nCASA (PRINT A) 10 10 (PRINT \nCASA) \nCASA \nCASA (PROMPT \nCASA) CASAnil (WRITE-CHAR A) 10 (WRITE-CHAR 67) C67 (WRITE-LINE B) HOLA HOLA (WRITE-LINE \nCASA) CASA CASA

  • 44

    5.15. FUNCIONES DE ORDENACIN ACAD_STRLSORT Ordena alfabticamente listas de cadenas de caracteres Sintaxis: (ACAD_STRLSORT lista)

    Valor retornado: La lista con las cadenas ordenadas alfabticamente. Si la lista no contiene cadenas o no hay memoria suficiente para realizar la orden