0% encontró este documento útil (0 votos)
323 vistas23 páginas

Guía de AutoLISP para AutoCAD

El documento describe el lenguaje de programación Autolisp, desarrollado para trabajar con AutoCAD. Explica los tipos de datos que se pueden utilizar como listas, números, cadenas y objetos de AutoCAD. También presenta funciones para crear y manipular variables, llamar comandos de AutoCAD, realizar operaciones aritméticas y lógicas, y crear y extraer elementos de listas. Finalmente, describe estructuras básicas de programación como condicionales e iteraciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
323 vistas23 páginas

Guía de AutoLISP para AutoCAD

El documento describe el lenguaje de programación Autolisp, desarrollado para trabajar con AutoCAD. Explica los tipos de datos que se pueden utilizar como listas, números, cadenas y objetos de AutoCAD. También presenta funciones para crear y manipular variables, llamar comandos de AutoCAD, realizar operaciones aritméticas y lógicas, y crear y extraer elementos de listas. Finalmente, describe estructuras básicas de programación como condicionales e iteraciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

AUTOLISP.

- Lenguaje de programacin basado en el


lenguaje LISP adaptado para trabajar con AUTOCAD
LISP -> LIST PROCESSING (Procesamiento de listas)
LISTA
Separador (espacio en blanco)

(elem1 elem2 )

Parntesis de Parntesis de
Apertura Elementos Cierre
variable
smbolo Internas de AUTOLISP
funcin
Definidas por el usuario
elemento
numricas
constantes
textuales
listas

TIPOS DE OBJETOS Y DATOS EN AUTOLISP


Listas
Enteros
Reales
Cadenas
Nombres de Objetos en Autocad.- Representan el nombre
hexadecimal de un objeto de dibujo en la base de datos. Ejemplo
<6080756>
Conjuntos designados de AUTOCAD.- Valores que representan un
conjunto de seleccin de objetos. Ejemplo <Selection set:4>
CREAR Y ASIGNAR VALORES A VARIABLES
(SETQ variable1 expresion1 [variable2 expresion2 ])
Ejemplo:
(setq x 5 y UNPRG z (a b) w (+ 25 2))

!x !y !z !w
5 UNPRG (A B) 27

LLAMAR A UN COMANDO DE AUTOCAD


(COMMAND comando argumentos)
Ejemplo:
(command line 50,50 100,100 150,50 c)
(command circle 120,80 30.5)
(setq C (120 180) R 25)
(command circle C R )
OPERACIONES

O. ARITMTICAS

SUMAR
(+ num1 num2 )
Ejm.:
(setq x 5 y 2)(setq z (+ 3 x y))

RESTAR
(- num1 num2 )
Ejm.:
(setq a 10 b 5 c 2)(setq d (- a b c))

MULTIPLICAR
(* num1 num2 )
Ejm.:
(setq a 5 b 10 c 2)(setq d (+ a b c))
DIVIDIR
(/ num1 num2 )
Ejm.:
(setq a 100 b 2 c 5)(setq d (/ a b c))

(/ 7 2) 3 (/ 7 2.) 3.5

(setq a 7 b 2)(setq c (/ a b)) 3


(setq c (/ (float a) b)) c 3.5

O. DE COMPARACIN
(= cadena_o_num1 cadena_o_num2 )
Ejm.:
(setq x1 5 x2 7)(= x1 x2) nil
(setq x1 5 x2 5)(= x1 x2) T

(/= cadena_o_num1 cadena_o_num2 )


Ejm.:
(setq x1 5 x2 5)(/= x1 x2) nil
(setq x1 5 x2 10)(/= x1 x2) T
(< cadena_o_num1 cadena_o_num2 )
Ejm.:
(setq v1 10 v2 20 v3 15)(< v1 v2 v3) nil
(< v1 v3 v2) T

(<= cadena_o_num1 cadena_o_num2 )


Ejm.:
(setq v1 10 v2 15 v3 15 v4 25)(< = v1 v2 v3 v4) T
(< = 1 1.5 1.3 1.6 1) nil

(> cadena_o_num1 cadena_o_num2 )


Ejm.:
(setq v1 25 v2 31 v3 45)(> v3 v2 v1) T
(setq v1 25 v2 25 v3 30) (< v3 v2 v1) nil

(>= cadena_o_num1 cadena_o_num2 )


Ejm.:
(setq v1 32 v2 24 v3 16 v4 16)(>= v1 v2 v3 v4) T
O. LGICAS
(AND expr1 expr2 ) Devuelve T si todas son T
Ejm.:
(and (> 2 1) (= 2 2) (< 1 2)) T
(and (> 2 1) (= 2 2) (< 1 2) (<= 5 0)) nil

(OR expr1 expr2 ) Devuelve nil si todas son nil


Ejm.:
(setq n1 20 n2 20 n3 30)
(or (< n1 n2) (> n1 n2) (> n2 n3)) nil
(or (<= n1 n2) (/= n1 n2)) T

(EQUAL expr1 expr2 [aproximacion])


Ejm.:
(setq l1 (20 10 0) l2 (20 10 0) l3 (10 30 10))
(equal l1 l2) T
(equal l1 l3) nil

(setq n1 5.3852 n2 5.3850)


(equal n1 n2) nil
(equal n1 n2 0.005) T
(NOT expr_unica)
Ejm.:
(setq n1 20 n2 30)(not (< n1 n2)) nil
( not (> n1 n2)) T

FUNCIONES INTERNAS

NOMBRE SINTAXIS EJEMPLOS

Raiz cuadrada (SQRT num) (sqrt 4) 2.0


Seno (SIN ang) (sin 1.0) 0.841471
Coseno (COS ang) (cos 0.0) 1 (cos pi) -1
Arco tangente (ATAN num1 [num2]) (atan 1) (atan 4 3)
Carcter (CHR int) (chr 65) A
Logaritmo natural (LOG num) (log 2) 0.693147
Antilogoritmo natural (EXP num) (exp 1) 2.71828
Truncar (FIX num) (fix 2.3) (fix 9.9)
Valor absoluto (ABS num) (abs -100) 100
Maximo (MAX num1 num2 ) (max 4.07 -144) 4.07
Minimo (MIN num1 num2 ) (min 7 3.0 2 48 5) 2
potencia (EXPT base expon) (expt 2 3) 8.0
(/ (* (atan 4 3) 180) pi) 53.1301
(/ (* (atan 1) 180) pi) 45

TRADUCCIN DE FRMULAS

FRMULA TRADUCCIN

m1m2
F G 2 (setq F (/ (* G m1 m2) (* d d)))
d

Mu
As
f y d a 2 (setq As (/ Mu (* fi fy (- d (/ a 2)))))
FUNCIONES PARA CREAR Y MANEJAR LISTAS
CREACIN DE LISTAS
(LIST expresion1 [expresion2 ])
Ejm.:
(setq x1 30 y1 60 z1 90)
(setq pt1 (list x1 y1 z1))

OBTENER PRIMER ELEMENTO DE UNA LISTA


(CAR lista)
1) (setq x (car pt1)) 30
2) (car (10 20 0)) 10
3) (car ((a b) 10 15)) (A B)

OBTENER SUBLISTA A PARTIR DEL 2 ELEMENTO


(CDR lista)
Ejm:
(setq pt2 (cdr pt1)) (60 90)
(setq y (car pt2)) 60
EXTRAER SEGUNDO ELEMENTO DE UNA LISTA
(CADR lista) (CAR (CDR lista))
Ejem:
(setq y2 (cadr pt1)) 60

OTRAS FUNCIONES DE EXTRACCIN DE ELEMENTOS DE LISTAS


CAR y CDR se pueden combinar hasta 4 nivel de anidacin

Ejem:
(setq l1 ((a b) (x y) 5 f))
1) (caar l1) a
2) (cdar l1) (b)
3) (caddr l1) 5
4) (cadar l1) b
5) (caddar l1) nil

(setq xyz (20 30 40))


(caddr xyz) 40
FUNCIONES GET
INTRODUCIR PUNTOS
(GETPOINT [punto_base] [mensaje])
Ejem:
(setq p1 (getpoint Introducir punto:))
Introducir punto: 150,85,0

(setq p2 (getpint (20 20) Indicar segundo punto:))


Indicar segundo punto:

INTRODUCIR NMEROS ENTEROS


(GETINT [mensaje])
Ejem: (setq num1 (getint Ingrese numero:))

INTRODUCIR NMEROS REALES


(GETREAL [mensaje])
Ejem: (setq num2 (getreal Introducir numero real:))
Introducir numero real: 20.5
Introducir numero real: 50
INTRODUCIR DISTANCIAS
(GETDIST [punto_base] [mensaje])
Ejem: (setq dis1 (getdist (0 0) Segundo punto:))
Segundo punto: 100,100
141.421
(setq dis2 (getdist Primer punto:))
Primer punto:
Specify second point:

INTRODUCIR UN NGULO
(GETANGLE [base] [mensaje])
Ejem: (setq a1 (getangle Introducir primer punto:))
Introducir primer punto: qq punto
Specify second point: @50<60
1.0472
INTRODUCIR CADENAS DE TEXTO
(GETSTRING [modo] [mensaje]) (mx. 132 caracteres)
t (permite espacios)
Ejem: (setq texto1 (getstring Escribe tu texto:))
(setq texto1 (getstring t Escribe tu texto:))
MODOS PARA EL USO DE LAS FUNCIONES GET
(INITGET [modo] [clave])

VALOR BIT MODO

1 No admite valor nulo (intro) como respuesta


2 No admite cero
4 No admite valores negativos
8 No verifica lmites aunque estn activados
16 (No se utiliza)
32 Dibuja lnea o rectngulo elstico con lnea punteada
64 GETDIST devuelve distancias 2D
128 Permite introducir datos arbitrarios por teclado

Se puede sumar los modos requeridos


1 + 2 + 4 = 7 No permite nulos, cero ni negativo

Ejem: (initget (+ 1 2 4)(setq coef (getint Ingresar coeficiente de ecuacion:)))


DEFINIR ANGULOS Y DISTANCIAS
Obtener ngulo definido por 2 puntos
(ANGLE pto1 pto2)
Ejem:
(setq pt1 (0 0))
(setq pt2 (20 30))
(setq ar (angle pt1 pt2))
(setq as (/ (* 180 ar) PI))
56.3099
!ar
0.982794

Obtener distancia entre 2 puntos dados


(DISTANCE pto1 pto2)
Ejem: (setq p1 (getpoint Indicar primer punto:))
(setq p2 (getpoint p1 Indicar segundo punto:))
(distance p1 p2)
Obtener segundo punto a partir de un angulo y una distancia
(POLAR pto_base angulo distancia)
Ejem:
(setq pb (getpoint Indicar punto base:))
(setq a1 (/ (* 30 PI) 180))
(setq p2 (polar pb a1 50))

Obtener punto a partir de la interseccin de lneas


(INTERS pto1 pto2 pto3 pto4 [en_segmento])
Ejem:
(setq p1 (getpoint Ingresar pto1:)) 20,20 20,70
(setq p2 (getpoint Ingresar pto2:)) 90,70 55,57.5
(setq p3 (getpoint Ingresar pto3:)) 20,70 20,20
(setq p4 (getpoint Ingresar pto4:)) 90,20 55,32.5
(setq pi1 (inters p1 p2 p3 p4)) 55.0,45.0,0.0 nil
(setq pi1 (inters p1 p2 p3 p4 nil)) 90.0, 45.0, 0.0
ESTRUCTURAS DE PROGRAMAS
CONDICIONAL SIMPLE
(IF condicin accion_si_cumple accion_no_cumple)

CONDICIONAL MLPTIPLE
(COND (condicion1 resultado1) [(condicin2 resultado2) ])

SECUENCIA CONSECUTIVA
(PROGN expresion1 expresion2 )

REPETIR UN NMERO DE VECES


(REPEAT nmero expresin1 [expresin2 ])

REPETIR SEGN CONDICIN


(WHILE condicin expresin1 [expresin2 ])
EJEMPLOS

(setq a (50 0) b (100 50) c (50 100) d (0 50))(setq f (getint


Introducir entero: ))(if (>= f 0) (command line a b c d c)
(command circle 2p a c))

(setq n (getreal N = ))(if (= n 1) (progn (setq a (+ 1 n)) (prompt


correcto) (terpri)) (progn (prompt incorrecto) (terpri))

(while (setq pt (getpoint punto final (intro para terminar): )) (terpri)


(command line ptb pt ))
(defun prueba (/pt1 pt2)
(setq pt1 (getpoint Introducir punto: ))
(repeat 4
(setq pt2 (getpoint pt1 Nuevo punto: ))
(command line pt1 pt2 )
(setq pt1 pt2)
)
)
b3
p6
p7 y3

h3
x1 = xb (b3 b1)/2
p9 p4

p8 p5
y2 x2 = xb + (b1 b2)/2
x3 = x2 + b2
b2
x4 = xb + b1
h2
x5 = x1 + b3
p11
p10 p3 p2
h1 y1 y1 = yb + h1
y2 = y1 + h2
pb p1
yb
y3 = y2 + h3
b1

x1 xb x2 x3 x4 x5
(defun datos_seccion( )
(initget 7) (setq b1 (getreal b1 = )) (setq p4 (list x3 y2))
(initget 7) (setq b2 (getreal b2 = )) (setq p5 (list x5 y2))
(initget 7) (setq b3 (getreal b3 = )) (setq p6 (list x5 y3))
(initget 7) (setq h1 (getreal h1 = )) (setq p7 (list x1 y3))
(initget 7) (setq h2 (getreal h2 = )) (setq p8 (list x1 y2))
(initget 7) (setq h3 (getreal h3 = )) (setq p9 (list x2 y2))
(initget 1) (setq pb (getpoint pto. base )) (setq p10 (list x2 y1))
) (setq p11 (list xb y1))
(command line pb p1 p2 p3 p4 p5 p6 p7
(defun seccion(/ x1 x2 x3 x4 x5 xb y1 y2 y3 yb p8 p9 p10 p11 c)
p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11) )
(setq xb (car pb) yb (cadr pb))
(setq x1 (- xb (/ (- b3 b1) 2))) (defun c:seccion(/ b1 b2 b3 h1 h2 h3 pb)
(setq x2 (+ xb (/ (- b1 b2) 2))) (setvar cmdecho 0)
(setq x3 (+ x2 b2)) (datos_seccion)
(setq x4 (+ xb b1)) (setq v1 (getvar osmode))
(setq x5 (+ x1 b3)) (setvar osmode 0)
(setq y1 (+ yb h1)) (seccion)
(setq y2 (+ y1 h2)) (setvar osmode v1)
(setq y3 (+ y2 h3)) (setvar cmdecho 1)
(setq p1 (list x4 yb)) (prin1)
(setq p2 (list x4 y1)) )
(setq p3 (list x3 y1)) (prompt Comando SECCION creado)(prin1)

También podría gustarte