跳到主要内容

Curve2D

继承

Resource

简要描述

描述2D空间中的贝塞尔曲线。

描述

这个类描述2D空间中的贝塞尔曲线。它主要用于为Path2D赋予形状,也可以出于其他目的手动进行采样。

它保留了预先计算的曲线上点的缓存,以加快计算。

成员

类型属性名默认值
floatbake_interval5.0

方法

返回值类型方法名称
voidadd_point(position: Vector2, in: Vector2 = Vector2( 0, 0 ), out: Vector2 = Vector2( 0, 0 ), at_position: int = -1)
voidclear_points()
floatget_baked_length() const
PoolVector2Arrayget_baked_points() const
floatget_closest_offset(to_point: Vector2) const
Vector2get_closest_point(to_point: Vector2) const
intget_point_count() const
Vector2get_point_in(idx: int) const
Vector2get_point_out(idx: int) const
Vector2get_point_position(idx: int) const
Vector2interpolate(idx: int, t: float) const
Vector2interpolate_baked(offset: float, cubic: bool = false) const
Vector2interpolatef(fofs: float) const
voidremove_point(idx: int)
voidset_point_in(idx: int, position: Vector2)
voidset_point_out(idx: int, position: Vector2)
voidset_point_position(idx: int, position: Vector2)
PoolVector2Arraytessellate(max_stages: int = 5, tolerance_degrees: float = 4) const

常量

成员说明

  • float bake_interval
Default5.0
setterset_bake_interval(value)
getterget_bake_interval

方法说明

  • add_point add_point(position: Vector2, in: Vector2 = Vector2( 0, 0 ), out: Vector2 = Vector2( 0, 0 ), at_position: int = -1)

position处向曲线添加点,控制点为inout

如果给出了at_position,则将该点插入到编号为at_position的点之前。如果未给出at_position或为非法值(at_position < 0at_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控制线段的中点在必须细分线段之前可能偏离真实曲线的度数。