Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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
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.
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.
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.
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
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
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
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
getcorner Necesita un segundo punto en la pantalla y dibuja una ventana elástica desde un punto
anterior.
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.
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.
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.
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.
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.
Ejemplo:
(initget (+ 1 2 4))
(getint "\ n¿Cuántos años tienes ?:")
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:
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.
(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.
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:
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 .
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.
(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:
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:
! a Colocando el ! (carácter de exclamación) delante de la variable mostrará el valor o los valores de esa
variable.
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 .
(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) .
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)))
(/ (* a 180) pi)
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:
(strcat ab) devuelve dos cadenas en la variable a & b como una sola.
Devuelve una parte de una cadena, desde una posición específica, terminando al final u otra posición
especificada. p.ej:
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:
Á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:
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:
Miembro
Busca una coincidencia y devuelve eso y el resto de la lista, por ejemplo:
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:
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:
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 .
'(40 20) es el nuevo elemento sustituido por el antiguo elemento (40 5) c , que se encuentra en la lista b .
(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:
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.
0 Grados
2 Grads
3 Radianos
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:
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
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:
1 Científico
2 Decimal
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:
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:
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:
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
(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.
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
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.
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.
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.
http://www.cadtutor.net/tutorials/autolisp/quick-start.php 15/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor
(graphscr)
(setq a1 (ssget))
Le permite seleccionar los objetos que se cambiarán. El conjunto de selección se asigna a la variable al .
(setq a2 (entsel))
Este es un tipo especial de declaración de selección que le permite seleccionar solo una entidad.
(índice setq 0)
Esta declaración obtiene la lista de entidades de a2 . Por lo tanto, a2 se le asigna la lista de entidades.
(repetir n
http://www.cadtutor.net/tutorials/autolisp/quick-start.php 16/18
12/2/2018 Tutorial de AutoLISP | Inicio rápido de AutoLISP | CADTutor
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)
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)
)
(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)
)
http://www.cadtutor.net/tutorials/autolisp/quick-start.php 18/18