PRACTICA N°2
2430 – PROGRAMACION GRAFICA
Nombre: Yugar Colque Moises Enoc.
a) ¿En qué consiste la programación en AutoLISP?
La programación en AutoLISP consiste en u�lizar el lenguaje de programación LISP (List
Processing) adaptado para AutoCAD, un so�ware de diseño asis�do por computadora (CAD).
AutoLISP se emplea para automa�zar tareas, crear comandos personalizados y desarrollar
aplicaciones dentro de AutoCAD. Es especialmente ú�l para realizar operaciones repe��vas y
para personalizar el entorno de AutoCAD según las necesidades específicas del usuario. Los
programas escritos en AutoLISP pueden interactuar con los dibujos de AutoCAD, manipulando
en�dades gráficas y ejecutando comandos.
b) ¿Qué ventajas ofrece el entorno de AutoLISP al usuario?
1. Automa�zación de tareas repe��vas: AutoLISP permite automa�zar tareas que de
otra manera serían tediosas y propensas a errores, mejorando la eficiencia y precisión.
2. Personalización: Los usuarios pueden crear comandos y funciones personalizadas
adaptadas a sus necesidades específicas, lo que facilita el trabajo con AutoCAD.
3. Interac�vidad: AutoLISP puede interactuar con el entorno de AutoCAD en �empo real,
permi�endo la manipulación dinámica de objetos y la creación de interfaces de usuario
personalizadas.
4. Mejora de produc�vidad: Al automa�zar tareas y personalizar el entorno de trabajo,
AutoLISP ayuda a mejorar la produc�vidad y reducir el �empo necesario para
completar proyectos complejos.
5. Flexibilidad y poder: Al ser un dialecto de LISP, AutoLISP hereda la flexibilidad y el
poder del lenguaje LISP, permi�endo la creación de scripts y aplicaciones sofis�cadas.
c) ¿Cuál es la estructura básica de programación en AutoLISP?
La estructura básica de programación en AutoLISP se centra en la definición y ejecución de
funciones y la manipulación de listas. Los elementos fundamentales incluyen:
Definición de funciones: Las funciones se definen u�lizando la palabra clave defun, seguida del
nombre de la función, una lista de parámetros y el cuerpo de la función. Por ejemplo:
(defun mi-funcion (a b)
(+ a b))
Listas: AutoLISP, como LISP, se basa en listas. Una lista es una secuencia de elementos entre
paréntesis. Las operaciones con listas son fundamentales en AutoLISP. Por ejemplo:
(setq mi-lista (list 1 2 3 4 5))
Variables: Se pueden definir y asignar valores a variables usando setq. Por ejemplo:
(setq x 10)
Condicionales: Las estructuras condicionales, como if y cond, permiten tomar decisiones en
el código. Por ejemplo:
(if (> x 5)
(princ "x es mayor que 5")
(princ "x no es mayor que 5"))
Bucles: Los bucles, como while y repeat, permiten ejecutar repe�damente un bloque de
código. Por ejemplo:
(setq i 0)
(while (< i 5)
(princ i)
(setq i (1+ i)))
Funciones predefinidas: AutoLISP incluye una variedad de funciones predefinidas para
manipular listas, números, cadenas, y para interactuar con el entorno de AutoCAD.
Programación en AUTOLISP (65%)
a) Realizar una función para dibujar círculos concéntricos a igual distancia, dado el
punto centro, el radio del 1er y 2do círculo
(defun dibujar-circulos-concentricos (centro radio-inicial numero-
circulos distancia)
(setq punto-centro (list (car centro) (cadr centro))) ; Extraer
coordenadas X e Y del centro
(setq radio-actual radio-inicial)
(repeat numero-circulos
(command "circle" punto-centro radio-actual)
(setq radio-actual (+ radio-actual distancia))
)
)
(dibujar-circulos-concentricos '(5.0 5.0) 1.0 5 1.0)
b) Realizar una función para dibujar una estrella de n puntas, radio interno ri, radio
externo re y dado un punto centro.
(defun dibujar-estrella (centro ri re n)
(setq punto-centro (list (car centro) (cadr centro))) ;
Extraer coordenadas X e Y del centro
(setq angulo (/ (* 360.0 n) (* 2.0 pi))) ; Calcular el ángulo
entre cada punta de la estrella
(setq vertices '()) ; Lista para almacenar los vértices de la
estrella
; Calcular los vértices de la estrella
(repeat n
(setq angulo-actual (* angulo it))
(setq x-externo (+ (car punto-centro) (* re (cos angulo-
actual))))
(setq y-externo (+ (cadr punto-centro) (* re (sin angulo-
actual))))
(setq x-interno (+ (car punto-centro) (* ri (cos (+ angulo-
actual (/ angulo 2.0))))))
(setq y-interno (+ (cadr punto-centro) (* ri (sin (+ angulo-
actual (/ angulo 2.0))))))
(setq vertices (cons (list x-externo y-externo) vertices)) ;
Añadir vértice externo
(setq vertices (cons (list x-interno y-interno) vertices)) ;
Añadir vértice interno
)
; Dibujar los segmentos que forman la estrella
(repeat (* n 2)
(setq punto1 (car vertices))
(setq vertices (cdr vertices))
(setq punto2 (car vertices))
(setq vertices (cdr vertices))
(command "line" punto1 punto2)
(dibujar-estrella '(5.0 5.0) 1.0 3.0 5)
)
)
c) Realizar una función para dibujar una espiralen base a un punto de inicio y el radio del primer
arco
(defun dibujar-espiral (punto-inicio radio-arco numero-vueltas
incremento-radio)
(setq punto-actual punto-inicio)
(setq radio-actual radio-arco)
(setq angulo 0.0)
(repeat numero-vueltas
(command "arc" punto-actual radio-actual angulo (+ angulo (/
pi 2.0)) radio-actual angulo)
(setq radio-actual (+ radio-actual incremento-radio))
(setq punto-actual (polar punto-actual angulo radio-actual))
(setq angulo (+ angulo (/ pi 2.0)))
)
)
(dibujar-espiral '(5.0 5.0) 1.0 5 1.0)
d) Realizar una función para graficar una mesa
(defun dibujar-mesa (esquina-inf-izq ancho largo alto)
(setq x1 (car esquina-inf-izq))
(setq y1 (cadr esquina-inf-izq))
; Dibujar la superficie de la mesa
(command "rectangle" esquina-inf-izq (+ x1 ancho) (+ y1
largo))
; Calcular las esquinas de las patas
(setq esquina-sup-der (list (+ x1 ancho) (+ y1 largo)))
(setq esquina-sup-izq (list x1 (+ y1 largo)))
(setq esquina-inf-der (list (+ x1 ancho) y1))
; Dibujar las patas de la mesa
(command "rectangle" esquina-sup-izq (- (car esquina-sup-izq)
(/ ancho 10.0)) (- (cadr esquina-sup-izq) (/ largo 10.0)))
(command "rectangle" esquina-inf-der (- (car esquina-inf-der)
(/ ancho 10.0)) (- (cadr esquina-inf-der) (/ largo 10.0)))
(command "rectangle" esquina-sup-der (- (car esquina-sup-der)
(/ ancho 10.0)) (- (cadr esquina-sup-der) (/ largo 10.0)))
(command "rectangle" esquina-inf-izq (- (car esquina-inf-izq)
(/ ancho 10.0)) (- (cadr esquina-inf-izq) (/ largo 10.0)))
(command "rectangle" esquina-inf-izq (+ x1 ancho) (+ y1 largo))
(command "rectangle" esquina-sup-izq (- (car esquina-sup-izq) (/
ancho 10.0)) (- (cadr esquina-sup-izq) (/ largo 10.0)))
(command "rectangle" esquina-inf-der (- (car esquina-inf-der) (/
ancho 10.0)) (- (cadr esquina-inf-der) (/ largo 10.0)))
(command "rectangle" esquina-sup-der (- (car esquina-sup-der) (/
ancho 10.0)) (- (cadr esquina-sup-der) (/ largo 10.0)))
(command "rectangle" esquina-inf-izq (- (car esquina-inf-izq) (/
ancho 10.0)) (- (cadr esquina-inf-izq) (/ largo 10.0)))
(dibujar-mesa '(0.0 0.0) 100.0 50.0 30.0)
e) Realizar una función para graficar una caja
(defun dibujar-caja (esquina-inf-izq ancho largo alto)
(setq x1 (car esquina-inf-izq))
(setq y1 (cadr esquina-inf-izq))
; Dibujar la base de la caja
(command "rectangle" esquina-inf-izq (+ x1 ancho) (+ y1
largo))
; Calcular las esquinas de las caras laterales
(setq esquina-sup-izq (list x1 (+ y1 largo)))
(setq esquina-sup-der (list (+ x1 ancho) (+ y1 largo)))
(setq esquina-inf-der (list (+ x1 ancho) y1))
; Dibujar las caras laterales de la caja
(command "rectangle" esquina-sup-izq (+ (car esquina-sup-izq)
alto) (- (cadr esquina-sup-izq) alto))
(command "rectangle" esquina-sup-der (+ (car esquina-sup-der)
alto) (- (cadr esquina-sup-der) alto))
(command "rectangle" esquina-inf-der (+ (car esquina-inf-der)
alto) (- (cadr esquina-inf-der) alto))
; Dibujar la cara superior de la caja
(setq esquina-sup-izq-arriba (list x1 (+ y1 largo) alto))
(setq esquina-sup- es drawings Know