В Snap.svg контур (path) является одним из наиболее гибких и мощных инструментов для построения графики. Контур задаётся строкой команд SVG или создаётся через методы Snap.svg для рисования сложных форм. Замыкание контура позволяет получить замкнутую фигуру, которая может быть залита цветом, иметь обводку и участвовать в сложных анимациях.
Контур создаётся с помощью метода paper.path(). В
качестве аргумента передаётся строка с командами SVG:
var s = Snap(800, 600);
var path = s.path("M100,100 L200,100 L200,200");
Здесь:
M100,100 – перемещение пера в точку (100,100);L200,100 – линия к точке (200,100);L200,200 – линия к точке (200,200).На данный момент контур не замкнут. Он представляет собой открытую линию, которая не образует замкнутую фигуру.
Чтобы замкнуть контур, необходимо использовать команду Z
(или z) в конце строки пути:
var closedPath = s.path("M100,100 L200,100 L200,200 Z");
Команда Z автоматически соединяет последнюю точку с
первой, создавая замкнутую форму. В Snap.svg это также можно сделать
программно, добавив последнюю линию к начальной точке:
var path = s.path("M100,100 L200,100 L200,200");
var bbox = path.getBBox();
path.attr({ d: path.attr("d") + " L100,100" });
Использование команды Z предпочтительнее, так как
позволяет SVG корректно определять фигуру как замкнутую и упрощает
дальнейшие операции.
Замкнутый контур становится полноценной фигурой, к которой можно применять заливку и обводку:
closedPath.attr({
fill: "#3498db",
stroke: "#2c3e50",
strokeWidth: 4
});
Важно понимать, что для незамкнутого контура fill не
будет виден, так как область фигуры не определена.
Для сложных фигур используется набор команд SVG:
C – кубическая криволинейная Bézier;Q – квадратичная криволинейная Bézier;A – дуга эллипса;Z – замыкание контура.Пример замкнутого контура с кривой:
var curvePath = s.path("M100,100 C150,50 250,150 300,100 Z");
curvePath.attr({
fill: "#e74c3c",
stroke: "#c0392b",
strokeWidth: 3
});
Здесь команда C задаёт кубическую кривую, а
Z замыкает фигуру.
Snap.svg предоставляет методы для анализа формы:
getBBox() – возвращает ограничивающий прямоугольник
контура;getTotalLength() – длина пути;getPointAtLength(len) – координаты точки на пути по
длине.var length = closedPath.getTotalLength();
var point = closedPath.getPointAtLength(length / 2);
console.log(point.x, point.y);
Эти методы полезны для анимации и динамического построения контуров.
Иногда необходимо замкнуть контур после его создания. Snap.svg
позволяет работать с атрибутом d:
var pathData = path.attr("d");
if (!pathData.endsWith("Z")) {
path.attr({ d: pathData + " Z" });
}
Такой подход удобен для динамически построенных линий, где координаты добавляются программно.
Замкнутый контур можно анимировать, изменяя атрибут d
или свойства fill и stroke:
closedPath.animate({ transform: "r45,200,200" }, 1000, mina.easeinout);
closedPath.animate({ fill: "#2ecc71" }, 1500, mina.linear);
Комбинация трансформаций и анимации цвета позволяет создавать сложные визуальные эффекты с замкнутыми формами.
Z для замыкания, если
планируется заливка фигуры.Z.getBBox() и getTotalLength()
для точного позиционирования и анимации.Замыкание контура является ключевым шагом в создании полноценной графики в Snap.svg, обеспечивая возможность заливки, обводки и последующей анимации сложных форм.