Название: QGraphicsView и векторная графика Отправлено: Barmaglodd от Август 12, 2009, 20:19 Задача простая, нарисовать карту, с возможностью масштабирования и выбора объектов. Карта задана набором векторных объектов с атрибутами. Сразу скажу про QGis и т.д. и т.п. знаю, цель была сделать более лёгкий вариант. Решил использовать QGraphicsView, в документации всё очень красиво расписано, но сразу получил удар граблями :(
1. При масштабировании, масштабируется всё: размеры линий, рисунки кистей, текст. Ладно, для точек и подписей придумал костыль, делаю верхний QGraphicsItem, который ничего не рисует, и дочерние, которые игнорируют трансформации родителя. Я так понял, это законный костыль, т.к. в комментариях к ItemIgnoresTransformations приводится пример с не масштабируемым текстом. Но остаётся вопрос с толшиной линий и штриховкой. Единственное, что приходит в голову, в наследоваться от QGraphicsItem, сбрасывать матрицу преобразований у painter'а, перерасчитывать координаты и рисовать. Это явный перебор. :( 2. Выделение тормозит. У меня сотни тысяч объектов с перекрывающимися boundingBox'ами. Плюс счастие в виде косяка, описанного в теме http://www.prog.org.ru/topic_9063_0.html (http://www.prog.org.ru/topic_9063_0.html). 3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет. 4. Нет штатного способа подгружать геометрию по запросу. Хочется полноценного MVC, а не пихать всю геометрию в память. Почему в документации пишут про 2D, когда по факту это растровое полотно с глюками, Я ещё удивлялся, почему в QGis все слои рендерятся в картинки, и всё выделение руками реализовано. Извините за сумбур :) Название: Re: QGraphicsView и векторная графика Отправлено: Igors от Август 12, 2009, 20:57 .org.ru/topic_9063_0.html[/url]. Ну, вообще-то это называется "anti-alias" :) И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения. 3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет. Название: Re: QGraphicsView и векторная графика Отправлено: BlackTass от Август 13, 2009, 03:29 По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца.
Название: Re: QGraphicsView и векторная графика Отправлено: Barmaglodd от Август 13, 2009, 04:59 .org.ru/topic_9063_0.html[/url]. Ну, вообще-то это называется "anti-alias" :) И обеспечить его - работа кропотливая, никто за Вас это делать не будет. Так что при всем уважении - Ваши претензии не по адресу, любой пакет дает tools, а не готовые решения. 3. Глюк с перерисовкой штриховки при масштабировании. На определённых масштабах сцена выглядит будто шахматная доска, вся разделена на квадраты, в одних есть штриховка, в других нет. Название: Re: QGraphicsView и векторная графика Отправлено: Barmaglodd от Август 13, 2009, 06:25 По сути это реально слишком узкая задача и тут нужен большой кастом, и QGraphicsFramework еще молодой и быстро развивающийся, естественно он еще не вылизан до конца. На самом деле задача простая. Проблема в том, что GV все трансформации применяет к QPainter, а не к объектам сцены. Т.е. все трансформации над растром, а не над вектором.Название: Re: QGraphicsView и векторная графика Отправлено: Barmaglodd от Август 13, 2009, 06:28 6. Несколько перекрывающихся объектов, кликаю мышкой в область пересечения, выделяется верхний, кликаю второй раз, остаётся старое выделение, а хочется, чтоб следующий выделился. И это руками надо делать. :( Видимо я слишком многого хочу.
Название: Re: QGraphicsView и векторная графика Отправлено: BlackTass от Август 13, 2009, 08:24 А пробовали троллям писать? может что и подскажут дельного, но мне все таки кажется что такие вещи надо действительно писать самому.
Название: Re: QGraphicsView и векторная графика Отправлено: fuCtor от Август 20, 2009, 18:10 Делал аналогично отрисовку карты. Делал разные варинты отрисовки, в том числе и на итемах, на итемах не устроил по скорости. В итоге остановился на отрисовке в буфер. Скорость вполне достойная в районе 30 -40 мс на кадр. Все операции над геометриями через деревья (поиск из 16тыс объектов занимает 0.8 мсек в среднем). Все координаты пересчитываю вручную. Для этого всего даже написан свой фреймворк (для использования внутри компании). Так что попробуйте пересмотреть архитектуру.
Название: Re: QGraphicsView и векторная графика Отправлено: Barmaglodd от Август 21, 2009, 08:23 Уже всё переписал. Отказался от GraphicsView, отрисовываю в промежуточный буфер. Пространственный индекс через OGR и GEOS. Все трансформации вручную. Самое узкое место - сеть, в остальном доволен :)
Название: Re: QGraphicsView и векторная графика Отправлено: Khs от Август 21, 2009, 09:44 пополните qt фрэймворк своими разработками в сфере векторной графики/картостроения :)
Название: Re: QGraphicsView и векторная графика Отправлено: kUSER от Октябрь 14, 2009, 09:06 Здравствуйте, у меня сейчас возникла подобная задача. Я пробую решить ее с помощью QSvgWidget (сейчас копаю пример SvgView), но кажется пошел не в ту сторону. Скажите, не могли бы Вы сказать как Вы решили проблему?
Может быть показали бы исходники ::) Заранее спасибо. Название: Re: QGraphicsView и векторная графика Отправлено: Barmaglodd от Октябрь 15, 2009, 08:31 Всё сильно завязано на OGR и мои вспомогательные классы, а если это выдрать, то почти ничего и не останется :)
|