#lang scheme/gui

(define ventana
  (make-object frame% 
    "Coordenadas en x = 400 y = 300" 
    #f 
    450 350 
    400 300))

(define lienzo
  (instantiate canvas% 
    (ventana) 
    (style '(border)) ))

(define dc (send lienzo get-dc))
;;;;;;;;;;;
(define brocha-roja
  (make-object brush%
    "red"
    'solid))

(define lapiz-azul
  (make-object pen%
    "blue"
    5
    'solid))
;;;;;;;;;;;
(send ventana show #t)

(send dc set-pen lapiz-azul)
;;Dibujando puntos y líneas
(define punto1 (make-object point% 10 10))
(define punto2 (make-object point% 220 10))
(define punto3 (make-object point% 240 120))
(define punto4 (make-object point% 150 150))

(send dc draw-point 80 80)
(sleep/yield 1)
(send dc draw-line 0 300 280 300)
(sleep/yield 1)
(send dc draw-lines (list punto1 punto2 punto1 punto3) 0 0)
;;línea curva
(sleep/yield 2)
(send dc clear)
(define x1 33)
(define x2 76)
(define x3 376)
(define y1 50)
(define y2 150)
(define y3 100)
(send dc draw-spline x1 y1 x2 y2 x3 y3)
;;figuras
(sleep/yield 2)
(send dc clear)
(define ancho 100)
(define alto 50)
(send dc draw-rectangle 10 10 ancho alto)
(sleep/yield 1)
(send dc draw-rectangle 20 200 alto alto)
(sleep/yield 2)
(send dc clear)
(define punto5 (make-object point% 50 10))
(define punto6 (make-object point% 20 150))
(define punto7 (make-object point% 130 150))
(define punto8 (make-object point% 100 10))
(define xoffset 15)
(define yoffset 5)
(send dc draw-polygon 
      (list punto5 punto6 punto7 punto8) xoffset yoffset)
(sleep/yield 1.5)
(send dc clear)
(send dc draw-polygon 
      (list punto2 punto3 punto1 punto2) xoffset yoffset)
;;elipses y círculos
(sleep/yield 2)
(send dc clear)
(define x 10)
(define y 10)
(define ancho1 100)
(define alto1 50)
(send dc draw-ellipse x y ancho1 alto1)
(sleep/yield 1)
(send dc draw-ellipse 20 200 alto1 alto1)
(sleep/yield 1)
(send dc draw-ellipse 200 200 alto1 ancho1)
(sleep/yield 2)
(send dc clear)
(define xx 10)
(define yy 10)
(define anchos 100)
(define altos 50)
(define 45grados (/ 3.1416 2))
;; dibuja un arco desde
(define ini-angulo 0); las 3 en el reloj
;; hasta 
(define fin-angulo 45grados); las 12 en el reloj
;; en sentido contrario a las manecillas del reloj
(send dc draw-arc xx yy anchos altos ini-angulo fin-angulo)
(sleep/yield 1)
(send dc draw-arc xx yy anchos altos ini-angulo (* 2 45grados))
