Russian Qt Forum
Ноябрь 25, 2024, 00:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
QGraphicsView и векторная графика
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QGraphicsView и векторная графика (Прочитано 12307 раз)
Barmaglodd
Гость
QGraphicsView и векторная графика
«
:
Август 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
Сообщений: 11445
Re: QGraphicsView и векторная графика
«
Ответ #1 :
Август 12, 2009, 20:57 »
Цитата: Barmaglodd от Август 12, 2009, 20:19
.org.ru/topic_9063_0.html[/url].
3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет.
Ну, вообще-то это называется "anti-alias"
И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения.
Записан
BlackTass
Гость
Re: QGraphicsView и векторная графика
«
Ответ #2 :
Август 13, 2009, 03:29 »
По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца.
Записан
Barmaglodd
Гость
Re: QGraphicsView и векторная графика
«
Ответ #3 :
Август 13, 2009, 04:59 »
Цитата: Igors от Август 12, 2009, 20:57
Цитата: Barmaglodd от Август 12, 2009, 20:19
.org.ru/topic_9063_0.html[/url].
3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет.
Ну, вообще-то это называется "anti-alias"
И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения.
Может плохо объяснил
Баг имеет место и при включеном антиальясинге и без него. Часть полигона заливается белым, а часть заданной штриховкой, причём, если увеличить сцену, заливается весь полигон. Этот косяк следствие первой проблемы. Полигоны залиты стилем Qt::Dense5Pattern, который предстваляет собой чередование прозрачных и закрашенных пикселей. Я уменьшаю в кратное 2 число раз, появляются артефакты. Сейчас вспомнил, что где-то в qtblogs был пост на эту тему.
«
Последнее редактирование: Август 13, 2009, 06:23 от Barmaglodd
»
Записан
Barmaglodd
Гость
Re: QGraphicsView и векторная графика
«
Ответ #4 :
Август 13, 2009, 06:25 »
Цитата: BlackTass от Август 13, 2009, 03:29
По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца.
На самом деле задача простая. Проблема в том, что GV все трансформации применяет к QPainter, а не к объектам сцены. Т.е. все трансформации над растром, а не над вектором.
Записан
Barmaglodd
Гость
Re: QGraphicsView и векторная графика
«
Ответ #5 :
Август 13, 2009, 06:28 »
6. Несколько перекрывающихся объектов, кликаю мышкой в область пересечения, выделяется верхний, кликаю второй раз, остаётся старое выделение, а хочется, чтоб следующий выделился. И это руками надо делать.
Видимо я слишком многого хочу.
Записан
BlackTass
Гость
Re: QGraphicsView и векторная графика
«
Ответ #6 :
Август 13, 2009, 08:24 »
А пробовали троллям писать? может что и подскажут дельного, но мне все таки кажется что такие вещи надо действительно писать самому.
Записан
fuCtor
Гость
Re: QGraphicsView и векторная графика
«
Ответ #7 :
Август 20, 2009, 18:10 »
Делал аналогично отрисовку карты. Делал разные варинты отрисовки, в том числе и на итемах, на итемах не устроил по скорости. В итоге остановился на отрисовке в буфер. Скорость вполне достойная в районе 30 -40 мс на кадр. Все операции над геометриями через деревья (поиск из 16тыс объектов занимает 0.8 мсек в среднем). Все координаты пересчитываю вручную. Для этого всего даже написан свой фреймворк (для использования внутри компании). Так что попробуйте пересмотреть архитектуру.
Записан
Barmaglodd
Гость
Re: QGraphicsView и векторная графика
«
Ответ #8 :
Август 21, 2009, 08:23 »
Уже всё переписал. Отказался от GraphicsView, отрисовываю в промежуточный буфер. Пространственный индекс через OGR и GEOS. Все трансформации вручную. Самое узкое место - сеть, в остальном доволен
Записан
Khs
Гость
Re: QGraphicsView и векторная графика
«
Ответ #9 :
Август 21, 2009, 09:44 »
пополните qt фрэймворк своими разработками в сфере векторной графики/картостроения
Записан
kUSER
Гость
Re: QGraphicsView и векторная графика
«
Ответ #10 :
Октябрь 14, 2009, 09:06 »
Здравствуйте, у меня сейчас возникла подобная задача. Я пробую решить ее с помощью QSvgWidget (сейчас копаю пример SvgView), но кажется пошел не в ту сторону. Скажите, не могли бы Вы сказать как Вы решили проблему?
Может быть показали бы исходники
Заранее спасибо.
Записан
Barmaglodd
Гость
Re: QGraphicsView и векторная графика
«
Ответ #11 :
Октябрь 15, 2009, 08:31 »
Всё сильно завязано на OGR и мои вспомогательные классы, а если это выдрать, то почти ничего и не останется
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...