Skip to content

Справочник 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 для различных комбинаций путей и правил заполнения.