Несколько странностей с графикой Scheme - PullRequest
3 голосов
/ 18 июля 2011

Возможно, вопреки здравому смыслу, я решил попытаться заставить графику работать по схеме.(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)

ничего не сделал.Кроме того, минимизация и восстановление окна стерли точку, но эксперименты показали, что минимизация всегда очищает все окно.

Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 10 ноября 2012

Процедура graphics-erase-point в схеме MIT работает, изменяя режим рисования на 0, вызывая graphics-draw-point, затем возвращая режим рисования обратно к тому, что было раньше.Более подробную информацию о механике режимов рисования схемы MIT можно найти в Документация режима рисования MIT

Ошибка, по-видимому, в процедуре 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 - режим рисования по умолчанию, который я использовал для простоты, но, безусловно, возможно интеллектуально изменить режимы рисования (я оставляю это упражнение длявы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...