Название: QGraphicsItem и аффинные преобразования Отправлено: ecspertiza от Февраль 15, 2013, 09:40 Всем привет, давно не виделись :) Начну с того ,что я не уверен ,что мне помогут аффинные преобразования, отчасти поэтому тут и пишу. Опишу задачу, есть некий QGraphicsView на нем естественно есть QGraphicsItem. В этом QGraphicsItem может быть нарисовано все ,что угодно: начиная от обычных прямоугольников и окружностей, заканчивая просто набором линий или набором точек, может даже изображение. Все ,что есть в QGraphicsItem рисуется в QPainterPath ,а потом уже рисуется на самом итеме. Но у каждого итема есть ключевые точки, за которые юзверь может дергать\таскать и так далее, в зависимости от ключевых точек которые дергает юзверь итем должен перерисовывать содержимое(для примера, вот как выглядит итем http://joxi.ru/VtQdUdg5CbAcaWPuyWw)
красный цвет - ключевые точки черный цвет - это просто сам итем, его область зеленый - то что может быть нарисовано стало быть, если юзверь тянет правую-центральную точку в лево, то итем должен становиться меньше по ширине, а все что нарисовано естественно должно преобразоваться в соответствии с измененными размерами. Раньше для этих изменений я использовал QMatrix , вызывал у него scale() потом этот QMatrix умножал на QPainterPath и получал результат. В принципе это работало, но пользователь же может крайнюю правую точку переместить за левую границу и тогда по идее все содержимое должно будет отразиться по горизонтали. И стало быть scale для это го уже не подходит. Стало быть возникает вопрос, подойдут ли для этого аффинные преобразования? Может можно как то по другому решить данную задачу ? Название: Re: QGraphicsItem и аффинные преобразования Отправлено: ssoft от Февраль 15, 2013, 09:45 Почему scale не подходит? Этот параметр может быть и отрицательным.
Вообще, QMatrix и определяет аффинные преобразования с объектом, и изменение масштаба - это их частный случай. Название: Re: QGraphicsItem и аффинные преобразования Отправлено: ecspertiza от Февраль 15, 2013, 10:06 да, действительно работает, что то я это упустил :)
|