Справочник API: PathBuilder
PathBuilder — это современный, рекомендуемый способ создания объектов Path в Skija. Он предоставляет fluent API и специально предназначен для построения путей, отделяя процесс построения от неизменяемого результата Path.
Основные команды
Перемещение и линии:
moveTo(x, y): Начинает новый контур.lineTo(x, y): Добавляет отрезок линии.polylineTo(points): Добавляет несколько отрезков линий.closePath(): Замыкает текущий контур.
Относительные команды (смещения от текущей точки):
rMoveTo(dx, dy)rLineTo(dx, dy)
Кривые
Квадратичная кривая Безье (1 контрольная точка):
quadTo(x1, y1, x2, y2): Абсолютные координаты.rQuadTo(dx1, dy1, dx2, dy2): Относительные координаты.
Кубическая кривая Безье (2 контрольные точки):
cubicTo(x1, y1, x2, y2, x3, y3): Абсолютные.rCubicTo(dx1, dy1, dx2, dy2, dx3, dy3): Относительные.
Коническая кривая (Квадратичная с весом):
conicTo(x1, y1, x2, y2, w): Полезна для точных окружностей/эллипсов.rConicTo(...): Относительная версия.
Дуги
arcTo(oval, startAngle, sweepAngle, forceMoveTo): Добавляет дугу, ограниченную заданным овалом.tangentArcTo(p1, p2, radius): Добавляет дугу, касательную к линиям (текущая -> p1) и (p1 -> p2).ellipticalArcTo(...): Добавляет дугу в стиле SVG.
Добавление фигур
PathBuilder позволяет добавлять целые фигуры как новые контуры.
addRect(rect, direction, startIndex)addOval(rect, direction, startIndex)addCircle(x, y, radius, direction)addRRect(rrect, direction, startIndex): Скругленный прямоугольник.addPolygon(points, close): Добавляет последовательность точек как контур.addPath(path, mode): Добавляет контуры другого пути к этому.
Преобразования (состояние построителя)
Эти методы влияют на точки, уже находящиеся в построителе.
offset(dx, dy): Смещает все существующие точки в построителе.transform(matrix): Применяет матрицу ко всем существующим точкам.
Управление построителем
reset(): Очищает построитель до пустого состояния (сохраняет память).incReserve(points, verbs): Предварительно выделяет память, чтобы избежать изменения размера во время построения.setFillMode(mode): Устанавливает правило заполнения (WINDING,EVEN_ODDи т.д.).setVolatile(boolean): Указывает, что результирующий путь не должен кэшироваться (полезно для одноразовых путей анимации).
Методы получения результата
snapshot(): ВозвращаетPathи сохраняет состояние построителя неизменным.detach(): ВозвращаетPathи сбрасывает построитель (наиболее эффективно).build(): ВозвращаетPathи закрывает построитель (после этого использовать нельзя).
Пример: Базовое построение
java
Path path = new PathBuilder()
.moveTo(10, 10)
.lineTo(100, 10)
.lineTo(100, 100)
.quadTo(50, 150, 10, 100)
.closePath()
.snapshot(); // Возвращает PathПример: Преобразования
java
PathBuilder builder = new PathBuilder();
builder.addRect(Rect.makeXYWH(0, 0, 100, 100))
.offset(10, 10)
.transform(Matrix33.makeRotate(45));
Path p = builder.detach(); // Возвращает путь и сбрасывает построительВизуальный пример
Смотрите examples/scenes/src/PathsScene.java для различных комбинаций путей и правил заполнения.