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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2
1  Программирование / Общий / Re: Создание нового устройства рисования ... : Ноябрь 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: - аналогично !!!

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

С уважением, Юрий.
ПС Понятно что можно написать свои костыли к данному классу и заставить его генерировать то что нужно ! Но хотелось бы именно разобраться в той логике которую закладывали разработчики.
2  Программирование / Общий / Re: Создание нового устройства рисования ... : Ноябрь 06, 2022, 13:55
Добрый день !

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

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

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

С уважением, Юрий.
3  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 27, 2022, 19:01
Ну да ! Улыбающийся
Проверил в коде ! Вроде так и есть !

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

С уважением, Юрий.
4  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 27, 2022, 15:04
Добрый день !

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

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

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

,,,

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

С уважением, Юрий.
ПС по результатам отпишусь позже
6  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 24, 2022, 13:42
Спасибо за ответ !

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

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

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

С уважением, Юрий.
7  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 24, 2022, 10:27
Добрый день !

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

С уважением, Юрий.
8  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 17, 2022, 12:04
Добрый день !

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

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

С уважением, Юрий.
9  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 12, 2022, 16:33
По QSvgRenderer - согласен ! Конечно ! Это обертка для себя ! Улыбающийся

2) иначе б Петю ... - ну да ! Это для меня тоже понятно. Так же как и то что Qt понимает не только тег - g (тег g служит для группировки фигур по смыслу, чтобы поддерживать прозрачную структуру документа. Группа элементов может быть использована повторно.), но и все остальные нюансы современного стандарта SVG ! 

3) думаю, надо такие методы добавлять самому. например, у QSvgGenerator можно контролировать size и resolution. - ну да так и есть ! Но это у QSvgGenerator !
В моем случае в QSvgRenderer можно задать размер области рендеринга setViewBox() и соотношение сторон при отрисовке setAspectRatio() что тоже отлично ! Но где сделать корректировку например единиц изменения я пока не знаю.

4) можно ничего не делать, зависит от личной необходимости - спасибо за уточнение - в этом были сомнения ! Хотя из того что нашел в доках понял примерно так же !

что там за g< \> не знаю, в спецификациях свг не разбираюсь. Для теста можно взять Qt пример, который загружает свг - да, это косвенно я конечно проверил ! Более того в проекте я использую те же самые svg'шки для отрисовки их на QToolButton() ! Поэтому практически уверен что дело не в Qt ! Причина того что у меня не получается в отсутствии моего опыта в данном вопросе !

С уважением, Юрий.
10  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 12, 2022, 12:24
Добрый день !

После недолгого копания получился вот такой вот набросок - https://gitlab.com/z34x/codemaker.git

Что то конечно получилось ! Но вопросов поубавилось не значительно Улыбающийся !  

И так :

1 Понимаю что наследование должно быть примерно такое.
2 Понимаю что применение объектов классов наследников QPaintDevice, QPaintEngine и QPainter должно происходить так.

3 Не понимаю как задать  линейные размеры наследнику QPaintDevice ! Логично бы было что бы именно наследник QPaintDevice имел бы виртуальные методы с помощью которых меняются параметры устройства на которое происходит вывод (линейные размеры, единицы измерения ...) ! Но понимаю что моя логика тут конфликтует с действительностью. Улыбающийся
4. Не понимаю что нужно делать в методах begin() и end() при наследовании например классa QPaintDevice. Улыбающийся

Так и хочется сказать - запишите меня на курсы по Qt Улыбающийся)))) ! Ну или растолкуйте невежде ...
Решения подобной задачки я к сожалению в сети не нашел, а научиться писать классы устройств очень хочется ! Улыбающийся

Ну и как следствие - у меня получается конвертировать один из svg файлов который есть в subдиректории /in и его сконвертированный образ в /out ! Он называется Петя.svg ! Но не получается конвертировать остальные ! Причина мне понятна в остальных есть тег g< \> ! Но как решить эту проблему не понятно ! Улыбающийся

Короче вопросов много ...

С уважением, Юрий.
11  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 07, 2022, 10:05
Добрый день !

Спасибо !

В общем идея понятна !
Буду пробовать реализовать !
По дальнейшему процессу или результату обязательно отпишусь !

С уважением, Юрий.
12  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 06, 2022, 17:02
Да ! Очень похоже что вы правы !
Судя по описанию класса QPicture (https://doc.qt.io/qt-5/qpicture.html) а он наследуется так же от QPaintDevice ! Класс наследника QPaintDevice скармливается QPainter ! И QPainter отрисовывает нужную svg'шку на QPaintDevice !
Осталось это разумно описать кодом ! Улыбающийся
13  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 06, 2022, 16:43
Совершенно согласен с вашей точкой зрения ! Улыбающийся

Таки да ! Я тоже так считаю !

В наследнике QPaintDevice переопределяем paintEngine() и создаем обьект наследника QPaintEngine (в котором в свою очередь преопределены виртуальные методы в которых мы и перехватываем примитивы рисования) !

Но как быть дальше что то я ...
Улыбающийся

С уважением, Юрий.
ПС Могу выложить проект набросков ввиде архива ! Если оно конечно нужно ?
14  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 06, 2022, 12:26
Добрый день !

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

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

Тут такое дело ! Я уже потратил какое то время в попытке проанализировать троицу классов и нашел возможность перегрузки методов ! По моему мнению делаются они в классе наследнике QPaintEngine !
QPainter же это класс рисовальщик (собственно и из названия оно логично следует Улыбающийся ) !
 
На данный час мне не понятно как описать взаимодействие классов которые обеспечивают Paint System ?!

Это и является моей проблемой и соответственно моим вопросом ! Улыбающийся

Вроде описание вижу - https://doc.qt.io/qt-6/paintsystem.html ! Улыбающийся
И желание реализовать имею ! Улыбающийся
Но видимо experience мягко говоря не достаточен !!! Улыбающийся

С уважением, Юрий.
ПС Буду премного благодарен за высказывание любых мнений и соображений ! Ну а если кто то имеет такой опыт и может указать "путь истинный" готов отблагодарить ! Улыбающийся
15  Программирование / Общий / Re: Создание нового устройства рисования ... : Октябрь 05, 2022, 19:39
Может быть оно конечно и так ...

Но поглядев внимательно header этого класса я не совсем понимаю что именно и как можно перегрузить в этом классе для того что бы решить мою задачу ?!

Сам QSvgGenerator предназначен все таки для генерации svg файлов на основании отрисованых с помощью QPainter примитивов !

А моя задача как раз обратная - получение примитивов на выходе класса ! При том что на входе есть svg файл !

С уважением, Юрий.
Страниц: [1] 2

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