Юрий-В
April 1, 2020, 7:16 p.m.

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

SVG

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

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

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

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

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

3

Do you like it? Share on social networks!

6
Docent
  • April 1, 2020, 10:08 p.m.

Насколько я понимаю в SVG прописаны примитывы, они прописаны в своем условном масштабе. Вы высчитываете коэфициент мастшаба под размер вашего полотна (в зависимости от разрешающей способности станка). Затем парсите файл и отрисовываете все те примитивы которые там есть по списку. Алгоритмы известны, доступны, и много раз разжеваны кому не лень. Несколько поколдовать над их прикручиванием к своей программе (тот же перевод в G-code).
Готовых либ поискать - тоже полно. Вот первая попавшаяся
Converts SVG files to GCode. Used by the Hacklab laser.

    Юрий-В
    • April 2, 2020, 1:26 a.m.

    Спасибо за ответ !
    Видимо я не корректно и не полно описал нюансы.
    Эта библиотека к сожалению есть для Win/Mac. Мой проект под Linux+RaspberryPi+CNC. Но это пока даже и не так важно !

    Постараюсь описать свою точку зрения подробнее :
    - Наверное было бы правильнее идти вообще через написание своего устройства на базе наследования (QPainter,QPaintDevice,QPaintEngine) если я правильно понимаю ту концепцию что предлагается в Qt5 (поправьте меня пожалуйста если я неправ !).
    Но мой вопрос был даже не об этом !!!
    Я спрашивал о том что так как в Qt реализована практически полноценная работа по парсингу и прорисовке SVG на виджетах (QWidget,QImage,QSVGWidget,...) то наверняка есть на достаточно низком уровне метод который используется для рисования отрезка-примитива. и перегрузив (или переписав) его можно на его уровне сгенерировать G-Code примитива (мини-отрезка с начальными и конечными коордиратами). Что в свою очередь позволит сгенерировать G-Code всех фигур которые предлагается перегрузить в QPaintEngine для создания своего бекэнда.
    Для чего проделывать всю работу (парсинг) которая уже сделана в Qt дублируя ее кодом других библиотек и делая масло маслянным ?

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

      Docent
      • April 2, 2020, 2:37 a.m.
      • (edited)

      За это отвечает 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, 3:50 p.m.
        • (edited)

        Спасибо !

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

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

          Юрий-В
          • May 14, 2020, 3:27 p.m.

          Добрый день !

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

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

            Юрий-В
            • May 19, 2020, 5:20 p.m.

            Добрый день !

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

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

              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • AK
                April 1, 2025, 11:41 a.m.
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • Evgenii Legotckoi
                March 9, 2025, 9:02 p.m.
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                March 9, 2025, 4:14 p.m.
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
              • ИМ
                Nov. 22, 2024, 9:51 p.m.
                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              • Evgenii Legotckoi
                Oct. 31, 2024, 11:37 p.m.
                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup