2012-04-17 3 views
3

Я рисую путь SVG как это:Закрыть путь SVG (Z) с контрольными точками?

Начало:

M x, y 

Добавить Curve

Q x1, y1, x, y 

и т.д. и т.п .... и когда я хочу, чтобы закрыть путь Я просто добавить Z

Но последний сегмент линии теперь не имеет контрольных точек.

Как я могу закрыть путь, а также иметь контрольные точки на этом последнем сегменте?

Что-то вроде: Z Q x1, y1 где Z закрывает путь (текущая точка до первой точки), но использует x1 и y1 как контрольные точки, а не только прямую линию.

ответ

3

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

У SVG такой функции нет. Нет path command, который делает это. Ближайшие являются сокращенный путь команды S и T, но они выводят первую контрольную точку с последней контрольной точки на предыдущей команды, в то время как то, что вы хотите что-то, что происходит в второй контрольной точки с первым контроля точка на следующая команда (стиль обертки).

Вы можете сделать это с помощью JavaScript, например. разметки, как

<path d="… Z" class="smooth-close" /> 

... и небольшой скрипт, который находит все smooth-close пути, определяют соответствующую контрольную точку из первых команд и генерирует команду S или T и присоединяют его к данным пути. Но так как вы не отметили свой вопрос , я предполагаю, что такое решение вас не заинтересовало бы.

+0

Я не отметил его как javascript, потому что хотел знать, поддерживает ли его SVG. Я использую fabricJS для рисования путей на холсте, и он ведет себя точно так же, как SVG. Я мог бы добавить еще одну текущую точку формы строки к первой точке и визуально закрыть путь, а затем вызвать Z. Но все же она оставила бы одну строку без контрольных точек. – vale4674

+0

FWIW, если вы используете Adobe Illustrator для создания эллипса из двух точек (и четырех контрольных точек), вы получаете данные о пути, такие как 'M0,0 c0, -50,100, -50,100,0 S0,50,0,0 z'; поэтому он делает то, что я описывал с помощью JavaScript выше, вручную закрывая кривую контрольной точкой, которая происходит с тангенциальным зеркалом первой контрольной точки. И тогда, как вы говорите, он все равно бросает в (лишнее) нуль-расстояние 'z', чтобы официально закрыть путь. – Phrogz

+0

Я сделал, как я описал. Я просто добавил нормальную кривую, но для конца кривой я дал пустые кодовые пути. И затем я закрыл путь Z. И в моей реализации я знаю, если бы я нажал эту точку, а затем я управляю пуском и концом пути. (Надеюсь, вы понимаете, не знаете, как объяснить лучше) – vale4674

Смежные вопросы