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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Создание нового устройства рисования ...  (Прочитано 17063 раз)
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #15 : Октябрь 17, 2022, 12:04 »

Добрый день !

И так ! Улыбающийся
Часть моих выходных была посвящена попытке решения моей головоломки ! Улыбающийся

В результате :
- понятно что в SVG мешает моему коду конвертировать файлы - это transform="translate(... ...)" ! Файлы где нет трансформаций как раз и были тем успехом который у меня был с самого начала ! Улыбающийся
Но я абсолютно уверен что это как раз из за того что я некачественно использую методы классов Qt Paint System ! Так как при работе например с QImage те же самые файлы рисуются отлично !
Я еще более убедился что нужно искать компетентной помощи у специалистов которые работают с SVG и могут проконсультировать по методам классов Qt Paint System или разбираться в исходном коде. Улыбающийся))

С уважением, Юрий.
Записан
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #16 : Октябрь 24, 2022, 10:27 »

Добрый день !

Кто может подсказать как в Qt определить точки пересечения линий при отрисовке SVG ?
Есть ли какие то стандартные методы ?

С уважением, Юрий.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #17 : Октябрь 24, 2022, 12:10 »

если у линий есть координаты начала и конца (т.е. это отрезки), то можно, например, через https://doc.qt.io/qt-5/qlinef.html#intersects
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #18 : Октябрь 24, 2022, 13:42 »

Спасибо за ответ !

Ну с линией - таки да ! Я это видел ! И даже приходилось пользовать ...

Но в моей задачке не совсем линии :
      QPainterPath::ElementType::MoveToElement: - с этим все понятно.
      QPainterPath::ElementType::LineToElement: - с этим ну в общем то тоже.
      QPainterPath::ElementType::CurveToElement: - с этим нет !!!
      QPainterPath::ElementType::CurveToDataElement: - с этим нет !!!
да и сама проблемка не совсем о пересечении двух линий !

Скорее мне нужно получить точки пересечения рисуемого в данный момент элемента (QRect) с ранее отрисоваными элементами на QPaintDevice !
Как то так !

С уважением, Юрий.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #19 : Октябрь 24, 2022, 14:27 »

наверное только свою логику писать. например, хранить массив QPolygonF чтоб вычислять их пересечения.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #20 : Октябрь 24, 2022, 19:14 »

Ну да ! Сегодня пришел примерно к такому же выводу !!! Улыбающийся
Только думаю что нужно проверять вновь создаваемый QPainterPath на пересечение с ранее созданными QPainterPath ! С помощью ::intersect(...), ::intersected(...), ::contains(...), ... !
Тут есть над чем подумать и поэкспериментировать ! Улыбающийся

С уважением, Юрий.
ПС по результатам отпишусь позже
« Последнее редактирование: Октябрь 24, 2022, 19:17 от Юрий-В » Записан
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #21 : Октябрь 27, 2022, 15:04 »

Добрый день !

По ходу разбора Qt SVG появляется все больше нюансов и вопросов ! Улыбающийся

1. Правильно ли я понимаю что получение текущего цвета которым отрисовываются фигуры и примитивы в методах QPaintEngine доступно через -
QPaintEngine::painter()->pen().color(); ?

2. Где и как можно получить имя текущего слоя если SVG файл многослойный ?

,,,

С уважением, Юрий.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #22 : Октябрь 27, 2022, 17:23 »

1. звучит логично. pen — это цвет контура (линий), цвет заливки — brush
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #23 : Октябрь 27, 2022, 19:01 »

Ну да ! Улыбающийся
Проверил в коде ! Вроде так и есть !

Где бы блин найти приличное описание ?
Вроде и хелпа много и обсуждений, но как только касаешься чего то что не на поверхности лежит прям ступор ! Улыбающийся

С уважением, Юрий.
Записан
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #24 : Ноябрь 06, 2022, 13:55 »

Добрый день !

Некоторое время занимался другими вопросами !

Ну и конечно параллельно по немногу этой темой ! Улыбающийся

Сейчас понимаю что уперся в проблему работы с размерами svg ! Мои предположения о том что масштабирование происходит путем вызова QSvgRenderer::setViewBox(...) оказались не верными ! После копания в исходниках наследников QPaintDevice (QImage, QPrinter ...) понимаю что это устроенно не так прямолинейно ! Но вот реального понимания механизма пока нет !
Если есть соображения и советы - с удовольствием прислушаюсь !

С уважением, Юрий.
« Последнее редактирование: Ноябрь 06, 2022, 14:38 от Юрий-В » Записан
Юрий-В
Новичок

Offline Offline

Сообщений: 17



Просмотр профиля
« Ответ #25 : Ноябрь 22, 2022, 16:56 »

Добрый день !

Кто может помочь с пониманием работы с QPaintDevice::metric(..) ?
Все что написано в документации я уже конечно прочел и попробовал ! Улыбающийся
  - QPaintDevice::PdmWidth: - ширина в единицах хранения в svg; (на сколько я понимаю в пикселах) (берем из QSvgRenderer::defaultDevice(..))
  - QPaintDevice::PdmHeight: - высота аналогично
  - QPaintDevice::PdmWidthMM: - ширина в мм (берем из QSvgRenderer::viewBox(..))
  - QPaintDevice::PdmHeightMM:  - высота аналогично
  - QPaintDevice::PdmNumColors: - количество цветов для создаваемого устройства (константа из требований к устройству) - пусть будет например 16
  - QPaintDevice::PdmDepth: - количество битовых плоскостей (по докам) - тут не понятно - это бит на цвет или что Непонимающий
  - QPaintDevice::PdmDpiX: - dpi X логическая - тут мне не понятно !!!
  - QPaintDevice::PdmPhysicalDpiX: - dpi X физическая - аналогично !!!
  - QPaintDevice::PdmDpiY: - dpi Y логическая - аналогично !!!
  - QPaintDevice::PdmPhysicalDpiY: - dpi Y физическая - аналогично !!!
  - QPaintDevice::PdmDevicePixelRatio: - соотношение чего с чем Непонимающий
  - QPaintDevice::PdmDevicePixelRatioScaled: - аналогично !!!

Уверен что не понимаю идею которая заложена в управлении классом ! Если у кого то есть опыт работы с этим методом и соответственно с классом - буду очень признателен за любые подсказки !

С уважением, Юрий.
ПС Понятно что можно написать свои костыли к данному классу и заставить его генерировать то что нужно ! Но хотелось бы именно разобраться в той логике которую закладывали разработчики.
« Последнее редактирование: Ноябрь 22, 2022, 16:59 от Юрий-В » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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