Какая библиотека SVG лучше всего подходит для NSBezierPath? - PullRequest
2 голосов
/ 04 октября 2011

Я ищу лучший анализатор 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 в эти дни?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Напишите программу для синтаксического анализа файла 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 даст вам файл в абсолютных координатах пути.

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

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

0 голосов
/ 07 октября 2011

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

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

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

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

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

...