Название: QPainterPath и невидимая часть. [РЕШЕНО] Отправлено: Bepec от Сентябрь 26, 2012, 08:28 Утро/День/Вечер добрый.
Имеется QPainterPath произвольной формы. (1) Из произвольного прямоугольника высотой равной QPainterPath вырезается ответная часть. (2) И тут начинается вопрос и проблема. Вырезанная часть (2) имеет в начале прозрачную вырезанную часть (3). Соответсвенно вопрос - как можно убрать из QPainterPath лишний кусок, вот этот (4). PS собственно делаю анимацию захлопывающихся створок. Изза этого лишнего куска ответную часть приходится увеличивать в 2 раза, иначе передвижение (translate) заставляет ответную часть улетать за пределы отрисовки. Название: Re: QPainterPath и невидимая часть. Отправлено: V1KT0P от Сентябрь 26, 2012, 08:37 Ты имеешь ввиду уменьшить изображение за счет того что слева стало пусто? Если до, то просто вызови QPainterPath::boundingRect() получишь ширину и высоту которую занимает твой рисунок. Вычитаешь из ширины рисунка ширину твоей фигуры и на это расстояние отрезаешь слева.
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 26, 2012, 08:42 Меня собственно и это... Волнует :)
Как урезать QPainterPath? Как от него кусок отфигачить? :) То ли я не вижу очевидного, то ли хз :) PS если не трудно, псевдокодом напиши, я в графике полный 0 :D Название: Re: QPainterPath и невидимая часть. Отправлено: V1KT0P от Сентябрь 26, 2012, 08:47 Меня собственно и это... Волнует :) По идее если создать новый QPainterPath который описывает вырезаемую область и воспользоваться функцией QPainterPath subtracted ( const QPainterPath & p ) const то должно произойти отрезание.Как урезать QPainterPath? Как от него кусок отфигачить? :) Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 26, 2012, 08:50 Собственно на subtracted и засыпка. Он отрезает часть и оставляет её незаполненной :D
(3) получается как раз при subtracted от первого QPainterPath. Собственно в этом и вопрос - он её оставляет, а не отрезает :) И получается размер получаемого QPainterPath равен оставшейся части + невидимая отрезанная. Название: Re: QPainterPath и невидимая часть. Отправлено: _OLEGator_ от Сентябрь 26, 2012, 12:19 Можно при отрисовке резать выезжающую часть, например:
Код
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 26, 2012, 18:35 Хм. А что резать предлагаете?
Рисуется всё на 1 виджете 1 QPainter'ом. Первая часть отрисовывается нормально. Далее нужно отрисовать вторую часть, т.е. передвинуть начало координат и отрисовать QPainterPath вырезанный. Куда тыкать ClipRect? Он вроде ограничивает прямоугольник в котором идёт отрисовка, а не обрезает. Получится так же как и у меня сейчас. Он не обрубит начало - он просто невидимую часть не отрисует, но место она занимать будет так же. PS вроде простейшая задача. Но что-то не ладится у меня с этой графикой :) Никто не набросает примерчик? (могу свой код выложить, он простейший ) Название: Re: QPainterPath и невидимая часть. Отправлено: _OLEGator_ от Сентябрь 26, 2012, 19:47 Прикрепи тогда проект, а то я лично мало что понял из объяснений.
Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 26, 2012, 19:56 А такая уж "произвольная" та форма? Прямоугольник известен? Последовательность точек ломаной известна? Ну и сделайте 2 полигона и рисуйте их как хотите
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 26, 2012, 21:18 Умм.. Мда.
Уважаемые форумчане - подскажите мне пожалуйста как лучше сделать(нарисовать) анимацию захлопывающихся/открывающихся створок. С использованием каких классов? Идея насчёт вырезки была мной выбрана потому, что требуется нарисовать только одну часть произвольной формы. Вторая же будет создана автоматом. Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 26, 2012, 22:21 Уважаемые форумчане - подскажите мне пожалуйста как лучше сделать(нарисовать) анимацию захлопывающихся/открывающихся створок. Ну я понимаю так что "зубы" все равно кроме Вас никто не задаст. Предлагаю задавать их в относительных координатах, напрС использованием каких классов? Код Это примерно соответствует Вашему малюнку. Ну а дальше просто создаете 2 полигона, Код Реализация очевидна Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 26, 2012, 22:32 Извиняюсь, но у меня на этом то и затык :D
Общий смысл понимаю. Понимаю что лучше рисовать их по относительным. Но вот как так нарисовать, потом эти 2 полигона совместить - ноу панимайн. :/ Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 26, 2012, 22:43 Извиняюсь, но у меня на этом то и затык :D Сейчас уже почти 11 и я хочу посмотреть детективу :) Завтра до обеда нарисуюОбщий смысл понимаю. Понимаю что лучше рисовать их по относительным. Но вот как так нарисовать, потом эти 2 полигона совместить - ноу панимайн. :/ Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 27, 2012, 06:52 Та ради бога, хоть всю ночь аниме с шерлоком холмсом смотрите :) Но за надежду спасибо :D
Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 27, 2012, 11:23 Код Анимация сводится к вызову этой ф-ции с различными posX и отрисовке полученных полигонов Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 27, 2012, 12:04 Пока что глаза разбегаются :) Буду разбираться, благодарю.
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 27, 2012, 14:38 Igors а можно хоть 1 вызов этой функции проиллюстрировать?
Я так понимаю первый параметр - прямоугольник собственно виджета, второй - какой то полигон в относительных координатах(это как? Да, я знаю что если x*0.01 это будет 1%, но как такой полигон сделать?), третий направление. Четвертый - это % ширины виджета. Пятый - выходной полигон. PS Как сделать относительный? PPS Максимум чего я добился - непонятного результата с вот таким кодом. ЧЯДНТ? Код: QPainter painter(this); Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 27, 2012, 16:19 Не в процентах а от 0 до 1
Код
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 27, 2012, 17:25 Я копировал с вашего предыдущего сообщения, но получается простой прямоугольник. Возможно его кромка и неровная, но в пикселизаторе незаметно.
PS Простой пример - зубчики хотя бы на 20 пикселей мб сделаете? А то я вообще не врубаюсь. Такое чувство функцию rand пытаюсь понять по выводимому результату :) Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 27, 2012, 17:42 Я копировал с вашего предыдущего сообщения, но получается простой прямоугольник. Возможно его кромка и неровная, но в пикселизаторе незаметно. Киньте проектик (так проще)PS Простой пример - зубчики хотя бы на 20 пикселей мб сделаете? А то я вообще не врубаюсь. Такое чувство функцию rand пытаюсь понять по выводимому результату :) Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 27, 2012, 18:28 Завтра в 8.00 по МСК он тут будет. К сожалению сейчас его нет и студии нет :) Много чего нет в общем.
Название: Re: QPainterPath и невидимая часть. Отправлено: Bepec от Сентябрь 28, 2012, 08:14 Чуть потыкал - так и не понял как происходит построение...
Проект в аттаче. Название: Re: QPainterPath и невидимая часть. Отправлено: Igors от Сентябрь 28, 2012, 10:09 А что не работает? (аттач). Просто у Вас по дефаулту мусор, надо нажать сначала верхний "применить", потом 3 нижних "применить" - ну то проблемы ввода
Название: Re: QPainterPath и невидимая часть. [РЕШЕНО] Отправлено: Bepec от Сентябрь 28, 2012, 10:17 Тек потыкал после чая - теперь врубился что за относительные координаты :D
Благодарю за функцию :) |