2011-07-18 24 views
3

也許與我更好的判斷,我決定嘗試讓圖形在計劃中工作。 (MIT/GNU)與計劃圖形的多個怪異

爲了得到它開始,我寫了

(define graphics-types (enumerate-graphics-types)) 
(define graphics (make-graphics-device (car graphics-types))) 

其彈出的窗口白色。調用

(graphics-draw-point graphics .5 0) 

得到所需要的結果,這是一個黑色的小像素出現的方式3/4到窗口的右邊(垂直在中心)。然而,致電

(graphics-erase-point graphics .5 0) 

什麼也沒做。此外,最小化和恢復窗口消除了這一點,但實驗表明,最小化總是清除整個窗口。

有誰知道發生了什麼事?

+2

您對麻省理工學院計劃有多熟?如果答案是「不太」,你可能會考慮Racket,它有一個GUI庫,大量的文檔和一個活躍的用戶郵件列表。 –

+0

很漂亮。我問這個問題的部分原因是看看這是一個錯誤還是我在某個地方只是愚蠢的。無論如何,由於mit/gnu方案提供的debian軟件包支持,我不認爲我會切換(除其他外)。 – ikdc

回答

1

MIT方案中的graphics-erase-point過程通過將繪圖模式更改爲0,調用graphics-draw-point,然後將繪圖模式更改回以前的狀態。有關MIT方案繪圖模式的機制的更多信息可在MIT's drawing mode documentation

該錯誤似乎在graphics-bind-drawing-mode過程中,該過程在graphics-erase-point中用於更改繪圖模式。最簡單的解決方案是重新定義graphics-erase-point以代替使用graphics-set-drawing-mode。生成的代碼看起來是這樣的:

(define (graphics-erase-point device x y) 
    (graphics-set-drawing-mode device 0) 
    (graphics-draw-point device x y) 
    (graphics-set-drawing-mode device 15)) 

15是默認的繪圖模式,我已經用簡單起見,但可以肯定的是能夠智能地恢復繪圖模式(我離開,鍛鍊你) 。

+0

這失敗了,抱怨'device'不是一個綁定變量。如果我將它定義爲不是圖形設備的東西,它會告訴我它不是正確的記錄類型。 – ikdc

+0

對不起。我更新了我的答案,這個新的代碼應該可以工作。 –

+0

0和15應該互換。 – ikdc