В Paper.js для работы с векторной графикой используется мощная
система Path и CompoundPath. Одной из ключевых
возможностей является объединение фигур, что позволяет создавать сложные
контуры из простых элементов. Метод unite() предназначен
для объединения двух объектов Path или
CompoundPath в один контур, включающий все области исходных
объектов.
var result = path1.unite(path2);
Path или
CompoundPath.path1.Path, содержащий
объединённую форму.Важно понимать, что исходные объекты не изменяются; создаётся новый объект.
var rect1 = new Path.Rectangle(new Point(50, 50), new Size(100, 100));
rect1.fillColor = 'red';
var rect2 = new Path.Rectangle(new Point(100, 100), new Size(100, 100));
rect2.fillColor = 'blue';
var combined = rect1.unite(rect2);
combined.fillColor = 'green';
В этом примере формируется новая фигура, которая охватывает оба прямоугольника. Цвета исходных прямоугольников остаются, но на холсте отображается объединённая зелёная фигура.
Метод unite одинаково эффективно работает не только с
прямыми линиями, но и с кривыми Безье (Path.Curve). При
объединении кривых Paper.js автоматически рассчитывает новые опорные
точки и сглаживает контур:
var circle = new Path.Circle(new Point(200, 200), 50);
circle.fillColor = 'yellow';
var ellipse = new Path.Ellipse(new Rectangle(180, 180, 100, 50));
ellipse.fillColor = 'orange';
var merged = circle.unite(ellipse);
merged.fillColor = 'purple';
Новый контур корректно объединяет круг и эллипс, формируя плавные переходы между кривыми.
Если один из объектов является CompoundPath, объединение
выполняется так же, как и с обычным Path. Это позволяет
комбинировать сложные фигуры с отверстиями:
var outer = new Path.Rectangle(new Point(50, 50), new Size(200, 200));
var hole = new Path.Circle(new Point(150, 150), 50);
var compound = new CompoundPath({
children: [outer, hole],
fillColor: 'pink'
});
var rect = new Path.Rectangle(new Point(100, 100), new Size(150, 150));
var result = compound.unite(rect);
result.fillColor = 'cyan';
В данном случае CompoundPath с отверстием объединяется с
прямоугольником, создавая один контур с правильно рассчитанными
внутренними и внешними границами.
При объединении объектов новый Path создаётся
поверх всех исходных объектов. Если требуется сохранить
порядок слоёв, следует вручную управлять методом
insertAbove или insertBelow:
result.insertBelow(rect);
Это перемещает объединённый объект под прямоугольник, обеспечивая корректное наложение на холсте.
Метод unite копирует только геометрию.
Все стили (fillColor, strokeColor,
strokeWidth) необходимо задавать отдельно для нового
объекта. Для оптимизации визуального объединения часто используют:
result.fillColor = 'black';
result.strokeColor = 'white';
result.strokeWidth = 2;
Это позволяет сохранить четкий контур объединённой формы.
CompoundPath.Для объединения более двух объектов применяют цепочку
unite:
var shape1 = new Path.Circle(new Point(50, 50), 30);
var shape2 = new Path.Circle(new Point(80, 50), 30);
var shape3 = new Path.Circle(new Point(65, 80), 30);
var combined = shape1.unite(shape2).unite(shape3);
combined.fillColor = 'magenta';
Каждое последующее объединение формирует новый контур, который можно использовать для дальнейшей комбинации.
path.simplify().Метод unite() — один из наиболее эффективных
инструментов Paper.js для создания сложных фигур из базовых элементов,
позволяющий реализовывать логические операции над формами без потери
гладкости и точности контуров.