Curve2D
继承
简要描述
描述2D空间中的贝塞尔曲线。
描述
这个类描述2D空间中的贝塞尔曲线。它主要用于为Path2D赋予形状,也可以出于其他目的手动进行采样。
它保留了预先计算的曲线上点的缓存,以加快计算。
成员
类型 | 属性名 | 默认值 |
---|---|---|
float | bake_interval | 5.0 |
方法
返回值类型 | 方法名称 |
---|---|
void | add_point(position: Vector2, in: Vector2 = Vector2( 0, 0 ), out: Vector2 = Vector2( 0, 0 ), at_position: int = -1) |
void | clear_points() |
float | get_baked_length() const |
PoolVector2Array | get_baked_points() const |
float | get_closest_offset(to_point: Vector2) const |
Vector2 | get_closest_point(to_point: Vector2) const |
int | get_point_count() const |
Vector2 | get_point_in(idx: int) const |
Vector2 | get_point_out(idx: int) const |
Vector2 | get_point_position(idx: int) const |
Vector2 | interpolate(idx: int, t: float) const |
Vector2 | interpolate_baked(offset: float, cubic: bool = false) const |
Vector2 | interpolatef(fofs: float) const |
void | remove_point(idx: int) |
void | set_point_in(idx: int, position: Vector2) |
void | set_point_out(idx: int, position: Vector2) |
void | set_point_position(idx: int, position: Vector2) |
PoolVector2Array | tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
常量
成员说明
- float bake_interval
Default | 5.0 |
---|---|
setter | set_bake_interval(value) |
getter | get_bake_interval |
方法说明
- add_point add_point(position: Vector2, in: Vector2 = Vector2( 0, 0 ), out: Vector2 = Vector2( 0, 0 ), at_position: int = -1)
在position
处向曲线添加点,控制点为in
和out
。
如果给出了at_position
,则将该点插入到编号为at_position
的点之前。如果未给出at_position
或为非法值(at_position < 0
或at_position >= [get_point_count](#method-get_point_count)
),则该点将被添加到末尾。
- clear_points clear_points()
删除曲线中所有的点。
- get_baked_length get_baked_length() const
根据缓存的点返回曲线的总长度。给定足够的密度(请参阅bake_interval),它应该足够精确。
- get_baked_points get_baked_points() const
以PoolVector2Array的形式返回缓存的点。
- get_closest_offset get_closest_offset(to_point: Vector2) const
返回最接近to_point
的偏移量。此偏移量可在interpolate_baked中使用。
to_point
必须在此曲线的局部空间中。
- get_closest_point get_closest_point(to_point: Vector2) const
返回最接近to_point
的点(在曲线的局部空间中)。
to_point
必须在此曲线的局部空间中。
- get_point_count get_point_count() const
返回描述曲线的点数。
- get_point_in get_point_in(idx: int) const
返回指向顶点idx
的控制点的位置。如果索引超出范围,则该函数将错误发送到控制台,并返回(0, 0)
。
- get_point_out get_point_out(idx: int) const
返回从顶点idx
引出的控制点的位置。如果索引超出范围,则该函数将错误发送到控制台,并返回(0, 0)
。
- get_point_position get_point_position(idx: int) const
返回顶点的位置idx
。如果索引超出范围,则该函数将错误发送到控制台,并返回(0, 0)
。
- interpolate interpolate(idx: int, t: float) const
返回顶点idx
和顶点idx + 1
之间的位置,其中t
控制该点是否为第一个顶点(t = 0.0
),最后一个顶点(t = 1.0
)或介于两者之间。超出范围(0.0 >= t <= 1
)的t
的值给出了奇怪但可预测的结果。
如果idx
超出范围,它将被截断到第一个或最后一个顶点,而t
将被忽略。如果曲线没有点,则该函数将错误发送到控制台,并返回(0, 0)
。
- interpolate_baked interpolate_baked(offset: float, cubic: bool = false) const
返回曲线中offset
位置的点,其中offset
沿曲线的像素距离进行测量。
为此,它找到offset
位于其之间的两个缓存点,然后对这些值进行插值。如果cubic
设置为true
,则此插值为三次;如果将cubic
设置为false
,则此插值为线性。
三次插值能更好地逼近曲线,但是线性更快(通常足够精确)。
- interpolatef interpolatef(fofs: float) const
返回顶点fofs
处的位置。它使用fofs
的整数部分作为idx
,其小数部分作为t
来调用interpolate。
- remove_point remove_point(idx: int)
从曲线中删除点idx
。如果idx
超出范围,则将错误发送到控制台。
- set_point_in set_point_in(idx: int, position: Vector2)
设置通向顶点idx
的控制点的位置。如果索引超出范围,则该函数将错误发送到控制台。
- set_point_out set_point_out(idx: int, position: Vector2)
设置从顶点idx
引出的控制点的位置。如果索引超出范围,则该函数将错误发送到控制台。
- set_point_position set_point_position(idx: int, position: Vector2)
设置顶点idx
的位置。如果索引超出范围,则该函数将错误发送到控制台。
- tessellate tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const
返回沿曲线的点列表,其曲率控制点密度。也就是说,弯曲的部分将比直线的部分具有更多的点。
这种近似使每个点之间形成直线段,然后再细分这些段,直到得到的形状足够相似为止。
max_stages
控制曲线段在被认为足够近似之前可能面对多少个细分。每个细分将线段分成两半,因此默认的5个阶段可能意味着每个曲线线段最多32个细分。
tolerance_degrees
控制线段的中点在必须细分线段之前可能偏离真实曲线的度数。