#lang scheme/gui ;; draw.ss ;; Lee Spector, lspector@hampshire.edu, 20091004 ;; Simple code for drawing shapes in a separate window in DrScheme. ;; ;; User functions: ;; (make-window) -- creates the window ;; (clear) -- clears the drawing ;; (ellipse x y width height r g b a) -- draw ellipse; r g & b are 0-255, a is 0.0-1.0 ;; (rectangle x y width height r g b a) -- draw ellipse; r g & b are 0-255, a is 0.0-1.0 (define width 500) (define height 500) (define frame (new frame% (label "Drawing Window") (width width) (height height))) (define canvas (new canvas% (parent frame))) (define dc (send canvas get-dc)) (send dc set-pen (make-object pen% "BLACK" 1 'transparent)) ;; No pen (send dc set-smoothing 'smoothed) (define make-window (lambda () (send frame show #t))) (define ellipse (lambda (x y width height r g b a) (send dc set-brush (make-object brush% (make-object color% r g b) 'solid)) (send dc set-alpha a) (send dc draw-ellipse x y width height))) (define rectangle (lambda (x y width height r g b a) (send dc set-brush (make-object brush% (make-object color% r g b) 'opaque)) (send dc set-alpha a) (send dc draw-rectangle x y width height))) (define clear (lambda () (rectangle 0 0 width height 255 150 0 1.0))) (make-window) (define test (lambda () (rectangle 20 30 300 210 255 0 120 0.5) (ellipse 120 100 135 265 43 154 0 0.5) )) (test) (define z 0) (define numPerm 0) (define count (lambda ((num 0)) (set! num (+ num 1)) (set! numPerm num) (write num) (write '|-|) )) (define bob (lambda ((speed 1)) (set! z 0) (for ((i (in-range 1 100))) (clear) (rectangle (- 380 (/ z 2)) (+ 30 (* z 1)) 100 (- 200 (* z 2)) 0 0 255 1) (rectangle (+ 20 (/ z 2)) (+ 30 (* z 1)) 100 (- 200 (* z 2)) 0 0 255 1) (rectangle 100 (- 380 z) 300 100 0 0 255 1) (set! z (+ z 1)) (sleep (* speed .05)) (count numPerm) ) ) ) (define vector (lambda ((xLoc 0)(yLoc 0) (xVel 1) (yVel 1) (frame 0)) (rectangle (+ xLoc(* xVel frame)) (+ yLoc(* yVel frame)) 1 1 255 255 255 1) ) ) (define line (lambda ((xLoc 0)(yLoc 0) (xVel 1) (yVel 1) (frame 0)(lenght 1)) (for ((i (in-range 1 lenght))) (vector xLoc yLoc xVel yVel i) ) ) ) (define sunRay (lambda ((angle1 .1) (angle2 .1) (lenght 4500) (rays 30) (lineGap 60) (xLoc 0) (yLoc 0)) (for ((c (in-range 1 rays))) (line xLoc yLoc (+ angle1 (/ c lineGap)) angle2 1 lenght) (line xLoc yLoc angle2 (+ angle1 (/ c lineGap)) 1 lenght) ) ) ) (define sunBurst (lambda () (clear) (line 500 0 -1 1 1 3300) (sunRay -.1 .1 3000 14 70 250 250) (line 0 0 1 1 1 3300) (sunRay -.1 -.1 3000 14 70 250 250) ) )