В Paper.js pattern fill позволяет заполнять объекты повторяющимся изображением или графическим узором. Это мощный инструмент для создания сложных фонов, текстур и декоративных эффектов без необходимости вручную дублировать элементы.
Для создания паттерна используется объект Raster или
Path, который затем передается в качестве источника в
свойство fillColor объекта.
Пример использования растрового изображения:
var raster = new Raster('image.png'); // Загружаем изображение
raster.visible = false; // Скрываем исходное изображение
var rect = new Path.Rectangle(new Point(0, 0), new Size(300, 300));
rect.fillColor = new Pattern(raster, true); // true означает повтор по всей области
Ключевые моменты:
source может
быть Raster или Path.repeat определяет повторение: true для
бесконечного повторения, false — паттерн отображается один
раз.visible = false), он служит только для генерации
узора.Помимо растровых изображений, паттерн можно создавать из векторных объектов:
var circle = new Path.Circle({
center: [20, 20],
radius: 10,
fillColor: 'red'
});
var rect = new Path.Rectangle([0, 0], [200, 200]);
rect.fillColor = new Pattern(circle, true);
Особенности векторных паттернов:
Паттерн можно масштабировать, вращать и смещать через Matrix:
var raster = new Raster('image.png');
raster.visible = false;
var rect = new Path.Rectangle([0, 0], [400, 400]);
rect.fillColor = new Pattern(raster, true);
// Создание матрицы для масштабирования и смещения
var matrix = new Matrix();
matrix.scale(0.5); // Уменьшение паттерна в 2 раза
matrix.translate(50, 50); // Смещение по оси X и Y
rect.fillColor.pattern.matrix = matrix;
Важно:
Паттерн можно анимировать, изменяя его матрицу в каждом кадре:
var raster = new Raster('image.png');
raster.visible = false;
var rect = new Path.Rectangle([0, 0], [400, 400]);
rect.fillColor = new Pattern(raster, true);
function onFrame(event) {
rect.fillColor.pattern.matrix.translate(1, 0); // Движение вправо на 1px
}
Особенности анимации:
onFrame.Векторные объекты с градиентной заливкой и прозрачностью полностью сохраняют эти свойства в паттерне:
var circle = new Path.Circle({
center: [20, 20],
radius: 20,
fillColor: {
gradient: {
stops: ['red', 'blue']
},
origin: [0, 0],
destination: [40, 40]
},
opacity: 0.5
});
var rect = new Path.Rectangle([0, 0], [200, 200]);
rect.fillColor = new Pattern(circle, true);
Примечания:
opacity) наследуется каждым повторением
узора.При работе с паттернами важно учитывать производительность:
Паттерн fill можно комбинировать с градиентами и другими цветами через:
Layer) для наложения
эффектов.rect.blendMode = 'multiply';
Это позволяет создавать сложные визуальные эффекты, сохраняя гибкость редактирования.