You are on page 1of 23

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)

You might also like