Как установить расширения inkscape в windows

Обновлено: 06.07.2024

В прошлый раз я сказал, что инструмент для отрисовки шестерёнок в Инкскейпе «Расширения > Отрисовка > Зубчатое колесо. » в качестве единицы измерения использует только абстрактные пиксели и не позволяет выбрать физические меры длины, которые лучше подойдут для нужд реального цифрового производства, например миллиметры.

В случае с расширениями для отрисовки объектов в Inkscape всё еще проще - они представляют собой скрипты на языке Python и конфигурационные файлы в формате XML, которые можно добавлять и редактировать в любом текстовом редакторе и запускать на любом компьютере с установленным Inkscape (все приложение целиком собирать из исходников не нужно).

В диалог с параметрами шестерёнки добавил новый параметр "Единица измерения" (англ. Unit), который определяет единицу измерения для параметра "Шаг колеса" (на картинке с русским переводом он превратился в английскую версию Circular pitch, т.к. из строки с именем параметра я убрал уточнение по пиксели и из-за этого поплыли файлы с переводом, которые я не исправлял). К параметрам "Количество зубцов" и "Угол зацепления" он не относится.

inkscape-gears-04.jpg

Чтобы установить исправленное расширение у себя в системе, нужно скачать два файла:
inkscape/extensions/gears1.inx (файл XML с настройками расширения)
inkscape/extensions/gears1.py (код расширения на языке Пайтон)

и скопировать их в каталог

Также в текущей версии Inkscape вообще отсутствовала возможность нарисовать плоскую дощечку с зубами от шестерёнки (реечная передача, англ. rack and pinion). Такая штука может оказаться полезной для того, чтобы превращать вращательное движение с моторчиков и сервомоторчиков в поступательное движение рейки; пригодится при проектировании каких-нибудь подвижных узлов для роботизированных механизмов, которые можно будет вырезать лазером.

Разбираться во всех этих теориях и формулах мне не очень хотелось, поэтому для отрисовки реечной передачи я взял за основу код для отрисовки шестеренки из предыдущего расширения и просто сделал так, чтобы нужное количество зубов размножалось по прямой линии, а не по окружности.

Их нужно точно также скопировать в каталог

/.config/inkscape/extensions в Linux или в C:\Users\user\AppData\Roaming\inkscape\e xtensions в Windows, перезапустить Inkscape, новый диалог для отрисовки реечной передачи появится в меню «Расширения > Отрисовка > Rack and pinion. »

inkscape-gears-03.jpg

Чтобы нарисовать совместимые между собой зубчатое колесо и реечную передачу, нужно при их создании задать одинаковые значения параметров "Шаг колеса" (Circular pitch) и Угол зацепления (Pressure angle); количество зубцов в обоих случаях может быть любым.

inkscape-gears-06.jpg

Я также отправил ссылки на эти исправления в багтрекер Inkscape и в процессе выяснил, что, во-первых, в репозитории с исходным кодом уже есть новое расширение для отрисовки реечной передачи (вероятно, оно может появиться уже в следующем релизе), во-вторых, в работе есть еще одна улучшенная версия расширения для отрисовки зубчатого колеса с большим количеством дополнительных параметров.

Собственное расширение для Inkscape: код на Пайтон рисует прямоугольник

Ну и напоследок посмотрим, как можно легко добавлять собственные расширения в Inkscape. Как я уже сказал выше, с механизмом расширений двумерные векторные объекты на рабочей области Inkscape можно рисовать при помощи программы на языке Python. Это довольно мощная возможность, т.к. с её помощью для рисования объектов можно использовать какие-нибудь интересные математические формулы или же просто генерировать сложные структуры из множества узлов, имея под рукой все возможности процедурного языка типа сложных условий, циклов и подпрограмм.

Попробуем добавить к Inkscape расширение, которое будет рисовать прямоугольник с заданной шириной и высотой (функция не самая полезная, т.к. прямоугольники гораздо удобнее рисовать при помощи специального инструмента мышкой, но для быстрого знакомства самое то). В диалоге отрисовки прямоугольника будет 3 параметра: ширина (Width), высота (Height) и единица измерения (Unit) для этих значений:

inkscape-gears-07.jpg

Сначала создаём и правим файл XML demo_rectangle.inx, который содержит базовую информацию о расширении: имя, уникальный идентификатор, список скриптов Пайтон, которые необходимы для его работы, список параметров для скрипта (диалог генерируется автоматически на основе этого списка), адрес в главном меню программы, ссылка на исполняемый скрипт на языке Пайтон (demo_rectangle.py).

Второй и последний файл - скрипт на языке Python, которые будет генерировать наш прямоугольник с заданными параметрами.

Здесь мы видим некоторое количество вспомогательного кода: добавление параметров в объект self.OptionParser (они должны быть все те же, что перечислены в файл demo_rectangle.inx), чтение параметров с нужной размерностью, запуск расширения с e.affect().

Сам прямоугольник создаётся в одной единственной строке - координаты вершин на плоскости помещаются в массив points. В этой части будет больше интересного кода в том случае, если расширение будет рисовать что-то более полезное, чем простой прямоугольник.

Далее из точек в массиве points просто генерируется правильный код SVG для добавления на рабочую область, я не сильно вникал в то, что именно он делает, просто взял из кода подвернувшегося под руку соседнего расширения.

Расширение Restack позволяет быстро изменить Z-порядок элементов. Особенно удобно, если объекты упорядочены и частично перекрывают друг друга как черепица. Тогда вы можете быстро изменить направление перекрывающих частей: слева направо или наоборот. Также есть кнопка для случайного варианта.

Color

Настройки, связанные с обработкой цвета. По названиям понятны их назначения, приведу часть из них.

  • Brighter - делает объект ярче
  • Darker - делает объект темнее
  • Grayscale - Меняет цвет всех объектов на оттенки серого
  • Negative - негатив
  • Randomize - меняет цвет в случайном порядке
  • Replace color - меняет цвет на указанный

Generate from Path

Extrude

Позволяет создать объёмную фигуру из двух контуров. Для примера создал два прямоугольника, преобразовал в контур и вызвал расширение.

Extrude

Interpolate

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

Interpolate

Modify Path

Color Markers

По умолчанию маркеры рисуются чёрным цветом. Расширение поможет изменить цвет.

Envelope

Вписывает один контур в другой. Важен порядок выбора. Для примера сначала нужно выбрать эллипс, а потом прямоугольник.

Envelope

Perspective

Для опытов нужно взять два объекта, преобразовать их в Object to Path и выбрать первый объект, к которому нужно применить перспективу и затем второй объект-цель.

Render

Очень интересный раздел, требующий изучения.

3D Polyhedron

Можно выбрать готовые варианты моделей (находятся в папке share\extensions\Poly3DObjects) или загрузить свой вариант файла OBJ. Для этого скачайте obj-файл, скопируйте в указанную папку и выберите вариант Load from file, а затем введите имя файла.

Например, я скачал с сайта модель кота и импортировал в приложение.

Cat OBJ MODEL

Примеры использования: 3D Polyhedron - футбольный мяч.

Barcode

Позволяет создавать штрих-коды разных типов: Classic, Datamatrix, QR Code.

Calendar

Позволяет быстро создать календарь с нужными настройками.

Рисует шестерёнки (Gear) и реечные передачи (Rack Gear).

Gear

Grids

Разные типы сеток.

Random Tree.

Triangle.

Позволяет создать треугольник по заданным параметрам.

Wireframe Sphere

Настройки, связанные с текстом.

Lorem ipsun

Нужно быстро добавить заготовку текста? Создаём с помощью инструмента Text область для ввода текста, выбираем данное расширение и готовый текст появится в нём.

Visualize Path

Интересное расширение для работы с контурами.

Dimensions

Превращает контуры в чертёж с указанием размеров. Нарисуем подобие окна с форточкой. Выбираем отдельно первый прямоугольник и вызываем расширение. Повторяем для второго прямоугольника. Лишние стрелочки можно удалить или отредактировать. Для этого нужно снять группировку. Затем можете вписать свои размеры.

Dimensions

После снятия группировки также можно попробовать изменить маркеры через расширение Color Markers (см. выше).

Measure Path

После установки маркеров из предыдущего примера вы можете воспользоваться этим расширением, чтобы проставить значения расстояний между объектами.

Measure Path

Draw Handles

Рисует рычаги узлов. Может кому-то пригодится.

Draw Handles

Number Nodes

Расширение, которое поможет создать игрушку. Рисуем контур, добавляем по желанию дополнительные узлы, вызываем расширение и вместо контура увидим пронумерованные точки. Осталось распечатать и отдать детям, чтобы они соединяли точки по порядку.

Number Nodes

Сторонние расширения

Можно устанавливать расширения, созданные другими разработчиками. Для этого в папку Inkscape/share/extensions следует скопировать два файла с расширением PY и INX.

Inkscape-jigsaw/Lasercut Jigsaw

Расширение, позволяющее создать кусочки пазла.

Скачайте с Гитхаба файлы Lasercut-jigsaw.inx и Lasercut-jigsaw.py и разместите в папке (см. выше).

В меню Inkscape появится новый пункт Extension | Render | Lasercut Jigsaw.

Вызовите диалоговое окно и установите нужные настройки. После нажатия кнопки Apply у вас появится заготовка.


Дважды разгруппируйте заготовку. Далее скомбинируйте их Path | Combine.

Создайте прямоугольник и положите его под заготовку. Выберите оба объекта и примените к ним операцию Path | Division.

Gcodetools - plug-in Inkscape для экспорта в Gcode

Gcodetools - plug-in Inkscape для экспорта в Gcode

ТипРасширение векторного
графического редактора Inkscape
РазработчикКоманда разработчиков Gcodetools
Написана наPython
ОСКроссплатформенное программное
обеспечение (Windows, Linux,
MacOS)
Версия1.7 от 01.07.2010
ЛицензияGNU GPL
Количество загрузок7800+

Gcodetools это расширение векторного редактора Inkscape, которое позволяет подготавливать и экспортировать векторную графику в Gкод.

Gcodetools и Inkscape распространяются под лицензией GNU GPL, т.е. бесплатно, в т.ч. для коммерческого использования. Обе программы кросплатформенные, есть дистрибутивы под Windows, Linux и MacOS.

Для оформления темы нам нужны скриншоты и фотографии Ваших работ, публикуйте Ваши фотографии в этой теме.

Возможности новой версии Gcodetools 1.6

  • Экспорт кривых в Gcode
  • Аппроксимация с использованием круговой интерполяции (G02 и G03)
  • Автоматическое разбиение кривых для достижения заданной степени точности
  • Обработка со сменой инструментов
  • Экспорт Gкода в параметрической или обычной формах
  • Добавление собственных заголовков и окончаний
  • Выбор единиц измерения
  • Многопроходная обработка
  • Автоматическое добавление цифрового суфикса к назваию сохраняемого файла
  • Создание траекторий для обработки детали на токарном станке
  • Расчет чистового прохода
  • Задание заглубления при чистовом проходе
  • Задание количества чистовых проходов
  • Два различных метода вычисления чистовых проходов
  • Замена стандартных осей
  • Создание траекторий для обработки площади контуров
  • Возможность коррекции созданных траекторий
  • Создание траекторий для обработки контуров фигурной фрезой
  • Задание произвольной формы фрезы
  • Здание различных параметров инструмента и обработки (диаметр инструмента, скорость обработки, заглубление за проход, скорость заглубления, задание произвольного кода перед/после заглубления, форма инструмента, произвольный код смены инструмента)
  • Возможность копирования инструментов
  • Возможность обработки со сменой инструмента
  • Задание масштабирования по всем осям
  • Задание поворотов в плоскости ХY
  • Задание смещения по всем осям
  • Ориентация по произвольным точкам
  • Создание произвольной программы постпроцессора или выбор из стандартного набора
  • Масштабирование и смещение Gcode
  • Произвольная замена команд (в том числе одновременная замена)
  • Параметризация Gcode
  • Округление длинны дробной части чисел в Gкоде
  • Выделение маленьких контуров (возможных артефактов area)
  • Проверка принадлежности инструментов
  • Проверка порядка обработки
  • Экспорт в Gкод для плоттера с тангенциальным ножом. Четвертая ось A - угол наклона ножа.
  • Проверка наличия обновлений.

Лицензия

  • запуска программы, с любой целью;
  • изучения того, как программа работает, и её модификации (предварительным условием для этого является сохранение лицензии GNU GPL);
  • распространения копий;
  • улучшения программы, и выпуска улучшений в публичный доступ (предварительным условием для этого является сохранение лицензии GNU GPL).

Установка

Windows
Распакуйте архив и скопируйте все файлы в каталог Program Files\Inkscape\share\extensions\
Linux
Распакуйте архив и скопируйте все файлы в каталог /home/<имя пользователя>/.config/inkscape/extensions/
или /usr/share/inkscape/extensions/ и перезапустите inkscape
вверх

Видео уроки

Русский язык

Английский язык

Использование и уроки

Скриншоты

Загрузить последнюю версию

Последняя стабильная версия Gcodetools 1.7

Dev версия

Перед работой необходимо создать файлы inx путем запуска скрипта python create_inx.py

Дополнения

Благодарности

Помощь в разработке

  • Расширение для плазменной резки
  • Расширение для токарных станков
  • Расширение для плоттеров
  • Написать отчет об использовании
  • Улучшить справку и уроки
  • Опубликовать Gкод / SVG / или программный код
  • Загрузить фото/видео готовых работ или опубликовать историю разработки
  • Написать отчет об ошибках
  • Помочь в разработке новых функций
  • Помочь в написании уроков и справки
  • Предложить новые функции

Протестировано на

Use the Console, Luke.

Изображение

На первом цветами обозначены синий и зеленый круговая обработка (Gкод G02 и G03), красной линейная обработка (Gкод G01).
Количество узлов в исходном контуре 6096. В конечном файле получилось около 30 000 строк (размер около 1,2 мб). Обработка в два захода.
Время генерации, включая время отрисовки inkscape около 20 сек.

На и третьем все линии тонкие и синие, для того чтобы можно было оценить неточности.

Use the Console, Luke.

Изображение

Use the Console, Luke.

Изображение

Use the Console, Luke.

Изображение

Manual
Gcode tools ver. 1.0.0.

Интерфейс

1.,2. Имя файла и директорий в который будет сохранен готовый Gкод. Если в директории присутствуют файлы header или footer, то они будут использованы вместо стандартных заголовков.
Внимание! У Вас должны быть права на запись в выбранном директории! (Например Вы можете выбрать Ваш домашний директорий. (Мой: "/home/nick"))

  • Z safe - Z координата безопасной высоты перемещения инструмента над обрабатываемой деталью
  • Z surface - Z координата поверхности детали
  • Z deph - Глубина обработки
  • Z step for each cicle - Глубина обработки за каждый заход

5. Диаметр инструмента. Используется при обработке площади кривой.

6. Максимальное количество кривых для обработки площади. Введено для исключения бесконечных циклов.
Радиус для подготовки кривых с помощью Inkscape.

  • Curve to Gcode - преобразование кривых в Gкод
  • Area to Gcode - обработка площади кривой. Достаточно медленный метод. Сложность алгоритма O(n^2) где n-количество узлов. Не советую запускать для кривых со 100 узлами и более.
  • Prepare Area using Inkscape - Создает необходимое количество кривых для обработки внутренней площади кривой.

9. Значения масштабирования и отступов по осям X Y Z.
Есть подозрение, что масштаб по осям X и Y должен совпадать, иначе все дуги окружностей превратятся в дуги эллипсов, что не соответствует кодам G02 и G03.

Пример работы скрипта
Изображение показывает основные этапы преобразования контуров в Gкод:

Use the Console, Luke.

Изображение

Use the Console, Luke.

Изображение

Очередной скриншот Лофта:
Сначала создаем сечения, затем траекторию (траектория - условное название она влияет только на расстояния между сечениями и на сглаживание), затем создаем лофт.

Use the Console, Luke.

Изображение

Готова новая версия Gcode tools v. 1.2.

Внимание последняя версия находится в шапке этой темы!

    • "Curve to Gcode" теперь называется "Path to Gcode", т.к. в Inkscape кривые называются Path.
    • Добавлено автоматическое разбиение кривых. Если ошибка аппроксимации сегмента кривой превышает заданное значение, то сегмент разбивается по палам. Разбиение происходит до тех пор, пока не ошибка не станет приемлемой или количество разбиений не достигнет заданного значения.
      Соответственной добавлены два поля:
      • Biarc interpolation tolerance - допуск интерполяции кривой
      • Maximum splitting depth - максимальная глубина разбиения
      • Теперь стало гораздо проще пользоваться этой функцией -нет необходимости преобразовывать кривую в Динамическую втяжку, просто выбираете кривую вводите значения радиуса оффсета и нажимаете применить.

      Use the Console, Luke.

      Изображение

      Manual ver. 1.2.

      Интерфейс

      Scale и offset along axis задают масштаб и смещение по трем осям. При этом, если "Generate not parametric code" будет выбран, то все вычисления масштаба и смещений будут выполнены непосредственно плагином и полученый Gкод будет обычным кодом с четко заданными координатами, в противном случае Gкод будет выглядеть следующим образом: и в начале кода будет заголовок в котором можно вручную задать смещения и масштаб по трем осям (масштаб осей X и Y зафиксирован чтобы не испортить круговую интерполяцию) и высоту холостого прохода:

      Таким образом значительно упрощается пост-обработка, поэтому, если Ваш контроллер/программный контроллер поддерживает использование параметров лучше не включать опцию "Generate not parametric code".

      Minimum arc radius - задает минимальное значение радиуса для команд G02 и G03, все дуги имеющие меньший радиус будут заменены прямыми линиями. Этот параметр необходим, т.к. при очень маленьком значении радиуса значении радиуса, управляющая программа может выдать ошибку. Например, ЕМС выдает ошибку если радиус дуги меньше 0,02 мм.

      File - имя файла в который будет сохранен Gкод.
      Directory - имя директория в который будет сохранен Gкод. Если это директорий содержит файлы 'header' и/или 'footer' то их содержимое добавится к готовому Gкоду вместо стандартных заголовков и окончаний.
      Внимание! У Вас должны быть права на запись в указанном директории!
      Z safe - координата Z для холостого прохода.
      Z surface - координата Z поверхности обрабатываемой детали.
      Z depth - координата Z глубины обработки.
      Z step for each cycle - величина заглубления при каждом шаге многопроходной обработки. Многопроходная обработка рассчитывается автоматически если Z surface - Z depth > Z step.
      Feed rate - скорость обработки.
      Unit - елиница измерения. Внимание! Значение этой параметра влияет только на одну строку (в заголовок добавляется "G21 (All units in mm)" или "G20 (All units in inch)")никаких дополнительных вычислений не производится. Этот плагин использует внутренние единицы Inkscape - px и они напрямую переводятся в единицы измерения в Gкоде. Т.е. если в Inkscape деталь имеет ширину 10px и выбраны миллиметры, то готовая деталь будет иметь ширину 10мм, если выбраны дюймы, то деталь будет иметь ширину 10 дюймов.

      Tool diameter - диаметр инструмента в дюймах.

      Вкладка Path to Gcode

      Biarc interpolation tolerance - каждый раз когда вычисляется аппроксимация сегмента кривой, вычисляется расстояние между кривой и ее аппроксимацией. Если это расстояние будет больше заданного, тогда сегмент будет разбита на два сегмента, каждый из которых будет заново аппроксимироваться.
      Maximum splitting depth - определяет максимальное количество разбиений одного сегмента. (количество полученных сегментов растет как 2^n, т.е. при Maximum splitting depth = 5 один сегмент может быть заменен 32 сегментами (если раньше не достигнется необходимая точность))

      Начнем с того, что Inkscape – это редактор векторной графики с открытым исходным кодом. Я сам не занимаюсь графикой и мои потребности в этом направлении минимальны, просто иногда бывает надо что-то нарисовать, да еще чтобы этим рисунком можно было управлять. Естественно последнее обстоятельство (которое «управлять») заставляет делать выбор именно в пользу векторной графики, ну, а Inkscape, помимо того, что это редактор векторный и бесплатный, еще и ориентирован на SVG. То есть SVG является его основным форматом. Данный формат поддерживается современными браузерами, графика в этом формате может быть анимированной, интерактивной, управляемой скриптами и при этом имеет огромное количество возможностей. Редактор же при этом является полноценным профессиональным инструментом, позволяющим создавать векторную графику, ну наверно любой сложности.
      Тем не менее, несмотря на мощный инструментарий программы, зачастую возникают задачи, требующие сделать что-то очень специфичное. Например, это может быть создание каких-то фигур, требующих математических расчетов, какого-то точного взаимного позиционирования элементов и тому подобных вещей. Естественно, для таких задач хотелось бы иметь возможность добавлять в программу собственный функционал. И тут надо сказать, что программа имеет достаточно мощную систему расширений, которая подразумевает возможность использования нескольких языков, но как быть, когда среди этих «нескольких» нет того, который нужен? Хотелось бы, наверно, иметь возможность писать расширения на том языке, который знаешь лучше или который подходит больше для решения конкретной задачи. Список поддерживаемых языков обычно бывает ограниченным, и вот вопросом о том, как в данном конкретном случае расширить этот список мы здесь и будем заниматься.

      Система расширений Inkscape описана здесь и далее по ссылкам. Вкратце все выглядит примерно следующим образом.
      Существуют внутренние и внешние расширения.
      Внутренние встраиваются в программу непосредственно и могут манипулировать объектами самой программы. К сожалению, пишутся они только на языке C++ и поэтому в контексте нашей темы они не интересны, хотя подозреваю, возможностей они имеют больше.
      Внешние расширения могут писаться на языках: Python, Ruby, Perl, Bash и XSLT. Они бывают четырех типов: input, output, print и effect. Первые два типа – это импорт и экспорт соответственно, пока они нам не нужны, третий тип позволяет выводить данные на принтеры и прочие внешние устройства (тоже можно сказать разновидность экспорта). А вот effect-расширения – это как раз то, что нам и нужно. Этот тип расширений позволяет выполнять манипуляции над объектами прямо во время работы в программе, то есть создание, изменение объектов и тому подобные вещи. Вот этим мы сейчас и будем заниматься.
      Здесь следует сказать, что среди перечисленных языков в нашем случае два отпадают сразу, а именно Bash и XSLT. Первый из-за того, что работает в Linux, а нам надо что-то более кроссплатформенное, а второй – может использоваться в input и output расширениях, а для effect расширений не поддерживается (это мы исправим). Из оставшихся трех языков лично я имел дело только с Python, но мое знакомство с ним не очень близкое. То есть написать что-то небольшое и несложное на нем я могу, а вот что-то посложнее и побольше – уже нежелательно. Но, как мы увидим дальше, этого мне вполне хватит для того, чтобы реализовать задумку.

      1. Открываем меню Правка > Параметры
      2. В открывшемся диалоге в ветке Система находим строку Пользовательские расширения, там указан каталог с пользовательскими расширениями и кнопка, с помощью которого его можно открыть.
      3. Собственные расширения следует размещать в этом каталоге.
      4. Расширения по сути состоит из двух файлов: файл .inx (Inkscape Extension Definition), являющийся XML-файлом и описывающий расширение; и собственно файл скрипта, на который в .inx файле будет ссылка.

      В принципе задача, которую будет выполнять этот скрипт решается в несколько строк, так что можно было бы эти строки писать всякий раз при создании расширения, но все-таки упростим немного задачу и создадим отдельный модуль, чтобы в дальнейшем можно было просто импортировать этот модуль, вызвать функцию, передать ей адрес реального приложения и дальше работать уже с этим приложением.

      Создаем в папке расширений файл apprunner.py с этим кодом и на этот модуль будем всегда ссылаться.
      Далее процесс создания расширения будет сводиться к тому, чтобы создать описание расширения .inx, как это описано в документации, указать в нем в качестве скрипта файл с примерно таким содержимым

      Второй аргумент необязателен. Если первый аргумент – это скриптовый движок, или программа требует какого-то файла данных, то сам скрипт или файл данных можно указать вторым аргументом. Естественно, это будет работать в том случае, если движок подразумевает синтаксис командной строки, в котором адрес скрипта должен идти сразу после самой команды. Если там другая логика командной строки, то можно в модуль apprunner добавить ее поддержку.
      Теперь, когда все предварительные приготовления закончены, можно перейти к созданию расширения для теста.

      Расширение, которое мы будем писать, будет выполнять очень простую работу, оно будет находить выделенные объекты и устанавливать для них обводку и заливку. Диалоговое окно, описанное в этом файле, содержит два параметра, как раз fill и stroke. Я указал тип параметра string, но можно было указать color, тогда там появился бы Color Picker, но мы просто будем писать код цвета, для наших целей этого достаточно. Тип объекта оставил all, хотя можно ограничить, например, path или что-то такое. submenu создает подменю в меню Расширения, если такого нет и добавляет наше расширение в это подменю. Файл test.py должен находиться в той же папке с расширениями и код его будет следующим

      Здесь метод containsId получает id элемента и строку ids, содержащую id выделенных элементов, возвращает значение, указывающее, есть ли элемент в списке.
      CssGet получает значение атрибута style и имя CSS свойства и возвращает значение.
      CssSet получает текущее значение атрибута style, имя свойства, которое нужно изменить и новое значение, а возвращает строку нового значения всего атрибута style.
      Все это мы будем использовать в преобразовании.

      Теперь в Program.cs создаем код преобразования

      Метод получает строку SVG первым аргументом, строку XSLT вторым аргументом и словарь с параметрами, которые нужно передать преобразованию. Помимо аргументов в преобразование передаем экземпляр класса Helper, для того, чтобы его методы были доступны в преобразовании и назначаем для него пространство имен. Результат преобразования отправляем в стандартный аутпут.
      Ну и метод Main

      К XSLT есть пара требований. Поскольку данный формат выполняет преобразование всего документа, нам нужно позаботиться о том, чтобы документ в основном был скопирован в точности, а изменениям подверглись только те части, которые должны быть изменены. В XSLT должны быть объявлены все параметры, которые будут ему переданы. Кроме того, если мы хотим использовать функционал класса Helper, то надо в документе объявить пространство имен, с которым мы его связали. Также не следует забывать и о том, что Inkscape использует расширенный SVG и расширения связаны с определенными пространствами имен, так что, если мы хотим работать с этими расширениями, то их пространства имен тоже надо будет объявить в документе.
      Собственно, вот что у меня получилось

      После установки всех файлов на свои места и указания этих мест в коде, расширение будет доступно после перезапуска Inkscape, если приложение запущено.

      Уже упоминал выше, что в Inkscape довольно специфический SVG. То есть SVG там вроде как нормальный, но при этом он имеет несколько дополнительных пространств имен, добавляющих нестандартные атрибуты и элементы в документ. В общем и целом, на отображение документа в браузере это никак не влияет, поскольку движки SVG все лишнее и непонятное для них просто игнорируют (в пределах разумного, разумеется), однако для нашей задачи некоторое понимание этих «приращений» может оказаться не только полезным, но и необходимым.
      Все, что я нашел по поводу этих расширений формата в документации – это вот эта страница. Там есть вначале ссылка на страницу, где, по всей видимости, раньше была еще какая-то информация, но сейчас такой страницы не существует, так что и говорить не о чем. Но и из этой страницы (той, которая пока еще есть) мы узнаем важные вещи. Например то, что если данные в этих дополнительных атрибутах будут расходиться с данными основных атрибутов SVG, то Inkscape отдаст предпочтение своим атрибутам, а атрибуты SVG будут приведены в соответствие с ними.
      Что такого важного содержится в этих атрибутах? Возьмем для примера нестандартные фигуры, то есть те, которых нет в SVG, но которые поддерживаются Inkscape. Например, многоугольники и звезды. Понятно, что эти объекты будут порождать элементы path, в которых будут задаваться просто координаты точек, по которым будут строиться фигуры. Но это в конечном итоге, а в процессе редактирования программе нужно как-то с этими объектами работать, то есть программа должна воспринимать их не как просто пути, а как звезду, у которой есть координаты центра, большой и малый радиусы, количество лучей и тому подобные вещи. Просто для того, чтобы этим можно было как-то управлять. Когда в интерфейсе программы меняются какие-то из этих характеристик, параметры пути пересчитываются. Таким образом, если мы в своем расширении хотим звезде добавить лучей, то ну нужно вычислять где будут находиться точки в новой звезде, а вместо этого надо изменить значение соответствующего атрибута. Поэтому тут возникает вопрос о том, где брать информацию о назначении атрибутов. Назначение некоторых можно понять по названию, другие надо изучать. В программе есть редактор XML, с помощью которого можно кое-что понять. Если выделен тот или иной объект, можно подвигать различные манипуляторы и посмотреть, как при этом меняются атрибуты. Кое что все равно остается непонятным, например у тех же звезд есть пара манипуляторов, которые соответствуют атрибутам sodipodi:arg1 и sodipodi:arg2 , что они делают визуально можно наблюдать, но смысл их значений лично я не уловил, так что воспользоваться этим будет сложно. Но в общем и целом разобраться в основных моментах, как мне кажется, большого труда не составит.

      Читайте также: