В SVG.js объекты <path> создаются через метод
draw.path(). Путь задаётся строкой в формате SVG Path Data,
например:
const draw = SVG().addTo('body').size(600, 400);
const path = draw.path('M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80');
SVG.js позволяет не только создавать пути, но и объединять их, модифицировать и комбинировать сложные формы.
path.add()Метод add() используется для объединения нескольких
путей в один. Принцип работы:
const path1 = draw.path('M10 10 L50 10 L50 50 Z');
const path2 = draw.path('M60 10 L100 10 L100 50 Z');
path1.add(path2);
add объект path1 содержит
геометрию обоих путей.path2 остаётся в DOM, но его содержимое теперь
интегрировано в path1.Особенности:
rotate,
translate), они учитываются при объединении.add() работает только с объектами типа
Path, попытка объединить Rect или
Circle вызовет ошибку.path.plot()Метод plot() позволяет задавать новый массив команд для
пути. Это полезно для объединения данных нескольких путей вручную:
const path1Data = path1.array();
const path2Data = path2.array();
path1.plot(path1Data.concat(path2Data));
array() возвращает массив команд SVG Path в формате:
[['M', 10, 10], ['L', 50, 10], ...].concat() объединяет команды двух путей в один
массив.plot() полностью заменяет старый путь новым массивом
команд.Преимущества метода plot():
PathArray для сложного объединенияSVG.js предоставляет объект SVG.PathArray для удобной
работы с массивами команд:
let combinedArray = new SVG.PathArray(path1.array()).move(0,0);
combinedArray = combinedArray.add(new SVG.PathArray(path2.array()));
path1.plot(combinedArray);
move(x, y) позволяет смещать весь путь перед
объединением.add() объекта PathArray корректно
соединяет массивы команд, сохраняя относительные и абсолютные
координаты.plot() применяет итоговый массив к
пути.const path2Shifted = path2.clone().translate(100, 0);
path1.add(path2Shifted);
const paths = [path2, path3, path4];
paths.forEach(p => path1.add(p));
path1.animate(1000).plot(path1.array().concat(path2.array()));
PathArray для промежуточных
вычислений и затем применять plot().add() в цикле и использовать
объединённый массив команд.path1.fill('#ff0000').stroke({ width: 2, color: '#000000' });
rotate(),
scale(), translate().Хотя add() работает только с путями, можно:
Rect, Circle,
Ellipse в путь с помощью метода
.toPath().const rectPath = rect.toPath();
path1.add(rectPath);
Это позволяет создавать сложные составные фигуры из стандартных примитивов.
Хотите, я могу подготовить наглядный пример с несколькими объединёнными формами и анимацией, чтобы показать всё это в действии?