Curve2D
Наследует: Resource < RefCounted < Object
Описывает кривую Безье в 2D пространстве.
Описание
Этот класс описывает кривую Безье в 2D-пространстве. В основном он используется для придания формы Path2D, но может быть вручную выбран для других целей.
Он хранит кэш предварительно рассчитанных точек вдоль кривой для ускорения дальнейших вычислений.
Свойства
|
||
|
Методы
void |
add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) |
void |
|
get_baked_length() const |
|
get_baked_points() const |
|
get_closest_offset(to_point: Vector2) const |
|
get_closest_point(to_point: Vector2) const |
|
get_point_in(idx: int) const |
|
get_point_out(idx: int) const |
|
get_point_position(idx: int) const |
|
void |
remove_point(idx: int) |
sample_baked(offset: float = 0.0, cubic: bool = false) const |
|
sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const |
|
void |
set_point_in(idx: int, position: Vector2) |
void |
set_point_out(idx: int, position: Vector2) |
void |
set_point_position(idx: int, position: Vector2) |
tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
|
tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const |
Описания свойств
Расстояние в пикселях между двумя соседними кэшированными точками. Его изменение приводит к пересчету кэша при следующем вызове функции get_baked_points() или get_baked_length(). Чем меньше расстояние, тем больше точек в кэше и тем больше памяти он будет потреблять, поэтому используйте с осторожностью.
Количество точек, описывающих кривую.
Описания метода
void add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) 🔗
Добавляет точку с указанным position относительно собственного положения кривой с контрольными точками in и out. Добавляет новую точку в конец списка точек.
Если задан index, новая точка вставляется перед существующей точкой, идентифицированной индексом index. Каждая существующая точка, начиная с index, смещается дальше вниз по списку точек. Индекс должен быть больше или равен 0 и не должен превышать количество существующих точек в строке. См. point_count.
void clear_points() 🔗
Удаляет все точки из кривой.
float get_baked_length() const 🔗
Возвращает общую длину кривой на основе кэшированных точек. При достаточной плотности (см. bake_interval) она должна быть достаточно приблизительной.
PackedVector2Array get_baked_points() const 🔗
Возвращает кэш точек в виде PackedVector2Array.
float get_closest_offset(to_point: Vector2) const 🔗
Возвращает ближайшее смещение к to_point. Это смещение предназначено для использования в sample_baked().
to_point должен находиться в локальном пространстве этой кривой.
Vector2 get_closest_point(to_point: Vector2) const 🔗
Возвращает ближайшую точку на запеченных сегментах (в локальном пространстве кривой) к to_point.
to_point должен находиться в локальном пространстве этой кривой.
Vector2 get_point_in(idx: int) const 🔗
Возвращает позицию контрольной точки, ведущей к вершине idx. Возвращаемая позиция является относительной вершины idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль и возвращает (0, 0).
Vector2 get_point_out(idx: int) const 🔗
Возвращает позицию контрольной точки, выходящей из вершины idx. Возвращаемая позиция является относительной вершины idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль и возвращает (0, 0).
Vector2 get_point_position(idx: int) const 🔗
Возвращает позицию вершины idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль и возвращает (0, 0).
Удаляет точку idx из кривой. Отправляет ошибку на консоль, если idx выходит за пределы.
Vector2 sample(idx: int, t: float) const 🔗
Возвращает позицию между вершиной idx и вершиной idx + 1, где t контролирует, является ли точка первой вершиной (t = 0.0), последней вершиной (t = 1.0) или находится между ними. Значения t вне диапазона (0.0 <= t <= 1.0) дают странные, но предсказуемые результаты.
Если idx выходит за пределы, он усекается до первой или последней вершины, а t игнорируется. Если у кривой нет точек, функция отправляет ошибку на консоль и возвращает (0, 0).
Vector2 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
Возвращает точку внутри кривой в позиции offset, где offset измеряется как расстояние в пикселях вдоль кривой.
Для этого он находит две кэшированные точки, между которыми находится offset, затем интерполирует значения. Эта интерполяция является кубической, если cubic установлен на true, или линейной, если установлен на false.
Кубическая интерполяция имеет тенденцию лучше следовать кривым, но линейная быстрее (и часто достаточно точна).
Transform2D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const 🔗
Аналогично sample_baked(), но возвращает Transform2D, который включает вращение вдоль кривой, с Transform2D.origin в качестве положения точки и вектором Transform2D.x, указывающим в направлении пути в этой точке. Возвращает пустое преобразование, если длина кривой равна 0.
var baked = curve.sample_baked_with_rotation(offset)
# Возвращаемый Transform2D можно задать напрямую.
transform = baked
# Вы также можете прочитать начало координат и поворот отдельно из возвращаемого Transform2D.
position = baked.get_origin()
rotation = baked.get_rotation()
Vector2 samplef(fofs: float) const 🔗
Возвращает позицию в вершине fofs. Он вызывает sample(), используя целую часть fofs как idx, а его дробную часть как t.
void set_point_in(idx: int, position: Vector2) 🔗
Устанавливает позицию контрольной точки, ведущей к вершине idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль. Позиция указывается относительно вершины.
void set_point_out(idx: int, position: Vector2) 🔗
Устанавливает позицию контрольной точки, выходящей из вершины idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль. Позиция указывается относительно вершины.
void set_point_position(idx: int, position: Vector2) 🔗
Устанавливает позицию для вершины idx. Если индекс выходит за пределы, функция отправляет ошибку на консоль.
PackedVector2Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Возвращает список точек вдоль кривой с контролируемой кривизной плотностью точек. То есть, более кривые части будут иметь больше точек, чем более прямые части.
Это приближение создает прямые сегменты между каждой точкой, затем подразделяет эти сегменты до тех пор, пока результирующая форма не станет достаточно похожей.
max_stages управляет количеством подразделений, с которыми может столкнуться сегмент кривой, прежде чем он будет считаться достаточно приближенным. Каждое подразделение делит сегмент пополам, поэтому 5 стадий по умолчанию могут означать до 32 подразделений на сегмент кривой. Увеличивайте с осторожностью!
capacity_degrees управляет тем, на сколько градусов средняя точка сегмента может отклоняться от реальной кривой, прежде чем сегмент придется подразделять.
PackedVector2Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const 🔗
Возвращает список точек вдоль кривой с почти равномерной плотностью. max_stages управляет количеством подразделений, с которыми может столкнуться сегмент кривой, прежде чем он будет считаться достаточно приближенным. Каждое подразделение делит сегмент пополам, поэтому 5 стадий по умолчанию могут означать до 32 подразделений на сегмент кривой. Увеличивайте с осторожностью!
capacity_length управляет максимальным расстоянием между двумя соседними точками, прежде чем сегмент придется подразделять.