April 1, 2020, 8:16 a.m.

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

SVG

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

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

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

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

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
6

Насколько я понимаю в 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

  • April 3, 2020, 4:50 a.m.
  • (edited)

Спасибо !

Поковырявшись и посмотрев интерфейс QSvgRender и т.д. понимаю что похоже нужно будет лезть в реализацию ::render(..). Кто может подсказать как и где выкачать актуальные исходники QSvgRenderer::render()??? Как то не было необходимости в них до сих пор. То что лежит тут : qtsvg-everywhere-src-5.14.2.zip это исходники демо примеров - в них я нашел только примеры применения, но не примеры реализации.

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

Добрый день !

Потратив достаточное количество времени и не добившись решения своей проблемы решил продолжить свой пост ...
Есть ли у кого то из коллег опыт написания класса подобного QPrinter для вывода на него статичного SVG с помощью классов : QPaintDevice + QPaintEngine + QPainter ?
Интересует реальный опыт ! Конечно рассуждения и соображения тоже интересны ! Но опыт все предпочтительнее ! :)

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

Добрый день !

Судя по реакции направляющая меня подсказка в свете настоящего времени уже дело не достойное !!! :) Предлагаю компенсировать ваше время и труд по разъяснению мне нюансов написания класса подобного QPrinter разумной суммой в российских рублях !!! :)

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
How to become an author?

Contribute to the evolution of the EVILEG community.

Learn how to become a site author.

Learn it
Donate

Good day, Dear Users!!!

I am Evgenii Legotckoi, developer of EVILEG. And it is my hobby project, which helps to learn programming another programmers and developers

If the site helped you, and you want also support the development of the site, than you can donate by following ways

PayPalYandex.Money
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting Timeweb
s
June 3, 2020, 1:56 a.m.
silo1995

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

  • Result:35points,
  • Rating points-10
AP
June 2, 2020, 9:11 p.m.
Aleksej Pikenin

C++ - Test 005. Structures and Classes

  • Result:75points,
  • Rating points2
June 2, 2020, 1:04 p.m.
Daniil Chizhevskij

C++ - Test 001. The first program and data types

  • Result:86points,
  • Rating points6
Last comments
June 3, 2020, 2:50 p.m.
Mihailll

Qt/C++ - Lesson 036. QWebView – How to make simple browser on the Qt

И использовали QWebEngineView как виджет? Попробуйте setUrl(const QUrl &url)
s
June 3, 2020, 2:33 p.m.
safevgeniia

Qt/C++ - Lesson 036. QWebView – How to make simple browser on the Qt

я с учетом обновлений использовала webenginewidgets
s
June 3, 2020, 2:32 p.m.
safevgeniia

Qt/C++ - Lesson 036. QWebView – How to make simple browser on the Qt

я с учетом обновлений использовала webenginewidgets
June 3, 2020, 2:25 p.m.
Mihailll

Qt/C++ - Lesson 036. QWebView – How to make simple browser on the Qt

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

Qt/C++ - Lesson 036. QWebView – How to make simple browser on the Qt

Вроде вск записала правильно, все подключила . Проблем со сборко нет. НО вместо сайта выводится белый экран просто. В чем проблема может быть? По задумке, при нажатии на кнопку долже…
Now discuss on the forum
June 3, 2020, 2:34 a.m.
Evgenij Legotskoj

Qt- C++ QTableView подсветить строку

Некогда было
f
June 3, 2020, 1:49 a.m.
fryn3

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

edi-tableview - нашел пока такое выглядит коряво, посмотрим что можно сделать
June 2, 2020, 2:46 a.m.
Evgenij Legotskoj

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

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

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

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

SSL на Android

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