Какой лучший SVG для библиотеки / класса NSBezierPath?

#objective-c #cocoa #svg #nsbezierpath

#objective-c #какао #svg #nsbezierpath

Вопрос:

Я ищу лучший анализатор SVG для NSBezierPath, все в порядке, если класс / библиотека принимает только строку команд SVG, вот пример:

 M 435.722 403.542 h -232.44 v -293 h 232.44 c 0 0 0 35.108 0 81.019 c 0.049 2.551 0.079 5.135 0.154 7.748 c -0.208 15.567 12.1 13.618 19.624 28.192 c 2.584 5.005 5.875 30.5 4.875  34.5 c -7 19 -28.707 22.875 -24.653 44.854 c 0 2.667 0 5.31 0 7.923 C 435.722 364.425 435.722 403.542 435.722 403.542 z
  

Классу / библиотеке необязательно анализировать сам файл .svg, но он должен быть способен обрабатывать все команды SVG и поддерживать как относительные, так и абсолютные координаты (другими словами, он должен быть полностью совместим со спецификациями SVG 1.1, найденными здесь ).

Я нашел несколько классов в Интернете, но все они были ограничены и не выполнялись моими командами svg выше. Какой синтаксический анализатор SVG для NSBezierPath является лучшим в наши дни?

Комментарии:

1. Вы уверены, что это SVG? SVG — это формат на основе XML. Он не выглядит как XML…

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

3. Спасибо, извините за недостаток знаний…

Ответ №1:

Напишите программу для анализа файла SVG с помощью синтаксического анализатора XML.

Это даст вам ваш массив путей, которые вы можете вводить один за другим в следующий код:

https://www.touchnoc.com/one_way_ticket_from_svg_to_nsbezierpath

** Обязательно найдите код для iOS на странице выше.

Однако приведенный выше код работает только для абсолютных координат пути, а не для относительных координат пути. Adobe Illustrator выводит только относительные координаты пути. Вы можете открыть свой svg-файл из illustrator в программе sketch (http://www.bohemiancoding.com/sketch /) и экспортируйте svg, чтобы получить ваш файл в абсолютных координатах пути.

Ваши пути терпят неудачу, вероятно, потому, что они используют относительные координаты — маленький c, где большинство скриптов, которые я нашел, могут преобразовывать абсолютный или большой C.

И вот, пожалуйста. Весь процесс непростой, но выполнимый! Я говорю по опыту.

Комментарии:

1. Как вы реализовали elipses? Способ описания try в SVG сильно отличается от способа iOS / Cocoa. Есть реализация практически для всего остального

Ответ №2:

Я не думаю, что что-то подобное доступно.

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

Также полезно, чтобы команда была первой, поэтому вы могли бы сделать следующее:

  • разбить на массив пробелами
  • берем первый элемент и сопоставляем с command
  • возьмите следующие x элементы в качестве параметров ( x известно в зависимости от команды)
  • вызовите метод сопоставления на NSBezierPath

Если строка очень длинная, вы также можете сделать то же самое, проанализировав ее по потоку.