Задача отрисовки статического SVG с помощью G-code на координатном устройстве ...
Доброго времени суток !
Есть задача отрисовки статического SVG с помощью G-code на координатном устройстве.
Так как в Qt есть очень серьезный функционал по отрисовке SVG на различных виджетах - понимаю что должна быть возможность доступа к методам отрисовки примитивов не на уровне : QPainter::drawLine(..), QPainter::drawRect(..), QPainter::drawEllipse(..) …, а еще на более низком уровне где все фигуры (в том числе окружности, сегменты, кривые Безье ...) отрисовываются короткими отрезками с заданными начальными, конечными координатами и набором параметров !
Буду очень благодарен за любую информацию !!!
С уважением, Юрий.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Насколько я понимаю в SVG прописаны примитывы, они прописаны в своем условном масштабе. Вы высчитываете коэфициент мастшаба под размер вашего полотна (в зависимости от разрешающей способности станка). Затем парсите файл и отрисовываете все те примитивы которые там есть по списку. Алгоритмы известны, доступны, и много раз разжеваны кому не лень. Несколько поколдовать над их прикручиванием к своей программе (тот же перевод в G-code).
Готовых либ поискать - тоже полно. Вот первая попавшаяся
Converts SVG files to GCode. Used by the Hacklab laser.
Спасибо за ответ !
Видимо я не корректно и не полно описал нюансы.
Эта библиотека к сожалению есть для Win/Mac. Мой проект под Linux+RaspberryPi+CNC. Но это пока даже и не так важно !
Постараюсь описать свою точку зрения подробнее :
- Наверное было бы правильнее идти вообще через написание своего устройства на базе наследования (QPainter,QPaintDevice,QPaintEngine) если я правильно понимаю ту концепцию что предлагается в Qt5 (поправьте меня пожалуйста если я неправ !).
Но мой вопрос был даже не об этом !!!
Я спрашивал о том что так как в Qt реализована практически полноценная работа по парсингу и прорисовке SVG на виджетах (QWidget,QImage,QSVGWidget,...) то наверняка есть на достаточно низком уровне метод который используется для рисования отрезка-примитива. и перегрузив (или переписав) его можно на его уровне сгенерировать G-Code примитива (мини-отрезка с начальными и конечными коордиратами). Что в свою очередь позволит сгенерировать G-Code всех фигур которые предлагается перегрузить в QPaintEngine для создания своего бекэнда.
Для чего проделывать всю работу (парсинг) которая уже сделана в Qt дублируя ее кодом других библиотек и делая масло маслянным ?
С уважением, Юрий.
За это отвечает QSvgRender, перед тем как кинуть картинку на виджет её через QSvgRender в QPixMap прогнать надо.
Делается это в методе ::render(&)
"The QSvgRenderer class is used to draw the contents of SVG files onto paint devices."
Там все эти примитивы раскулачиваются.
Можно посмотреть в исходниках как это происходит qtsvg-everywhere-src-5.14.2.zip
Спасибо !
Поковырявшись и посмотрев интерфейс QSvgRender и т.д. понимаю что похоже нужно будет лезть в реализацию ::render(..). Кто может подсказать как и где выкачать актуальные исходники QSvgRenderer::render()??? Как то не было необходимости в них до сих пор. То что лежит тут : qtsvg-everywhere-src-5.14.2.zip это исходники демо примеров - в них я нашел только примеры применения, но не примеры реализации.
С уважением, Юрий.
Добрый день !
Потратив достаточное количество времени и не добившись решения своей проблемы решил продолжить свой пост ...
Есть ли у кого то из коллег опыт написания класса подобного QPrinter для вывода на него статичного SVG с помощью классов : QPaintDevice + QPaintEngine + QPainter ?
Интересует реальный опыт ! Конечно рассуждения и соображения тоже интересны ! Но опыт все предпочтительнее ! :)
С уважением, Юрий.
Добрый день !
Судя по реакции направляющая меня подсказка в свете настоящего времени уже дело не достойное !!! :) Предлагаю компенсировать ваше время и труд по разъяснению мне нюансов написания класса подобного QPrinter разумной суммой в российских рублях !!! :)
С уважением, Юрий.