Доброго времени суток, в голове есть немного мешанины и вопросов, спешу поделиться и попросить совета.
Итак, вводная: есть несколько простых классов, реализующих мелкие примитивы, типа Line, Rect, Arc, Text... Так же есть класс Symbol, который содержит в себе список этих примитивов и при отрисовке всё это вылазит на канву, делая мне красиво. Каждый примитив имеется свои координаты, цвет, толщину линии etc. Вопросы будут по реализации и рисованию, кода не предоставляю, т.к вопрос концептуальный, мол, в правильном ли направлении двигаюсь
0. Сейчас все эти примитивы, наследую от базового класса Primitive, он содержит основные свойства, типа цвет, толщина линии, тип примитива. Следует ли мне сделать его интерфейсом(IPrimitive), или тогда мне придётся одинаковые свойства переопределять в каждом классе-примитиве(типа Line) реализующем этот интерфейс одни и те же свойства?
1. Рисовать все эти примитивы думал с помощью OpenGL, отсюда появился вопрос: OpenGL умеет вращать, масштабировать объект(матрицу), можно ли после осуществления преобразования, т.е масштабирования, либо поворота, получить изменившиеся величины в матрице обратно в свой объект? При отрисовали скажем линию по координатам из полей объекта, повернули линию, и эти изменившиеся координаты записали назад в объект?
2. Проистекает из первого. Если так можно делать, то как лучше поступить, доверить трансформацию OpenGL и изменения записывать в объект или самому реализовать методы масштабирования, поворота? Также, насколько знаю, OpenGL может проверять попадание точки на примитив/рисуемый объект, стоит ли мне реализовывать свой HitTest в каждом примитиве, или доверить это OpenGL? У кого какие соображения на этот счёт?
3. Проверка попадания в примитив. Для простых примитивов делается просто, а для кривых, скажем арки, или кривой Безье, чуть по сложнее. Думаю, делать так, разделить рисование примитива на две части: расчёт массива точек и само рисование по ним. Соответственно проверка попадания будет сводиться к тому, что нужно пробежать по этому списку точек и проверит, не находится ли она рядом с проверяемой точкой. (Кривая рисуется как, т.е есть список точек, и рисование заключается в соединении последовательно всех точек линиями, 1-2, 2-3, 3-4 и т.д, получается кривая - или в данном случае проверять попадание нужной мне точки на каждую из этих прямых? )
Пока вроде это всё что накопилось