Russian Qt Forum
Ноябрь 25, 2024, 00:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsView и векторная графика  (Прочитано 12305 раз)
Barmaglodd
Гость
« : Август 12, 2009, 20:19 »

Задача простая, нарисовать карту, с возможностью масштабирования и выбора объектов. Карта задана набором векторных объектов с атрибутами. Сразу скажу про QGis и т.д. и т.п. знаю, цель была сделать более лёгкий вариант. Решил использовать QGraphicsView, в документации всё очень красиво расписано, но сразу получил удар граблями Грустный
1. При масштабировании, масштабируется всё: размеры линий, рисунки кистей, текст. Ладно, для точек и подписей придумал костыль, делаю верхний QGraphicsItem, который ничего не рисует, и дочерние, которые игнорируют трансформации родителя. Я так понял, это законный костыль, т.к. в комментариях к ItemIgnoresTransformations приводится пример с не масштабируемым текстом. Но остаётся вопрос с толшиной линий и штриховкой. Единственное, что приходит в голову, в наследоваться от QGraphicsItem, сбрасывать матрицу преобразований у painter'а, перерасчитывать координаты и рисовать. Это явный перебор. Грустный
2. Выделение тормозит. У меня сотни тысяч объектов с перекрывающимися boundingBox'ами. Плюс счастие в виде косяка, описанного в теме http://www.prog.org.ru/topic_9063_0.html.
3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет.
4. Нет штатного способа подгружать геометрию по запросу. Хочется полноценного MVC, а не пихать всю геометрию в память.
Почему в документации пишут про 2D, когда по факту это растровое полотно с глюками, Я ещё удивлялся, почему в QGis все слои рендерятся в картинки, и всё выделение руками реализовано.
Извините за сумбур Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 12, 2009, 20:57 »

.org.ru/topic_9063_0.html[/url].
3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет.
Ну, вообще-то это называется "anti-alias"  Улыбающийся И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения.
Записан
BlackTass
Гость
« Ответ #2 : Август 13, 2009, 03:29 »

По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца.
Записан
Barmaglodd
Гость
« Ответ #3 : Август 13, 2009, 04:59 »

.org.ru/topic_9063_0.html[/url].
3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет.
Ну, вообще-то это называется "anti-alias"  Улыбающийся И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения.
Может плохо объяснил Грустный Баг имеет место и при включеном антиальясинге и без него. Часть полигона заливается белым, а часть заданной штриховкой, причём, если увеличить сцену, заливается весь полигон. Этот косяк следствие первой проблемы. Полигоны залиты стилем Qt::Dense5Pattern, который предстваляет собой чередование прозрачных и закрашенных пикселей. Я уменьшаю в кратное 2 число раз,  появляются артефакты. Сейчас вспомнил, что где-то в qtblogs был пост на эту тему.
« Последнее редактирование: Август 13, 2009, 06:23 от Barmaglodd » Записан
Barmaglodd
Гость
« Ответ #4 : Август 13, 2009, 06:25 »

По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца.
На самом деле задача простая. Проблема в том, что GV все трансформации применяет к QPainter, а не к объектам сцены. Т.е. все трансформации над растром, а не над вектором.
Записан
Barmaglodd
Гость
« Ответ #5 : Август 13, 2009, 06:28 »

6. Несколько перекрывающихся объектов, кликаю мышкой в область пересечения, выделяется верхний, кликаю второй раз, остаётся старое выделение, а хочется, чтоб следующий выделился. И это руками надо делать. Грустный Видимо я слишком многого хочу.
Записан
BlackTass
Гость
« Ответ #6 : Август 13, 2009, 08:24 »

А пробовали троллям писать? может что и подскажут дельного, но мне все таки кажется что такие вещи надо действительно писать самому.
Записан
fuCtor
Гость
« Ответ #7 : Август 20, 2009, 18:10 »

Делал аналогично отрисовку карты. Делал разные варинты отрисовки, в том числе и на итемах, на итемах не устроил по скорости. В итоге остановился на отрисовке в буфер. Скорость вполне достойная в районе 30 -40 мс на кадр. Все операции над геометриями через деревья (поиск из 16тыс объектов занимает 0.8 мсек в среднем). Все координаты пересчитываю вручную. Для этого всего даже написан свой фреймворк (для использования внутри компании). Так что попробуйте пересмотреть архитектуру.
Записан
Barmaglodd
Гость
« Ответ #8 : Август 21, 2009, 08:23 »

Уже всё переписал. Отказался от GraphicsView, отрисовываю в промежуточный буфер. Пространственный индекс через OGR и GEOS. Все трансформации вручную. Самое узкое место - сеть, в остальном доволен Улыбающийся
Записан
Khs
Гость
« Ответ #9 : Август 21, 2009, 09:44 »

пополните qt фрэймворк своими разработками в сфере векторной графики/картостроения Улыбающийся
Записан
kUSER
Гость
« Ответ #10 : Октябрь 14, 2009, 09:06 »

Здравствуйте, у меня сейчас возникла подобная задача. Я пробую решить ее с помощью QSvgWidget (сейчас копаю пример SvgView), но кажется пошел не в ту сторону. Скажите, не могли бы Вы сказать как Вы решили проблему?
Может быть показали бы исходники  Строит глазки Заранее спасибо.
Записан
Barmaglodd
Гость
« Ответ #11 : Октябрь 15, 2009, 08:31 »

Всё сильно завязано на OGR и мои вспомогательные классы, а если это выдрать, то почти ничего и не останется Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.