Показать сообщение отдельно
Старый 08.02.2016, 14:23   #27
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Смесь: Неочевидное + Оптимизация

С функциями graphics.setClip() и graphics.translate() оказалось больше проблем, чем хотелось бы.

Прокачал класс Viewport - хэлпер для работы с клиппингом. Н-р, он умеет делать lock/unlock, чтобы последующие установки клипа не выходили за эту залоченную область.

Что узнал:

1. Важен порядок вызова функций
setClip => translate != translate => setClip
при установке области клипа учитывается текущий сдвиг координат, но все последующие никак не влияют, запоминает именно сдвиг в момент установки клипа.

2. Реальные координаты клипа g.getClipX() и g.getClipY() - возвращаются значения с учётом сдвига координат.

3. g.translate(int x, int y) - это не передвинуть канвас в указанную точку, а сдвинуть на указанное количество относительно текущей позиции. могли бы написать в доке dx, dy для понятности.

4. Внутренности графикса по части клипа и транслэйта сложнее, чем думал (см. скрин)
(Offline)
 
Ответить с цитированием