>>а как например смаштабировать относительно центра экрана, или позиции под курсором?
1)получить мировые координаты точки под мышкой (P)
2)применить требуемые масштабирование к P, пусть это получится P1
3)итоговое преобразование чтоб точка под мышкой не "улетала" будет сдвиг на P1-P а потом масштабирование
в общем случае - двигаем точку относительно которой преобразовываем в начало координат,преобразовываем,двигаем обратно
>>то она может передвигаться по нему в определенных пределах(до краёв холста, не дальше), вот как вот это организовать?
тут 2 подхода
1 - пользователь сам задает размер "холста", программа за него вылезти не дает
2 - холст "бесконечный" а там где требуется размер холста (например в расчете скролбаров) участвует габарит чертежа
>>иди учи матрицы... так что разбираюсь и дозреваю до понимания
это да))
>>то достаточно проверять, над каким элементом находится курсор(по какому элементу клацнули), перебирая все координаты элементов
тут нужно заметить что не курсор, а область выделения. и эта операция очень похожа на отбраковку невидимых элементов (те что за границами экрана), используемую для ускорения рендера. в случае выделения мы ищем примитивы которые гарантировано внутри области, в случае отбраковки мы ищем примитивы которые гарантировано снаружи области.
>>но тут уже можно будет подумать над оптимизицией

про некоторые оптимизации лучше подумать сразу. потом их будет гораздо труднее ввести, чем сделать сразу. В часности для ускорения операций из предидущего пункта примитивы лучше хранить не в линейном списке а в бинарном дереве, или какимнибудь другим способом иметь пространственное разбиение модели