В SVG.js замыкание контуров осуществляется через работу с объектом
Path, который представляет собой набор команд рисования
SVG. Контур считается замкнутым, если его начальная и конечная
точки совпадают, либо если явно используется команда закрытия
пути Z (или z).
const draw = SVG().addTo('body').size(300, 300);
const path = draw.path('M10 10 L100 10 L100 100 Z'); // Контур замкнут
В этом примере путь начинается в точке (10,10), проходит
через (100,10) и (100,100), а команда
Z автоматически соединяет последнюю точку с первой,
создавая замкнутый контур.
.close()SVG.js предоставляет метод .close(), который позволяет
программно закрыть контур без необходимости вручную добавлять
Z в строку пути:
const path = draw.path('M50 50 L150 50 L150 150');
path.close();
После вызова path.close() последняя точка пути
соединяется с начальной, что важно при работе с фигурами, которые должны
быть замкнутыми для корректного заполнения цветом или применением
эффектов stroke-dasharray.
SVG.js не имеет встроенного свойства isClosed, но
замкнутость можно определить через проверку последней команды пути:
function isPathClosed(path) {
const d = path.attr('d');
return /Z$/i.test(d.trim());
}
console.log(isPathClosed(path)); // true или false
Регулярное выражение проверяет, оканчивается ли строка атрибута
d на Z или z, что свидетельствует
о замкнутом контуре.
Контур может содержать линии (L), кривые Безье
(C и Q) и дуги (A). Для всех этих
элементов метод .close() корректно соединяет конечную точку
последнего сегмента с начальной:
const complexPath = draw.path('M50 50 C70 20, 120 20, 150 50 L150 150');
complexPath.close();
Замыкание гарантирует, что все визуальные элементы будут соединены без разрывов, что критично для заливки сложных фигур.
Замкнутый контур отличается визуально при применении:
fill — замкнутый контур корректно
заливается, незамкнутый может оставлять пробелы.stroke — обводка замкнутого контура
образует непрерывную линию, в противном случае линия остаётся
разорванной.path.fill('#f06').stroke({ color: '#000', width: 2 });
Если путь не закрыт, область заливки не будет замыкаться, создавая эффект “недозакрашенной” фигуры.
SVG.js позволяет создавать замкнутые формы динамически, добавляя
сегменты через методы .line(), .curve(),
.arc(), а затем закрывая путь:
const dynamicPath = draw.path().move(20, 20)
.line(120, 20)
.line(120, 120)
.line(20, 120)
.close();
Такой подход удобен для генерации фигур по координатам, особенно при построении интерактивной графики или пользовательских форм.
После закрытия контура можно применять трансформации: вращение, масштабирование, сдвиг. Замкнутый контур сохраняет геометрию, что обеспечивает правильное позиционирование и центрирование фигур:
dynamicPath.rotate(45, 70, 70).scale(1.5);
Важно помнить, что закрытие контура должно выполняться до применения сложных трансформаций, чтобы избежать искажения соединительной линии.
.close() вместо ручного добавления
Z, чтобы код был читаемым.Эти приёмы позволяют полностью контролировать структуру путей в SVG.js и создавать сложные фигуры с гарантированной корректной визуализацией.