Paper.js организует все элементы сцены в виде иерархии объектов, что
позволяет управлять сложными графическими композициями эффективно и
логично. Основой этой системы является объект
Project, содержащий Layer, а в слоях
размещаются Item — базовый класс для всех визуальных
объектов.
Project и его рольКаждый проект (Project) представляет собой отдельный
холст, на котором выполняются все графические операции. Внутри проекта
существует массив слоев (layers), а также активный слой
(activeLayer), который используется по умолчанию при
создании новых объектов. Проекты могут существовать одновременно в
рамках одного документа, что позволяет разделять графику на независимые
области работы.
let project = new Project();
console.log(project.layers); // массив слоев
console.log(project.activeLayer); // текущий активный слой
Layer) и
порядок отображенияСлой является контейнером для объектов
(Item) и определяет их порядок отображения. Все объекты,
добавленные в слой, рендерятся поверх объектов нижележащих слоев.
Layer наследует от Item, поэтому слои можно
перемещать, масштабировать или вращать как единый объект.
activeLayer.opacity,
visible, blendMode.addChild(item),
removeChildren(), bringToFront(),
sendToBack().let layer1 = new Layer();
let circle = new Path.Circle(new Point(100, 100), 50);
layer1.addChild(circle);
layer1.opacity = 0.5;
ItemВсе визуальные объекты, включая кривые, прямоугольники, группы и
слои, наследуются от Item. Этот класс задает общие свойства
и методы для управления графикой.
Основные свойства:
position — координаты центра объекта.rotation — угол поворота в градусах.scale — масштаб объекта.visible — видимость объекта.opacity — прозрачность объекта.Основные методы:
translate(vector) — смещение объекта.rotate(angle) — вращение объекта.scale(factor) — масштабирование объекта.remove() — удаление из иерархии.let rectangle = new Path.Rectangle(new Point(50, 50), new Size(100, 80));
rectangle.fillColor = 'red';
rectangle.position.x += 20;
rectangle.rotate(45);
Group)Группы позволяют объединять несколько объектов в единый контейнер. Манипуляции с группой влияют на все вложенные элементы одновременно. Это особенно важно для сложных композиций, где требуется перемещать, масштабировать или вращать несколько объектов синхронно.
let group = new Group();
let circle1 = new Path.Circle(new Point(50, 50), 30);
let circle2 = new Path.Circle(new Point(120, 50), 30);
group.addChild(circle1);
group.addChild(circle2);
group.position = new Point(200, 200); // перемещает обе окружности
Особенности групп:
addChild, removeChildren и
insertChild применимы к группам так же, как к слоям.Каждый объект в Paper.js имеет свойства:
parent — родительский элемент (Layer или Group).children — массив дочерних элементов (только для Group
и Layer).Изменение позиции или трансформации родителя автоматически влияет на всех его потомков, что обеспечивает удобное управление сложной иерархией.
console.log(group.children); // массив объектов внутри группы
console.log(circle1.parent); // group
Порядок рендеринга определяется порядком в массиве
children родителя. Методы для управления:
bringToFront() — переместить объект на верхний уровень
слоя.sendToBack() — переместить объект на задний план.insertChild(index, item) — вставить объект на
конкретную позицию.circle2.bringToFront(); // circle2 окажется выше circle1
Трансформации родителя влияют на всех дочерних объектов:
group.rotate(30); // поворот всей группы на 30 градусов
group.scale(1.5); // масштаб всей группы
Иерархическая модель Paper.js обеспечивает гибкость при работе с графикой:
Эта система позволяет создавать сложные интерактивные графические сцены с минимальным количеством кода и полной прозрачностью структуры объектов.