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

12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Inicio rápido de AutoLISP


por Kenny Ramage

Introducción
Este tutorial está dirigido a los usuarios de AutoCAD que desean comenzar a aprender AutoLisp. Sugiero
que siga este tutorial junto con la Guía de referencia de programadores de AutoCAD. A continuación, puede
buscar los comandos relevantes de AutoLisp para obtener una explicación más detallada. Espero que esto
te ayude a ti y a la buena suerte en tus Lisping - Kenny Ramage

Principios de programación
Todos los programas de AutoLisp deben contener el sufijo ".LSP", de lo contrario, AutoCAD no tendrá
acceso a ellos cuando carguen. (por ejemplo, CHTEXT.LSP).

Use un procesador de texto simple como el Bloc de notas para crear y editar sus archivos lisp.

Función (que es simplemente el programa)


Es un conjunto de instrucciones predefinido que describe un conjunto de acciones que AutoLisp debe
realizar, divididas en tres secciones:

OPERADOR - Obteniendo entrada.


ARGUMENTO - Manipulando la entrada.
COMANDO - Usando la entrada manipulada.

Charting
Dibuje o escriba en inglés lo que quiere que haga su programa.

Variables
Estos son como cuadros vacíos en los que almacenar datos, para usarlos más adelante. En AutoLisp, las
variables pueden ser una colección de letras o números, siempre que comiencen con las letras.

Ejemplo de variables legales son las siguientes:

UN
ARC1
PUNTO 1
PNT1
D3
http://www.cadtutor.net/tutorials/autolisp/quick-start.php 1/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Una variable de AutoLisp puede contener más de un valor en una sola variable. Un valor puede ser
cualquier cosa, como por ejemplo:

Número Real
Cuerda
Entero
Pickset

Por lo tanto, una variable puede almacenar casi cualquier cosa.

Estructuración
Estructure su programa de tal manera que sea fácil de entender, usted mismo y todos los demás. por
ejemplo, mantener declaraciones de entrada juntas. Mantenga sus argumentos juntos. Mantenga sus
comandos juntos. Sigue tu trabajo con el punto y coma. Cuando comienza una línea con punto y coma,
AutoLisp ignorará todo lo que escriba después. Se utiliza para la documentación y explicación de su
programa. Escriba notas sobre su programa, lo que está haciendo y cuáles son las variables. Un punto y
coma no tiene que comenzar la línea.

(prompt "Esta línea se imprimirá"); Este es un comentario

Desde donde comienza el punto y coma, el resto de la línea es una declaración de comentario.

Paréntesis ()
Los paréntesis son vitales para escribir programas de AutoLisp. Todos los comandos están rodeados por
paréntesis. AutoLisp usa paréntesis para anidar, lo que le permite escribir un comando que actúa sobre
(evalúa) otro comando. A su vez, ese comando puede actuar sobre otro. A medida que agrega paréntesis,
los comandos de anidación se vuelven cada vez más profundos. Recuerde salir del nido con el mismo
número de paréntesis.

Nota: siempre cierre lo que abra.

Defun (definir la función)


En AutoLisp, el nombre del programa o función debe definirse en la primera declaración, que se realiza
mediante el comando:

(nombre de función defun ()

cuerpo del programa

Defun es el primer comando real y es seguido por el nombre de la función (o programa). Defun encierra todo
el programa y su paréntesis de cierre viene después del cuerpo principal del programa. Hay diferentes
formas de iniciar una función, por ejemplo:

1. (defun drawline ()
De la primera manera, estás diciendo que todas las variables que planeas usar en el programa son
GLOBAL, que son variables que no pierden su valor una vez que finaliza el programa.

2. (defun drawline (/ pntl pnt2)


La segunda manera, estás diciendo que las variables que estás usando son variables LOCALES, que
son variables que tienen valor solo para ese programa y mientras ese programa se está ejecutando.

3. (defun C: drawline ()
La tercera forma, como la primera PERO la C: le dice a AutoCAD que trate esa función como
cualquier otro comando de AutoCAD.

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 2/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

4. (defun C: drawline (/ pntl pnt2)


La cuarta manera, como el segundo, pero un comando de AutoCAD.

5. (defun drawline (a / pntl pnt2)


La última variable a recibe el primer valor desde fuera del programa.

Tipos de datos
Los enteros
son números que oscilan entre -32768 y +32767 sin puntos decimales, por ejemplo: 1

Reals
Son números con un punto decimal, por ejemplo: 1.0

Las cadenas Las


cadenas son bits de texto y pueden tener una longitud máxima de 100 caracteres, por ejemplo: Punto 1

Listas
Una lista es una variable que tiene más de un elemento. Un punto en su dibujo se describe por el valor de la
coordenada X y el valor de la coordenada Y. En AutoLisp, ese punto puede describirse por una sola
variable, una lista de dos elementos, el primero es el valor X y el segundo es el valor Y, por ejemplo: (7 10) .
Los siguientes son también ejemplos de listas: (5 9 7 2) y (1.5 2.3 4.9) .

Átomos
Si una variable tiene un único valor indivisible, es un átomo. Por ejemplo, cada elemento en la lista anterior
es un átomo, por ejemplo, 6 o A

La función de tipo devolverá el tipo de datos de una variable. Por ejemplo:

(escribe "Mi nombre")

Volverá STR que significa "cadena". De hecho, puedes probar esto por ti mismo ahora. Escriba el código de
arriba en el símbolo del sistema de AutoCAD y presione enter.

Comandos de entrada (obtener información del usuario)


AutoLisp ofrece una serie de opciones para obtener diferentes tipos de datos del usuario.

Comandos de entrada

getpoint Te necesita para elegir un punto en la pantalla.

Getint Necesita un entero, por ejemplo: 1 .

ser Necesita un número real, por ejemplo: 10.00 . getreal


realistas

getcorner Necesita un segundo punto en la pantalla y dibuja una ventana elástica desde un punto
anterior.

Gettring Necesita una cadena de texto.

getdist Necesita un valor ya sea al seleccionar en la pantalla o un número del teclado.

getangle Necesita un ángulo, ya sea al señalar en la pantalla o al escribir un ángulo, que se devolverá

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 3/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

en radianes.

getkword Necesita una palabra clave del usuario.

getvar Obtendrá el valor de una variable de sistema de AutoCAD.

initget Establece varias opciones para el uso de la próxima función getxxx.

getorient Es similar al GETANGLE pero se ve afectado por la base de cero grados y la dirección.
Siempre le dará el ángulo absoluto usando 0 grados de base como ESTE.

Ejemplos de comandos de entrada


En cada uno de los siguientes ejemplos, ingrese el código en el indicador de AutoCAD para ver qué sucede.

1. (getpoint "\ nPick un punto en la pantalla:") Elija un punto cuando se le solicite y


AutoCAD devolverá el valor (XYZ) de ese punto.

Sugerencia: \ n es un carácter especial escapado que lo lleva a la siguiente línea (como un retorno
de carro). El carácter de barra diagonal le dice a AutoLisp que interprete el siguiente carácter como
un carácter especial en lugar de solo como una letra "n". La "n" siempre debe estar en minúscula. El
uso de "\ n" es puramente cosmético (no cambia la forma en que funciona el programa), pero hace
que todo sea mucho más fácil de leer para el usuario al iniciar cada solicitud en una nueva línea.

Precaución: su solicitud siempre debe estar entre comillas, " solicitud "; de lo contrario, obtendrá un
error.

2. (getint "\ nIngrese su edad:") Escriba un número entero (como 34) y AutoLisp devolverá
ese número.

3. (getreal "\ nIngrese un número:") Escriba un número real (como 10.51) y AutoLisp
devolverá ese número.

4. (getcorner pnt1 "\ nPick el segundo punto:") Creará una ventana elástica a partir de
la variable llamada "pnt1", que ya debe estar definida.

5. (getstring "\ n¿Cual es el día de hoy?:") Escriba un texto y Autolisp devolverá ese
texto.
O ...
(getstring T "\ n¿Cuál es su nombre completo?:") Este aviso le permite ingresar una
cadena de palabras separadas por espacios. Normalmente, AutoCAD interpretará un espacio de la
misma manera que interpreta un retorno de carro. El T es un símbolo especial de AutoLisp que
significa "verdadero", se usa para permitir espacios en la entrada de cadena. De hecho, puede usar
cualquier entero positivo (como 1) en lugar de T, pero el símbolo T ayuda a que el código sea más
comprensible.

6. (getdist "\ n¿Cuánto tiempo dura la línea?:") Elija dos puntos o escriba una longitud
y AutoLisp devolverá esa longitud.

7. (getangle "\ n¿Qué es el ángulo?:") Elija dos puntos para el ángulo o escriba un ángulo y
AutoLisp devolverá ese ángulo en radianes.

8. (initget 1 "Sí NO")


(getword "\ n¿Vas a ir? (Sí o NO):") Initget controlará la siguiente función getxxx y se
usará para especificar una lista de opciones o palabras clave válidas, getword aceptará solo una de
las palabras especifican usar initget. En este caso, las opciones son "Sí" o "No". El 1 es un bitcode
initget y significa que no se permite una respuesta nula. Consulte la sección a continuación para
obtener más detalles.

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 4/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Consejo: Al igual que en los comandos nativos de AutoCAD, cualquier palabra clave de opción
válida se puede ingresar simplemente escribiendo la parte superior de la palabra clave. Por lo tanto,
en el ejemplo anterior, para responder Sí al mensaje, solo debe escribir "y", pero para responder NO,
debe escribir "no". Esto se usa para evitar posibles ambigüedades cuando 2 o más opciones
comienzan con la misma letra.

9. (getvar "FILLETRAD") Devolvería el valor establecido de la variable de sistema FILLETRAD


(radio de redondeo), por ejemplo: 0. 5

10. (getorient "\ n¿Cuál es el ángulo?:") Elija dos puntos para el ángulo o escriba un
ángulo y AutoLisp devolverá un ángulo en radianes relativo a 0 grados en Este.

Códigos de bit de inicio


El número 1 después de la función de inicio en el ejemplo de código 8, arriba se conoce como código de
bit de inicio. Los códigos de bit de inicio pueden usarse para controlar qué tipo de entradas están permitidas.
En este ejemplo, 1 se usa para rechazar una entrada nula. Esto obliga al usuario a ingresar una de las
palabras clave de opción especificadas en lugar de simplemente presionar el retorno de carro.

Códigos de bit de inicio

1 No permitir entrada nula.

2 No permitir valores cero

4 No permitir valores negativos

8 NO verifique los límites, incluso si LIMECHECK está encendido.

dieciséis Devuelve puntos 3D en lugar de puntos 2D.

32 Use líneas discontinuas al dibujar la goma o la caja.

Ejemplo:

(initget (+ 1 2 4))
(getint "\ n¿Cuántos años tienes ?:")

Solo aceptará un entero positivo distinto de cero, por ejemplo: 21

Comando Setq
Abreviatura de (Establecer igual) o hacer una cosa igual a otra.

(setq) es un comando de asignación, por ejemplo: asigna el valor de una variable o constante a otra
variable.

Nota: (setq) es el comando de asignación principal en AutoLisp. El "=" (igual al carácter) no se usa como
una asignación en AutoLisp. Se usa el carácter igual, pero solo como una declaración de no asignación. No
tiene la capacidad de hacer que una variable sea igual a otra que en otros lenguajes de programación (se
usa para comparar variables, números o cadenas).

(setq ab)
Esta instrucción asigna el valor de b a la variable a para que a se convierta en lo mismo que b y b no se
modifique.

Nota: La primera variable después de (setq) es la que recibe el valor. Ten cuidado con esto porque es una
posible causa de confusión.

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 5/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Comandos de impresión
Rápido
(rápido "Quizás necesites un descanso")

Este comando se usa simplemente para imprimir un mensaje en la línea de comando. No se incluye un
avance de línea ( \ n ), por lo que dos comandos de solicitud consecutivos imprimirán ambos mensajes en
la misma línea y sin espacios entre ellos. Por lo tanto, cualquier impresión después del aviso debe ser
precedida por la función (terpri) o \ n .

Terpri
Este es un avance de línea que hace que el siguiente texto impreso aparezca en la siguiente línea. Por lo
general, sigue el comando de solicitud. p.ej:

(pregunta "Hola, ¿cómo estás?") (terpri)


o
(pregunta "\ nHola, ¿cómo estás?")

Prin1
Esta función imprime la expresión en la pantalla y devuelve la expresión. Puede ser cualquier expresión y no
solo necesita ser una cadena. La expresión también se puede escribir en un archivo y aparecerá en el
archivo exactamente como lo haría en la pantalla.

(prin1 "Hola") imprimiría "Hola" .

(prin1 a) imprimiría el valor de la variable a .

(af prin1) imprimiría el valor de la variable de una a un archivo abierto llamado en la variable f .

Princ
Es lo mismo que prin1 excepto que los caracteres de control ("") no se imprimen. También se puede usar
para imprimir una línea en blanco al no usar ninguna declaración después de princ.

(princ "Hola") imprimiría Hello .

Impresión
Igual que prin1 excepto que se imprime una nueva línea antes de la expresión y se imprime un espacio
después de la expresión.

Setvar
Esta función establece una variable de sistema de AutoCAD para un valor dado y devuelve ese valor. El
nombre de la variable debe estar entre comillas dobles. p.ej:

(setvar "blipmode" 0) devuelve 0 y desactivará blipmode. 1 lo volvería a encender.

Hacer aritmética
AutoLisp proporciona una serie de funciones aritméticas y, aunque el formato de estas funciones es
coherente con otras funciones de AutoLisp (función primero, seguido de valores), no es familiar con la
escuela. Lo importante para recordar es que el orden de los valores es consistente con lo que ya sabemos.
En otras palabras (/ 27 3) es lo mismo que 27 dividido por 3.

(+ 1 1) devuelve 2 .

(- 2 1) devuelve 1 .

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 6/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

(* 2 2) devuelve 4 .

(/ 2 1) devuelve 2 .

(1+ 1) devuelve 2 (incrementado).

(1- 2) devuelve 1 (Decrementado).

Polar
Esta función devuelve el punto en un ángulo (en radianes) y la distancia desde un punto dado.

(polar pnt1 ang1 dist1) donde pnt1, ang1 y dist1 son 3 variables previamente asignadas.

Inters
Examina dos líneas y devuelve el punto donde se cruzan, incluso si no se cruzan físicamente entre sí.

(inters pnt1 pnt2 pnt3 pnt4) donde pnt1 y pnt2 son los puntos finales de una línea y pnt3 y pnt4
son los puntos finales de otra.

Comandos de AutoCAD en AutoLISP


Cualquier comando de AutoCAD se puede utilizar dentro de su programa de ceceo PERO uno debe
recordar que se deben usar exactamente como lo haría en AutoCAD y su RETORNO es un conjunto doble
de Presupuestos (""). p.ej:

(comando "línea" pnt1 pnt2 "") dibuja una línea desde pnt1 a pnt2 y "" actúa como un retorno para
terminar el comando.

No todos los comandos requieren terminación ya que algunos, como el círculo, se terminan
automáticamente.

(comando "círculo" cen cir) donde cen es el centro del círculo y cir es un punto en la
circunferencia.

Puede probar esto usando algunos valores en el símbolo del sistema para ver cómo funciona esto:

(comando "círculo" "100,100" "150,150")

Nota: los valores en las expresiones deben estar entre comillas, mientras que los nombres de las variables
no.

El siguiente código dibujará un cuadrado usando una polilínea, especificando 4 puntos y luego C para
cerrar:

(comando "pline" "50,50" "50,70" "70,70" "70,50" "c")

Elementos de una lista


Cuando usaste (setq a (getpoint)) asignaste los números de coordenadas X e Y a la variable
a . Esa variable ahora es una lista que puede parecerse a (5 10) . Si desea ver la lista en la variable a ,
AutoLISP le ofrece una forma conveniente de hacerlo desde la línea de comando.

! a Colocando el ! (carácter de exclamación) delante de la variable mostrará el valor o los valores de esa
variable.

Coche (coordenada X o primer elemento)

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 7/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

El comando principal para separar una lista, (carro) le da el primer elemento de una lista. Si el valor de la
variable a es la lista (5 10) , entonces:

(setq b (carro a)) asignaría a la variable b el valor del primer elemento en a que es 5 .

Cdr (segundo y elementos restantes)


Este es el comando secundario para separar una lista. (cdr) le da el segundo y los restantes elementos de
la lista, en otras palabras; todo después del primer elemento. Si el valor de la variable a es la lista (2 5 7 9
11) , entonces:

(setq b (cdr a)) asignaría a la variable b el segundo y los elementos restantes de la lista en la variable
a que es (5 7 9 11) .

Cadr (coordenada Y o 2 ° elemento)


Esto siempre produce el segundo elemento de una lista. Suponiendo que el valor de la variable a es la lista
(5 10) , entonces:

(setq b (cadr a)) le daría a b el valor 10 .

Caddr (coordenada Z o tercer elemento)


Esto siempre produce el tercer elemento de una lista. Suponiendo que el valor de la variable a es la lista (3
7 5), entonces:

(setq c (caddr a)) asignaría el valor 5 a la variable c .

Programas de ejemplo
Dibujando cosas
Este programa dibuja un rectángulo señalando dos puntos
(defun c: retan (/ pl p2 p3 p4)
(setq pl (getpoint "\ nprimera esquina del rectángulo:"))
(setq p3 (getcorner "\ nsegunda esquina del rectángulo:"))
(setq p2 (list ) (cadr p3)))
(setq p4 (lista (coche p3) (cadr pl)))
(comando "línea" pl p2 p3 p4 "c")
(princ)
)

Conversión de datos
(dtr) convierte grados a radianes
(defun dtr (a)

(* pi (/ a 180)))

(rtd) convierte radianes a grados


(defun rtd (a)

(/ (* a 180) pi)

Cosas para cuerdas


strcase (caja de cuerdas)

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 8/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Cambia una cadena de texto de minúscula a mayúscula, dejando caracteres en mayúscula tal como están.
p.ej:

(strcase "Hola") devuelve "HOLA"

(strcase a) devuelve los caracteres alfabéticos en la variable a desde minúsculas a mayúsculas.

strcat (gato de cuerda)

Devuelve dos o más cadenas separadas como una. p.ej:

(strcat "H" "ello") devuelve "Hello"

(strcat ab) devuelve dos cadenas en la variable a & b como una sola.

strlen (longitud de la cuerda)

Devuelve la longitud de los caracteres de una cadena. p.ej:

(strlen "hola") devuelve 5 .

(strlen a) devuelve la longitud de una cadena en la variable a .

substr (cadena sustituta)

Devuelve una parte de una cadena, desde una posición específica, terminando al final u otra posición
especificada. p.ej:

(substr "Hello 2 " devuelve "ello" .

(substr "Hello 2 1) devuelve " e " .

(substr "Hola" 3 2) devuelve "ll"

Manipulación de lista
El carácter de apóstrofo ' cumple una función especial en AutoLISP. Por ejemplo, si un grupo de elementos
está precedido por un apóstrofo, se trata como una lista. p.ej:

'(20 10 5) se trata como una lista.

Ángulo
Devuelve un ángulo entre dos puntos en radianes. Para usar ese ángulo en AutoCAD, debe convertirlo a
grados decimales. por ejemplo: (setq a (ángulo pnt1 pnt2)) establece el ángulo entre pnt1 y pnt2
a la variable a .

Para usar un :

(comando "texto" pnt1 "40" at) El comando de texto con una altura de 40 , ángulo de rotación
asignado a la variable a y una cadena de texto a la variable t . Pero a no es el ángulo de rotación correcto
porque está en radianes.

Adjuntar
Toma cualquier cantidad de listas especificadas y las une en una sola lista. p.ej:

(append '(10 20)' (30 40)) devuelve la lista: (10 20 30 40) .

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 9/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

(anexar ab) devuelve la lista en la variable una y la lista en la variable b como uno.

Distancia
Mide la distancia desde dos puntos conocidos. p.ej:

(setq dist1 (distancia pnt1 pnt2)) devuelve la distancia entre pnt1 y pnt2 y asigna la distancia
a una variable llamada dist1 .

Longitud
Devuelve la cantidad de elementos en una lista. p.ej:

(length '(abcd)) devuelve 4 .

Miembro
Busca una coincidencia y devuelve eso y el resto de la lista, por ejemplo:

(miembro 'c' (abcde)) devuelve (cde) .

Enésimo
Devuelve el enésimo elemento en una lista, donde n es el número del elemento a devolver. (Cero es el
primer elemento). p.ej:

(nth 3 '(abcd)) devuelve d .

Assoc (asociativo)
A menudo se usa con la función (subst) ; la función (assoc) le permite buscar un elemento específico
y luego asignar ese elemento a una variable.

Supongamos que la variable b es la lista ((10 5.5 2.7) (40 5)) y está buscando un valor 40 . Desea extraer
todo el elemento y asignarlo a una variable c . p.ej:

(setq c (assoc 40 b))

Esto asigna el elemento completo que contiene el 40 en la lista b a la variable c . Ahora c es una lista que
se ve así: (40 5) .

Subst (sustituto)
Le permite sustituir un aspecto por otro. Cuando sustituya SIEMPRE, sustituya el nuevo elemento por el
anterior en la lista. Ahora sustituyamos 20 por 5 en la variable c .

(setq b1 (subst '(40 20) cb))

Ahora b1 es la nueva lista.

'(40 20) es el nuevo elemento sustituido por el antiguo elemento (40 5) c , que se encuentra en la lista b .

Si quieres usar una variable que represente el valor ...

(setq bl (subst '(40 h) cb)) ... parece que debería funcionar, pero no es así. El nuevo elemento
se verá así: (40 h) .

(subst) no puede interpretar variables. Necesita construir una nueva variable que contenga todo el
elemento de la lista, luego use la nueva variable en la función (subst) .

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 10/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Contras (construir)
Construye una nueva lista con el nuevo elemento colocado al principio. Supongamos que la variable c
contiene la siguiente lista: (40 5) . Además, supongamos que la variable h contiene el número real 20.0 y
luego:

(setq d (contras (coche c) h)) Recuerde, (carro c) le da 40 . Por lo tanto, (carro c) es el


primer elemento nuevo, seguido del valor de h . Por lo tanto, produce una nueva lista d (40 20.0) .

Ahora sustituimos:

(setq b1 (subst dcb)) que sustituye el elemento nuevo encontrado en la variable d por el antiguo
elemento encontrado en la variable c . (En la lista que se encuentra en la variable b ) y asigna la nueva lista
a b1 .

Conversiones
Angtos (ángulo a la cuerda)
Toma un ángulo en radianes y lo convierte en una cadena, usando un formato específico. Angtos tiene dos
argumentos, el primero controla el formato y el segundo controla la precisión.

Formato de modo Angtos

0 Grados

1 Grados / minutos / segundos

2 Grads

3 Radianos

4 Unidades del agrimensor

Asumiendo que la variable a tiene un ángulo en radianes. p.ej:

(angtos a 0 4) devuelve "180.0000" donde 0 es el formato (grados) y 4 es la precisión, en este caso, 4


decimales.
(angtos a 0 0) devuelve "180"
(anglos a 1 4) devuelve "180d0" 0 ""

Fijar
Esta función devuelve la conversión de un número real a un número entero y descarta el resto. p.ej:

(arreglo 8) devuelve 8
(arreglo 8.6) devuelve 8

Flotador
Esta función devuelve la conversión de un entero a un número real. (Se puede usar real o entero). Por
ejemplo:

(float 8) devuelve 8.0000


(float 8.6) devuelve 8.6000

Ascii
Devuelve la conversión del primer carácter de una cadena en su código de carácter ASCII. (un entero) por
ejemplo:
http://www.cadtutor.net/tutorials/autolisp/quick-start.php 11/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

(ascii "a") devuelve 97


(ascii "A") devuelve 65 , los caracteres en mayúscula y minúscula tienen diferentes códigos de
caracteres ascii.
(ascii "AZUL") devuelve 66
(ascii "BOLA") devuelve 66 , solo se evalúa el primer carácter.

Chr
Devuelve la conversión de un Entero que representa un código de carácter ASCII en una sola serie de
caracteres. p.ej:

(chr 65) devuelve "A"


(chr 66) devuelve "B"

Atof (ascii para flotar)


Devuelve la conversión de una cadena en un número real. p.ej:

(atof "9.3") devuelve 9.3000


(atof "2") devuelve 2.0000

Rtos (real a cadena)


Devuelve la conversión de un número real a una cadena con un formato específico.

Formato de modo Rtos

1 Científico

2 Decimal

3 Ingeniería (pies y pulgadas decimales)

4 Arquitectónico (pies y pulgadas fraccionales)

5 Unidades fraccionarias arbitrarias

El número real se puede establecer de acuerdo con el modo y la precisión. p.ej:

(rtos 7.2 1 4) devuelve "7.200OE + 00"


(rtos 7.2 2 2) devuelve "7.20"

Itoa (entero a ascii)


Devuelve la conversión de un entero en una cadena. p.ej:

(itoa 25) devuelve "25"

Atoi (ascii a entero)


Devuelve la convención de una cadena en un entero. p.ej:

(atoi "25") devuelve 25

Condicionales
En AutoLisp, el carácter igual ( = ) no es una función de asignación. En otras palabras, no se usa para
asignar un valor a una variable como lo es en otros lenguajes de programación. AutoLisp usa la función
(setq) para realizar esta tarea. En AutoLisp, el caracter igual se usa para probar si los elementos son
iguales, no los hace iguales. Esto es muy útil si estamos tratando de probar ciertas condiciones. Por

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 12/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

ejemplo, podemos comenzar a construir pruebas con un resultado como "si una cosa es igual a otra cosa,
haz algo". De eso se tratan los condicionales; Permiten que su programa tome decisiones.

Si
(if) es la declaración estándar if-then-else. En AutoLISP, solo puede hacer coincidir una instrucción if con
una instrucción then. p.ej:

(si (= ab) (setq b 5 (setq b 6))

Si a es igual a b , entonces a b se le asignará el valor 5 . Si no lo es, entonces a b se le asignará el valor 6 .

Cond (condicional)
Esta función acepta cualquier número de listas como argumentos. Evalúa el primer elemento en cada lista
(en el orden proporcionado) hasta que uno de estos elementos sea un valor distinto de cero. por ejemplo: la
cadena de respuesta de un usuario es una variable s .

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

Esta función prueba la respuesta y devuelve 1 si es "Y" o "y", y 0 si es "N" o "n", y nula de lo contrario.

Repetir
Similar a un bucle, pero repetir solo pasará por los comandos tantas veces como se le indique. p.ej:

(setq a 10)
(setq b 100)
(repeat 3
(setq a (+ a 10))
)
(setq b (+ ba))
)

Devuelve 140 .

Mientras
Hay otro comando de control de bucle disponible en AutoLISP. Un bucle es necesario si desea repetir un
comando. Sin embargo, a menos que tenga una forma de controlarlo, el programa funcionará para siempre
y lo colgará. p.ej:

(setq a "w") Configura la variable de control en un valor distinto de nil.


(mientras que a El bucle continuará, comenzando con los comandos que siguen, hasta que la variable
a se establezca en nil .
(... algunas funciones ...) Son las funciones que se realizan en el bucle.
(if (= cd) (setq a nil) )) Evalúa si c es igual a d , y si es así, establece la variable de control de
bucle a a nil para finalizar el bucle
) . Un paréntesis de cierre cierra el bucle, y el programa continuará con los comandos después de esto.

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 13/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Entidades
Una entidad es el objeto más pequeño que puede colocar en su pantalla. Las siguientes son entidades:
LINE, CIRCLE, ARC, TEXT, POLYLINES, etc. Las entidades se almacenan y se referencian en la base de
datos de dibujos. Se pueden cambiar y manipular utilizando AutoLISP para satisfacer sus necesidades.
Cada entidad tiene una definición masiva en la base de datos de AutoCAD. Por ejemplo: los datos para una
sola línea contienen la siguiente información:

Nombre de la entidad, tipo de entidad, capa, color, coordenada XY inicial, coordenada EY final, tipo de línea,
etc. Puede modificar cualquiera de los aspectos anteriores. Un ejemplo de una lista de entidades:

(- 1 <Nombre de la entidad: 60000014) (0 "CIRCULO") (8. "LAYER1")

(10. 50,000 100,000) (40. 60,000)

Es una lista de entidades de un círculo en la capa LAYER1, punto central relativo a 0,0 de 50.0.100.0, y un
radio de 60.0

Entsel y Ssget (entidades selectas y conjuntos de selección)


Ambos le dan una forma de seleccionar las entidades para el conjunto de selección. (entsel) solo
selecciona una entidad a la vez. No puede usar WINDOW o CROSSING para seleccionar entidades.
(ssget), sin embargo, use VENTANA o CRUZANDO, así como otras técnicas de selección. Va a ser en
su mayoría utilizando (ssget) .

(setq a (ssget)) le pedirá que seleccione objetos. Ahora ha creado un conjunto de selección con un
nombre específico, <Conjunto de selección: l>, asignado a la variable a , o use la opción de filtro (setq a
(ssget "X" '((0. "TEXTO")))) para buscar base de datos para ciertas entidades o códigos.

Ssname (obtener el nombre de la entidad)


Le permite asegurar el nombre de la entidad. El nombre de la entidad es realmente un número hexadecimal,
por lo tanto, no espere ver un nombre como LINE, o CIRCLE, etc. El nombre de su entidad podría ser
60000018.

Supongamos que la variable a es el conjunto de selección y la variable i se establece en 0 . (setq i 0)


Para configurar la variable del contador. (setq na (ssname ai)) . Esto asigna na el nombre de la
entidad que se encuentra en el conjunto de selección a en el número de índice i . Recuerde que un
conjunto de selección puede contener más de un nombre de entidad. Puede señalar cada entidad utilizando
su número relativo en el conjunto de selección. por ejemplo: la entidad 1 es el índice 0, la entidad 2 es el
índice 1, etc.

Entget (obtener la lista de entidades)


Este comando realmente extrae o extrae la lista de entidades. La lista de entidades se puede asignar a una
variable. (setq b (entget na)) que asigna a b toda la lista de entidades para ese nombre de entidad.

Subst (sustituye nuevo por viejo)


Le permite sustituir un aspecto por otro. Supongamos que la variable b es el nombre de la lista y la variable
c contiene el valor del elemento: (40. 60.0000) (setq bl (subst '(40.30.0000) cb)) ; bl es
ahora la nueva lista. '(40. 30.0000) es el nuevo elemento sustituido por el antiguo elemento c que se
encuentra en la lista b .

Sslength
Te da la longitud o el número de selecciones realizadas.

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 14/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Entmod (modificación de entidad)


Te da la posibilidad de tomar la lista de entidades recientemente modificada y escribirla en la base de datos
para actualizar el dibujo. Ahora que tiene una nueva lista en la variable b1 , quiere hacer bl la lista
permanente en su base de datos de dibujos. (entmod bl) Debería ver el cambio aparecer en la pantalla.

Más ejemplos
Cambiar el ángulo cruzado del cabello
Este programa le permite dibujar líneas perpendiculares a otras líneas. El programa mide el ángulo de la
línea elegida y desplaza el ángulo de SNAP al ángulo de esa línea. Use ORTHO ON y dibuje perpendicular
a su línea elegida.

(defun c: perpdon (/ ab pntl pnt2 angl) (graphscr)


(setq a (entsel))
(setq b (entget (car a)))
(setq pntl (cdr (assoc 10 b)))
(setq pnt2 (cdr) (assoc 11 b)))
(setq angl (ángulo pntl pnt2))
(setvar "snapang" ang1)
(princ)
)

(defun c: perpdoff (setvar "snapang" 0)


(princ)
)

Borrar pantalla
Borra todo en la pantalla de dibujo. Si se encuentra en una posición ZOOM TODO, el programa borra todo
dentro de los límites del dibujo.

Nota: si invoca accidentalmente este comando, puede recuperarlo con OOPS .

(defun c: erasescr (/ lu)


(setq l (getvar "limmin"))
(setq u (getvar "limmax"))
(comando "borrar" "w" lu "")
(princ)
)

Cambiar capa
Le permite seleccionar objetos por cualquier método de selección y cambiar su capa. La capa objetivo se
elige simplemente apuntando a un objeto en la capa deseada. Todos los objetos seleccionados cambiarán a
esa capa objetivo. Para probar este programa, deberá crear un dibujo con objetos en diferentes capas.

(defun c: chlayer (/ a1 a2 n índice b1 b2 d1 d2 b3)


(graphscr ) (solicite
"\ nseleccione entidades para cambiar:")
(setq a1 (ssget))
(solicitud "\ npoint a entity on target layer: ")
(setq a2 (entsel))
(setq n (sslength a1))
(setq índice 0)

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 15/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

(b2 setq (entget (a2 coche)))


(d2 setq (Assoc 8 b2))
(repetición de n
(b1 setq (entget (nombre ssname a1)))
(setq d1 (assoc 8 b1))
(setq b3 (subst d2 d1 b1))
(entmod b3)
(índice setq (+ índice 1))
)
(princ)
)

Ahora examinemos el programa línea por línea.

(defun c: chlayer (/ a1 a2 n índice b1 b2 d1 d2 b3)

Define la función con todas las variables locales.

(graphscr)

Cambios a la pantalla de gráficos.

(solicite "\ nSeleccione entidades para cambiar:")

Esta es una declaración rápida.

(setq a1 (ssget))

Le permite seleccionar los objetos que se cambiarán. El conjunto de selección se asigna a la variable al .

(prompt "\ npoint to entity on target layer:")

Esta es una declaración rápida.

(setq a2 (entsel))

Este es un tipo especial de declaración de selección que le permite seleccionar solo una entidad.

(setq n (sslength a1))

Mide el número de entidades en el conjunto de selección en la variable a1 .

(índice setq 0)

Establece la variable llamada índice en 0 .

(setq b2 (entget (coche a2)))

Esta declaración obtiene la lista de entidades de a2 . Por lo tanto, a2 se le asigna la lista de entidades.

(setq d2 (assoc 8 b2))

Esto busca el código 8 en la lista de entidades a2 , luego asigna la sublista a d2 .

(repetir n

Esto inicia el ciclo que se abre en el conjunto de selección.

(setq bl (entget (nombre de ss a1 índice)))

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 16/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

Esto obtiene la lista de entidades y la asigna a b1 .

(setq d1 (assoc 8 b1))

Obtiene el código de sublista 8 (la capa).

(setq b3 (subst d2 d1 b1))

Sustituye la nueva capa d2 para la antigua capa d1 en la lista de entidades a1 y la asigna a la nueva lista
de entidades b3 .

(entmod b3)

Actualiza la nueva lista de entidades en la base de datos.

(índice setq (+ índice 1))

Aumenta la variable de índice en 1 , lo que lo prepara para el siguiente ciclo. El primero ) cierra el ciclo de
repetición. (princ) sale silenciosamente. El segundo ) cierra la función.

Texto sustitutivo
Este programa te permite elegir una línea de texto y sustituirla por otra línea exactamente en el mismo lugar.

(defun c:subtext (/ a b d e d1 b1 y)
(prompt "\nSelect text line: ")
(setq a (entsel))
(setq b (entget (car a)))
(setq d (assoc 1 b))
(prompt (cdr d))(terpri)
(setq e (getstring 1))
(setq d1 (cons (car d) e))
(setq b1 (subst d1 d b))
(entmod b1)
(setq y (getstring "\nIs this correct - Y : "))
(if (= (srtcase y) "N") (entmod b))
(princ)
)

Text - Own Distance, Own Height


This program lets you change the distance between multiple text lines. In addition to the standard start point
and height, you are asked to enter the distance between text lines. You may enter as many text lines as you
wish. To stop the program, enter an asterix (*).

(defun tex (/ p1 a b c d e f)
(setq pl (getpoint "\nStarting point: "))
(setq a (getdist p1 "\nEnter height: "))
(setq c (getdist p1 "\nline spacing: "))
(setq d "T")
(while d
(setq e (getstring 1 "Text: "))
(command "text" pl a "0" e)
(setq pl (list (car p1)(- (cadr p1) c)))
(setq f (getstring))
(if (= f "*")(setq d nil))

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 17/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor

)
(princ)
)

Global Text Height Change


This program allows you to globally change the size of text within a WINDOW or CROSSING without
affecting other entities.

(defun chtext (/ a ts n index b1 b c d b2)


(setq a (ssget))
(setq ts (getreal "\nEnter new text size"))
(setq n (sslength a))
(setq index 0)
(repeat n
(setq b1 (entget (ssname a index)))
(setq index (1+ index))
(setq b (assoc 0 b1))
(if (= "TEXT" (cdr b))
(progn
(setq c (assoc 40 b1))
(setq d (cons (car c) ts))
(setq b2 (subst d c b1))
(entmod b2))))
(princ)
)

Ads by Google AutoCAD Learn Auto CAD Afralisp

http://www.cadtutor.net/tutorials/autolisp/quick-start.php 18/18

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