Я знаю, что в игре немного поздно, но я вспомнил этот вопрос с того времени, когда он был новым, и у меня была похожая дилемма, и я случайно нашел «правильное» решение, если кто-то все еще ищет его:
<path
d="
M cx cy
m -r, 0
a r,r 0 1,0 (r * 2),0
a r,r 0 1,0 -(r * 2),0
"
/>
Другими словами, это:
<circle cx="100" cy="100" r="75" />
может быть достигнуто как путь с помощью этого:
<path
d="
M 100, 100
m -75, 0
a 75,75 0 1,0 150,0
a 75,75 0 1,0 -150,0
"
/>
Хитрость состоит в том, чтобы иметь две дуги, втораяодин выбирается там, где остановился первый, и использует отрицательный диаметр, чтобы вернуться к исходной начальной точке дуги.
Причина, по которой это невозможно сделать в виде полного круга в одной дуге (и я просторазмышления), потому что вы сказали бы ему нарисовать дугу от себя (скажем, 150 150) к себе (150 150), которую он отображает как «о, я уже там, дуга не нужна!».
Преимущества предлагаемого мною решения:
- легко перевести из круга непосредственно в траекторию, и
- нет перекрытия в двух линиях дуги (которые могут вызвать проблемы, если вы используете маркеры или шаблоны и т. д.),Это чистая непрерывная линия, хотя и нарисованная из двух частей.
Ничего из этого не имеет значения, если они просто позволят текстовым путям принимать формы.Но я думаю, что они избегают этого решения, так как элементы формы, такие как круг, технически не имеют начальной точки.
jsfiddle demo: http://jsfiddle.net/crazytonyi/mNt2g/
Обновление:
Если вы используете путь для ссылки textPath
и хотите, чтобы текст отображался по внешнему краю дуги, вы должны использовать точно такой же метод, но измените флаг развертки с 0 на 1, чтобы он обрабатывалвне пути как поверхности, а не изнутри (представьте себе 1,0
как кого-то, сидящего в центре и рисующего вокруг себя круг, а 1,1
как человека, идущего вокруг центра на расстоянии радиуса и тянущего за собой мел,если это поможет).Вот код, как указано выше, но с изменением:
<path
d="
M cx cy
m -r, 0
a r,r 0 1,1 (r * 2),0
a r,r 0 1,1 -(r * 2),0
"
/>