Как пересчитать (а не просто масштабировать / преобразовать) путь SVG, чтобы он соответствовал ограничивающей рамке?

Я пытаюсь построить гистограмму изотипов с помощью Vega-Lite. Vega-Lite поддерживает настраиваемые строки пути SVG (например, "M10 10 H 90 V 90 H 10 L 10 10") в виде фигур, но рекомендует центрировать команды рисования пути в ограничивающем прямоугольнике от -1 до 1 для осей x и y (спецификация Vega-Lite)

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

Есть ли способ фактически пересчитать пути SVG?

В приведенном выше примере решение, которое мне нужно, было бы "M-1 -1 H 1 V 1 H -1 L -1 -1"


person Corvince    schedule 19.03.2019    source источник
comment
В Inkscape (0.92) откройте всплывающее окно «Настройки» (Shift + Ctrl + P), выберите «Поведение -› Преобразования », выберите Сохранить преобразование: оптимизировано и повторите попытку масштабирования пути.   -  person ccprog    schedule 19.03.2019
comment
Спасибо за совет, но оптимизация уже является выбором по умолчанию и не работает (вероятно, это связано с моим конкретным значком). Но это дало мне подсказку для правильных поисковых запросов Google (см. Ответ ниже)   -  person Corvince    schedule 20.03.2019
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он касается использования графических инструментов (здесь Inkscape), а не программирования. В качестве альтернативы вы можете включить минимальный, полный и проверяемый пример кода ваших значков до и после их преобразования, как вы описываете с помощью Inkscape.   -  person Peter O.    schedule 22.03.2019
comment
Если ваши значки не имеют формы, отличной от контуров, то в зависимости от их характера может быть тривиально преобразовать их программно: извлечь строки пути, передать их в программную библиотеку, которая анализирует путь, преобразовывает путь, генерирует преобразованную строку пути, и повторно вставьте строку пути в SVG.   -  person Peter O.    schedule 22.03.2019
comment
Нет, это не вопрос о Inkscape или любом другом графическом инструменте. После комментариев и моего собственного ответа я понимаю, что моя фраза могла указывать на то, что я ищу ответ Inkscape, но это не тот случай. Re: тривиально: Было бы тривиально, если бы я знал, какую программную библиотеку использовать и как преобразовать путь. Но это, по сути, мой вопрос. Я добавлю путь решения для пути в моем вопросе, тем не менее.   -  person Corvince    schedule 22.03.2019


Ответы (1)


Существует надстройка inkscape, которая обеспечивает функциональность рекурсивного применения преобразования к фигурам. Он удобно назван applytransforms и после установки доступен в меню под Extensions | Modify Path | Apply Transform

Обратите внимание, что это изменит путь, и для примера прямые линии пути станут прямыми кривыми Безье:

"M-1.0 -1.0C-1.0 -1.0 1.0 -1.0 1.0 -1.0C1.0 -1.0 1.0 1.0 1.0 1.0C1.0 1.0 -1.0 1.0 -1.0 1.0C-1.0 1.0 -1.0 -1.0 -1.0 -1.0"

person Corvince    schedule 20.03.2019