1 апреля 2020 г. 8:16

Задача отрисовки статического SVG с помощью G-code на координатном устройстве ...

SVG

Доброго времени суток !

Есть задача отрисовки статического SVG с помощью G-code на координатном устройстве.

Так как в Qt есть очень серьезный функционал по отрисовке SVG на различных виджетах - понимаю что должна быть возможность доступа к методам отрисовки примитивов не на уровне : QPainter::drawLine(..), QPainter::drawRect(..), QPainter::drawEllipse(..) …, а еще на более низком уровне где все фигуры (в том числе окружности, сегменты, кривые Безье ...) отрисовываются короткими отрезками с заданными начальными, конечными координатами и набором параметров !

Буду очень благодарен за любую информацию !!!

С уважением, Юрий.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
6
  • 1 апреля 2020 г. 11:08

Насколько я понимаю в 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 разумной суммой в российских рублях !!! :)

С уважением, Юрий.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
s
3 июня 2020 г. 1:56
silo1995

C++ - Тест 003. Условия и циклы

  • Результат:35баллов,
  • Очки рейтинга-10
АП
2 июня 2020 г. 21:11
Алексей Пикенин

C++ - Тест 005. Структуры и Классы

  • Результат:75баллов,
  • Очки рейтинга2
2 июня 2020 г. 13:04
Даниил Чижевский

C++ - Тест 001. Первая программа и типы данных

  • Результат:86баллов,
  • Очки рейтинга6
Последние комментарии
3 июня 2020 г. 14:50
Михаиллл

Qt/C++ - Урок 036. QWebView - пишем простейший браузер на Qt

И использовали QWebEngineView как виджет? Попробуйте setUrl(const QUrl &url)
s
3 июня 2020 г. 14:33
safevgeniia

Qt/C++ - Урок 036. QWebView - пишем простейший браузер на Qt

я с учетом обновлений использовала webenginewidgets
s
3 июня 2020 г. 14:32
safevgeniia

Qt/C++ - Урок 036. QWebView - пишем простейший браузер на Qt

я с учетом обновлений использовала webenginewidgets
3 июня 2020 г. 14:25
Михаиллл

Qt/C++ - Урок 036. QWebView - пишем простейший браузер на Qt

Если взяли все из примера, то не должно собраться, т.к. webkit webkitwidgets уже не работают. Какой класс Вы используете для браузера?
s
3 июня 2020 г. 14:00
safevgeniia

Qt/C++ - Урок 036. QWebView - пишем простейший браузер на Qt

Вроде вск записала правильно, все подключила . Проблем со сборко нет. НО вместо сайта выводится белый экран просто. В чем проблема может быть? По задумке, при нажатии на кнопку долже…
Сейчас обсуждают на форуме
f
3 июня 2020 г. 1:49
fryn3

Можно ли сделать в QML таблицу как в Excel?

edi-tableview - нашел пока такое выглядит коряво, посмотрим что можно сделать
2 июня 2020 г. 2:46
Евгений Легоцкой

Медиа файлы Google Firebase

Картинки можете попробовать сжимать через QPixmap, там есть возможность установки scaleFactor, через него можете устанавливать нужные параметры. А что касается конвертации видео, то лучше п…
2 июня 2020 г. 2:01
Евгений Легоцкой

Перехват обращения к локальным файлам QWebEngineView

В вашем случае вполне адекватное решение. Так сказать меньше зло. В противном случае пришлось бы очень много переписывать и перепиливать.
a
1 июня 2020 г. 10:26
alekseyttrv

SSL на Android

у меня стоит версия Qt 5.14.2. В настройках android поставил openssl из коробки, и этот прроект автоматически стянулся. Достаточно было только добавить в .pro-файл строку после этого и все …
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB