Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qwyllum от Май 17, 2013, 23:32



Название: Qt редактирование многоугольников
Отправлено: qwyllum от Май 17, 2013, 23:32
Доброго времени суток всем! С-но, встала передо мной небольшая задачка - знакомый попросил написать примитивный редактор уровней. Суть в том, что уровни состоят из многоугольников, которые в дальнейшем будут затекстурированы. Есно задача редактора создавать многоугольники, редактировать и сохранять их координаты в файл. Начал я копать в данном направлении. Вот задача:
1. В редакторе можно создать фигуру(по умолчанию 3,4,5-угольник)
2. Есть режим редактирования объекта и режим редактирования вершин. Выбирается мышью.
2. В режиме редактирования вершин, каждая вершина фигуры доступна для перемещения, после чего фигура изменяется(можно не в реальном времени, а после отпускания мыши)
3. В режиме редактирования объекта, его можно перемещать или вращать
4. В идеале, хотелось бы иметь возможность добавления новых вершин

А теперь вопрос, как это реализовать в теории? На каком уровне работать с объектами?
Допустим, отдельную вершину можно сделать классом, наследуемым от QGraphicsItem. Переопределить метод paint(), добавить возможность передвижения мыши. Но как сделать, чтобы все вершины одного элемента соединялись линиями? И как сделать, чтобы в режиме редактирования объекта осуществлялось именно перемещение-вращение всего многоугольника?
Или же может стоит сделать класс Многоугольника, у которого есть динамический список вершин?

Подскажите плз, как бы вы это реализовали в теории?


Название: Re: Qt редактирование многоугольников
Отправлено: Igors от Май 18, 2013, 10:42
Ну вершину делать айтемом - явный перебор. Напрашивается унаследоваться от QGraphicsPolygonItem а поверх рисовать (жирные) точки.

Вообще задача типа "чем дальше в лес - тем больше дров". Выглядит вроде просто, но по существу это 2D редактор, и аппетит пользователя нарастает очень быстро - больше и больше ф-ционала нужно, "это абсолютно необходимо". Начинается давление со стороны юзера, типа "без этой фичи Ваш редактор совершенно unusable!". В свое время я соскочил когда заставляли добавить Безье (с коленом)