logo

nixscript

Keep it simple, stupid !

Ссылка на статью в формате MarkDown для Curl, кодировка RU.UTF-8

SVG Пути (линии Безье, кривые)

Адрес страницы: nixscript.ru/svg3

И так, в предыдущих статьях (svg1 и svg2) я вас познакомил со структурой файла и с простыми фигурами. Настало время посмотреть на пути.

Пути - замечательный инструмент рисования. С их помощью можно изобразить что угодно. К примеру, можно изобразить прямоугольник:

<path d="m10 10l20 0l0 20l-20 0z" />

А можно и круг:

<path d="m30 10c15 0 15 25 0 25c-15 0 -15 -25 0 -25z" />

... можно треугольник ...

<path d="m10 10l20 0l-10 20z" />

И много чего ещё. Хоть картину Сальвадора Дали "Течение времени", лишь бы терпения и фантазии хватило.

Синтаксис

Как вы уже заметили, path - очень сложный элемент, в плане кода. Он имеет сложные правила.

В атрибуте d используются несколько опций:

Ну так вот... Сейчас про базовое, а потом конкретнее...

Все эти опции могут быть указаны заглавной буквой или маленькой (всегда путаю прописная/строчная, поэтому избегаю употреблять эти термины). Заглавная (большая) буква означает, что координаты ей надо указывать от верхнего левого угла. Причем положительная координата Y означает направление вниз, а со знаком минус - вверх от верхнего края изображения. Или вправо/влево от левого края рисунка, в случае с координатой X.

Маленькая буква означает относительная. То есть, ей нужно передать координаты на сдвиг от текущей точки.

К примеру, прямая вертикальная линия длиной в 10 пикселей, начиная с 5-го пикселя от верхнего края рисунка. Сначала абсолютные координаты (заглавная буква), затем то же самое, но относительные (маленькая буква).

<path d="M0 5V15" stroke="#000" stroke-width="0.5" />
<path d="m0 5v10" stroke="#000" stroke-width="0.5" />

Результат один и тот же, но координаты разные. В первом случае, пришлось указать 15, хотя длина линии нужна в 10 пикселей. Потому, что нужно учитывать и расстояние от координаты 0.

Оба варианта удобны в своих ситуациях. Синтаксис допускает смешивать варианты. То есть, начать мы можем с маленькой M, а закончить заглавной L. Или вообще устроить мешанину БукАВеГ. ))) Главное, чтобы после буквы были указаны координаты с учётом правильной точки отсчёта.

C, S, Q, T

Теперь о сложном. Это жесть. Самый простой способ задавать координаты для сложного рисунка - миллиметровая бумага. Незная про новое поколение, но те, кто родился до перестройки/гласности, прекрасно понимают, какую бумагу я имею ввиду. Она в клеточку, и размер одной клеточки = 1мм². И я не стану подробно расписывать, как пользоваться этими четырьмя опциями. Не смогу правильно это сделать, к тому же есть масса статей на эту тему. Вот, к примеру, по которой я понял, как работать с этими опциями: webbeaver.ru/future/svg-path-syntax/

Создайте тестовый файлик, вбейте код, попробуйте, почувствуйте... В любом случае, вы либо поймёте, либо пользуйтесь InkScape-ом.

Заключение (по кривым)

Для того, чтобы в терминале сложные кривые рисовать, надо быть отмороженным. )))

Делайте проще, создавайте шаблон в InkScape, сохраняйте в оптимизированном SVG, а потом меняйте всё необходимое в коде. Об этом в следующей части.

Автор: grigruss 14.11.2019


Статья написана в формате MarkDown и сконвертирована в HTML с помощью скрипта Parsedown.

Вверх 🡑