#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
Если строка очень длинная, вы также можете сделать то же самое, проанализировав ее по потоку.