Ошибка пути SVG: атрибут d: ожидаемое число

#svg #d3.js

#svg #d3.js

Вопрос:

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

Пример:

 <path d=" M0 0 C  0 90,  56 90,  56 279,  163 279, 163 309 z"></path>
  

У меня есть JSFiddle, который вы можете запустить и увидеть ошибку в консоли здесь.

Ошибка, которую я получаю, это:

Ошибка: атрибут d: ожидаемое число, «… 63 279, 163 309 z».

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

1. После C команды должно быть кратно 3 парам координат (контрольные точки rwo и новая текущая точка). В приведенном выше пути с 5 парами координат отсутствует последняя.

2. Вам понадобится еще одна пара координат. Поскольку последняя команда — это z (закрыть путь), вы можете добавить координаты первого перемещения в команду (M). Пожалуйста, попробуйте это: ` <путь d=»M0,0 C0,90 56,90 56,279 163,279 163,309 0,0″></ путь>`

Ответ №1:

Итак, вам нужно убедиться, что данные пути соответствуют стандарту SVG:https://www.w3.org/TR/SVG11/paths.html#DAttribute

Если вы используете запятую для разделения значений, то ее следует использовать последовательно:

 "M0,0 C0,90 56,90 56,279 163,279 163,309 z"
  

Если не используется запятая:

 "M 0 0 C 0 90 56 90 56 279 163 279 163 309 z"
  

ОБНОВЛЕНИЕ: ccprog верен, если он комментирует, что согласованность не является обязательным требованием. Так что это скорее удобство / практика для обеспечения согласованности.

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

Буква команды может быть удалена при последующих командах, если одна и та же команда используется несколько раз подряд (например, вы можете убрать вторую «L» в «M 100 200 L 200 100 L -100 -200» и вместо этого использовать «M 100 200 L 200 100 -100 -200»).

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

«M0,0 C0,90 56,90 56,279 C163, 279 163,309 z»

Таким образом, он интерпретирует «z» как последнюю координату, которую он ожидает для кубической кривой Безье.

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

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

1. Вы правы, мои данные были противоречивыми. Я попробовал так, как вы предложили, но я все еще получаю ту же ошибку.

2. Я перешел по предоставленной ссылке (JSfiddle), и она не показывает ошибок. Можете ли вы опубликовать ссылку на проблему? какой браузер вы используете?

3. jsfiddle.net/teserract101/8uhdmjvr/4 -> Я вижу проблемы в этом в консоли разработчика Chrome. Вы ничего не видите?

4. о, теперь я понимаю. Хорошо, я знаю, что происходит. Позвольте мне обновить ответ.

5. Согласованность в использовании запятых и пробелов в командах пути не требуется. Грамматика допускает все возможные комбинации, если числа четко различимы жадным анализатором.