Получить абсолютные координаты для вращения элементов Inkscape SVG

Я использую wxPython для прототипа некоторых интерфейсов отображения для проекта, который в конечном итоге станет встроенным дизайном. Поскольку мы итерации с графическим дизайнером, гораздо проще позволить им работать в редакторе WYSIWYG, таком как Inkscape, чем постоянно переписывать вызовы 2D-графики. Для элементов, которые нуждаются в анимации или динамическом тексте, элементы SVG легко идентифицируются по идентификатору, так что они могут быть программно обновлены до рендеринга. Поток рендеринга выглядит следующим образом:

Inkscape SVG as XML --> Python modification of XML --> Drawing onto wxPython buffered canvas using Cairo and pyRSVG 

Я хотел бы анимировать вращающуюся иглу вокруг неподвижной оси для датчика. Чтобы определить иглу, графический дизайнер рисует графический «игла» и элемент «needle_axis», который представляет собой небольшой круг. Затем я подумал, что могу установить свойство преобразования, используя желаемый угол и центральные координаты «needle_axis». Однако, поскольку относительные положения могли быть затронуты из-за других преобразований, определение абсолютного положения оси вращения является нетривиальным.

Я не могу найти библиотеку Python для определения абсолютных координат элемента, и мне кажется, что изобретать колесо, чтобы попробовать реализовать часть спецификации SVG. необходимо вычислить его. API rsvg упоминает функции rsvg_handle_get_dimensions_sub и arsvg_handle_get_position_sub чтобы получить размеры и позиции элементов, но я не могу найти API для pyRSVG.

Есть ли лучший способ найти ось вращения, чем ручное вычисление? Пример файла Inkscape SVG и тестового фрагмента доступен в виде сущности.

One Solution collect form web for “Получить абсолютные координаты для вращения элементов Inkscape SVG”

Если я правильно понял, у вас есть координаты иглы и координаты оси вращения, и вы хотите программно изменить «угол» иглы, а затем изменить форму иглы в файле SVG соответственно?

Я думаю, что это действительно плохая идея: внесение изменений в SVG, сохранение, а затем рендеринг «нового SVG» потребует слишком много ресурсов и именно поэтому такая простая задача кажется сложной.

Вместо этого проанализируйте свой SVG один раз (используя lxml например, кусок торта, чтобы извлечь координаты, просто выполнив некоторые запросы XPATH ) и постройте свои фигуры в модели (например, класс Needle , с путями и центром), а затем просто поверните эту иглу с помощью преобразований Cairo . Они уже предоставляют функцию rotate которая будет делать то, что вы ищете!

  • Создание документа SVG / XML без пространства имен ns0 с использованием Python ElementTree
  • Есть ли скриптовый редактор SVG?
  • преобразование из svg в pdf
  • Лучший способ создания векторной графики в python для использования в word / powerpoint
  • Библиотека для расчета путей SVG
  • Цвет фона модуля svgwrite Python
  • Отображение SVG в ноутбуке IPython из функции
  • Исходный код для преобразования JPG (битмап) в SVG (вектор)?
  • Python - лучший язык программирования в мире.