SICPを読む(60) 図形言語の準備 ひげぽんの図形言語をMrEdで動かそう

僕はVimperなのでMzSchemeを愛用してます。しかし、MzScheme単体ではウィンドウを表示することが出来ないため、図形言語を試すことが出来ません。今回の図形言語ではPLT/MzScheme付属のPLT/MrEdというソフトを使うことにします。

ひげぽんの図形言語を貰ってきて

ひげぽんの図形言語のソースを貰ってきて

main.scmの代わりを用意する。

main.ss
;; ひげぽんの図形言語をMrEdで動かす為のパッチ

(load "./segment.scm")
(load "./frame.scm")
(load "./vector.scm")
(load "./painter.scm")

(define frame (make-frame (make-vect 0 0) (make-vect 1 0) (make-vect 0 1)))

(define segments (list
                  (make-segment (make-point 0.2 0.7) (make-point 0.3 0.9))
                  (make-segment (make-point 0.4 0.7) (make-point 0.3 0.9))
                  (make-segment (make-point 0.6 0.7) (make-point 0.7 0.9))
                  (make-segment (make-point 0.8 0.7) (make-point 0.7 0.9))
                  (make-segment (make-point 0.3 0.5) (make-point 0.4 0.6))
                  (make-segment (make-point 0.6 0.6) (make-point 0.7 0.5))
                  (make-segment (make-point 0.5 0.2) (make-point 0.6 0.4))
                  (make-segment (make-point 0.5 0.2) (make-point 0.4 0.4))
                  (make-segment (make-point 0.45 0.3) (make-point 0.55 0.3))
                  (make-segment (make-point 0.85 0.6) (make-point 0.9 0.4))
                  (make-segment (make-point 0.85 0.2) (make-point 0.9 0.4))
                  ))
(define monar (segments->painter segments))

(define window-size 300)
(define window (instantiate frame%
                            ("Higepon's Picture Language with MrEd")
                            (width window-size)
                            (height window-size)))
(define canvas (instantiate canvas% (window)))
(define dc (send canvas get-dc))

(define black-pen (instantiate pen% ("BLACK" 1 'solid)))
(define (draw-line p1 p2)
  (define (t z) (- (* window-size z) 1))
  (send dc draw-line
        (t (x-point p1)) (t (y-point p1))
        (t (x-point p2)) (t (y-point p2))))

(send window show #t)
(sleep/yield 1)
(send dc set-pen black-pen)

((square-limit monar 4) frame)


あと、引数が間違ってるって怒られるので、修正。

(define (squash-inwards painter) ...)

起動方法

ひげぽんの図形言語main.scmをmain.ssに差し替えるだけで動きます。`

% mred -vmf main.ss


案外お手軽でした。画像とか表示させてみたいなぁ・・・。

参考

参考にしたのは、ここら辺。
PLT MrEd: Graphical Toolbox Manual
ほぼコピッペ(笑

追記

画像の表示は出来たけど、MrEdでは画像の拡大、回転は出来ない。

拡大、回転をさせるためには、

画像 → ビットマップオブジェクト → ベタバイナリ → 加工 → ビットマップオブジェクト → 表示

とやるらしい。

MITのprmpnt.scmが加工をやってる。面白い。

追記2

再描画の際に画面が消えてしまうのでcanvasにコールバックを追加した方がいいかも。