Название: 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!". В свое время я соскочил когда заставляли добавить Безье (с коленом) |