|
|
|
CADы как устроен механизм масштабирования и скроллинга?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, заранее извиняюсь если немного сумбурно определил тему, просто пока ещё сам не могу её точно сформулировать, ибо она состоит из кучки маленьких вопросов "как" и "почему" и целостной картины в моей голове пока не имеет. В попытке собрать всё воедино и понять, что да как, создаю эту тему. Итак, пытаюсь понять, как устроены программы типа CAD-ов(в плане вывода на экран), в которых приходится что-либо рисовать. Например, программы для рисования электрических схем, или каких либо планов домов и.т.д. Интересует в них следующее: как в них реализуется масштабирование и скроллинг. Если с масштабированием более-менее понятно, т.е взяли все размеры и координаты, помножили на некоторое число(scale factor), получили новые размеры и координаты, отрисовали и вот вроде бы всё стало другого размера. То со скроллингом есть пара вопросов: 1) Как работает скроллинг: у нас есть некоторое виртуальное окно и окно, которое мы видим на экране(например Frame). Если виртуальное окно больше клиентской части фрейма, то появляются скроллбары. Так? Теперь вопрос, в каких единицах обычно задаётся размер виртуального окна и по какому принципу этот размер выбирается? Т.е этот размер может быть бесконечным, или он привязывается, скажем, к размеру листа A4(3,2,1,0), переведённому в единицы измерения размеров вирт. окна? 2) При скроллинге, когда пользователь дёргает за скроллбар, картинка должна проскроллиться на некоторую величину, как обычно вычисляется эта величина или просто от фонаря задаётся(задали наобум, скажем 10 пикселей)? 3) Какую систему координат обычно применяют в таких программах и откуда вести отсчёт координат? Т.е брать ли мне центр начала координат в центре экрана, или это должен быть верхний левый угол экрана? Правильно ли, что окно на экране(Frame), который "плавает" по виртуальному окну, также имеет свои координаты, которые как раз и отсчитываются от верхнего левого угла вирт. окна? 4) Я так понимаю, что когда человек в этой программе рисует что-то, то всё рисование вычисление должно вестись в каких-то внутренних единицах, которые потом переводятся в реальные единицы устройства, на которые картинка выводится, правильно? Что обычно берётся за внутреннюю единицу и как переводится в единицы устройства? В данном вопросе я сознательно дистанцировался от указания конкретно фреймворка/библиотеки или ЯП, потому как думаю, что в граф. приложениях принцип идентичен везде, независимо от инструментария. Если нужна конкретика, то я ориентируюсь на wxWidgets. Пока вроде всё, если появятся вопросы, буду их задавать по ходу темы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2013, 12:59 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=53&tid=1341673]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 359ms |

| 0 / 0 |
