mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 09:16:35 +08:00
c6093ae612
I verified this experimentally. I added a point at roughly (1,0,0), and dragged a handle back to the origin. The result was: ``` get_point_position: (0.991079, 0, -0.000069) get_point_in: (0.993409, 0, 0) get_point_out: (-0.993409, 0, 0) ```
203 lines
9.3 KiB
XML
203 lines
9.3 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<class name="Curve2D" inherits="Resource" version="4.0">
|
|
<brief_description>
|
|
Describes a Bézier curve in 2D space.
|
|
</brief_description>
|
|
<description>
|
|
This class describes a Bézier curve in 2D space. It is mainly used to give a shape to a [Path2D], but can be manually sampled for other purposes.
|
|
It keeps a cache of precalculated points along the curve, to speed up further calculations.
|
|
</description>
|
|
<tutorials>
|
|
</tutorials>
|
|
<methods>
|
|
<method name="add_point">
|
|
<return type="void">
|
|
</return>
|
|
<argument index="0" name="position" type="Vector2">
|
|
</argument>
|
|
<argument index="1" name="in" type="Vector2" default="Vector2( 0, 0 )">
|
|
</argument>
|
|
<argument index="2" name="out" type="Vector2" default="Vector2( 0, 0 )">
|
|
</argument>
|
|
<argument index="3" name="at_position" type="int" default="-1">
|
|
</argument>
|
|
<description>
|
|
Adds a point to a curve at [code]position[/code], with control points [code]in[/code] and [code]out[/code].
|
|
If [code]at_position[/code] is given, the point is inserted before the point number [code]at_position[/code], moving that point (and every point after) after the inserted point. If [code]at_position[/code] is not given, or is an illegal value ([code]at_position <0[/code] or [code]at_position >= [method get_point_count][/code]), the point will be appended at the end of the point list.
|
|
</description>
|
|
</method>
|
|
<method name="clear_points">
|
|
<return type="void">
|
|
</return>
|
|
<description>
|
|
Removes all points from the curve.
|
|
</description>
|
|
</method>
|
|
<method name="get_baked_length" qualifiers="const">
|
|
<return type="float">
|
|
</return>
|
|
<description>
|
|
Returns the total length of the curve, based on the cached points. Given enough density (see [member bake_interval]), it should be approximate enough.
|
|
</description>
|
|
</method>
|
|
<method name="get_baked_points" qualifiers="const">
|
|
<return type="PackedVector2Array">
|
|
</return>
|
|
<description>
|
|
Returns the cache of points as a [PackedVector2Array].
|
|
</description>
|
|
</method>
|
|
<method name="get_closest_offset" qualifiers="const">
|
|
<return type="float">
|
|
</return>
|
|
<argument index="0" name="to_point" type="Vector2">
|
|
</argument>
|
|
<description>
|
|
Returns the closest offset to [code]to_point[/code]. This offset is meant to be used in [method interpolate_baked].
|
|
[code]to_point[/code] must be in this curve's local space.
|
|
</description>
|
|
</method>
|
|
<method name="get_closest_point" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="to_point" type="Vector2">
|
|
</argument>
|
|
<description>
|
|
Returns the closest point (in curve's local space) to [code]to_point[/code].
|
|
[code]to_point[/code] must be in this curve's local space.
|
|
</description>
|
|
</method>
|
|
<method name="get_point_count" qualifiers="const">
|
|
<return type="int">
|
|
</return>
|
|
<description>
|
|
Returns the number of points describing the curve.
|
|
</description>
|
|
</method>
|
|
<method name="get_point_in" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<description>
|
|
Returns the position of the control point leading to the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
|
|
</description>
|
|
</method>
|
|
<method name="get_point_out" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<description>
|
|
Returns the position of the control point leading out of the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
|
|
</description>
|
|
</method>
|
|
<method name="get_point_position" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<description>
|
|
Returns the position of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
|
|
</description>
|
|
</method>
|
|
<method name="interpolate" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<argument index="1" name="t" type="float">
|
|
</argument>
|
|
<description>
|
|
Returns the position between the vertex [code]idx[/code] and the vertex [code]idx + 1[/code], where [code]t[/code] controls if the point is the first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t <=1[/code]) give strange, but predictable results.
|
|
If [code]idx[/code] is out of bounds it is truncated to the first or last vertex, and [code]t[/code] is ignored. If the curve has no points, the function sends an error to the console, and returns [code](0, 0)[/code].
|
|
</description>
|
|
</method>
|
|
<method name="interpolate_baked" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="offset" type="float">
|
|
</argument>
|
|
<argument index="1" name="cubic" type="bool" default="false">
|
|
</argument>
|
|
<description>
|
|
Returns a point within the curve at position [code]offset[/code], where [code]offset[/code] is measured as a pixel distance along the curve.
|
|
To do that, it finds the two cached points where the [code]offset[/code] lies between, then interpolates the values. This interpolation is cubic if [code]cubic[/code] is set to [code]true[/code], or linear if set to [code]false[/code].
|
|
Cubic interpolation tends to follow the curves better, but linear is faster (and often, precise enough).
|
|
</description>
|
|
</method>
|
|
<method name="interpolatef" qualifiers="const">
|
|
<return type="Vector2">
|
|
</return>
|
|
<argument index="0" name="fofs" type="float">
|
|
</argument>
|
|
<description>
|
|
Returns the position at the vertex [code]fofs[/code]. It calls [method interpolate] using the integer part of [code]fofs[/code] as [code]idx[/code], and its fractional part as [code]t[/code].
|
|
</description>
|
|
</method>
|
|
<method name="remove_point">
|
|
<return type="void">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<description>
|
|
Deletes the point [code]idx[/code] from the curve. Sends an error to the console if [code]idx[/code] is out of bounds.
|
|
</description>
|
|
</method>
|
|
<method name="set_point_in">
|
|
<return type="void">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<argument index="1" name="position" type="Vector2">
|
|
</argument>
|
|
<description>
|
|
Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
|
|
</description>
|
|
</method>
|
|
<method name="set_point_out">
|
|
<return type="void">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<argument index="1" name="position" type="Vector2">
|
|
</argument>
|
|
<description>
|
|
Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
|
|
</description>
|
|
</method>
|
|
<method name="set_point_position">
|
|
<return type="void">
|
|
</return>
|
|
<argument index="0" name="idx" type="int">
|
|
</argument>
|
|
<argument index="1" name="position" type="Vector2">
|
|
</argument>
|
|
<description>
|
|
Sets the position for the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
|
|
</description>
|
|
</method>
|
|
<method name="tessellate" qualifiers="const">
|
|
<return type="PackedVector2Array">
|
|
</return>
|
|
<argument index="0" name="max_stages" type="int" default="5">
|
|
</argument>
|
|
<argument index="1" name="tolerance_degrees" type="float" default="4">
|
|
</argument>
|
|
<description>
|
|
Returns a list of points along the curve, with a curvature controlled point density. That is, the curvier parts will have more points than the straighter parts.
|
|
This approximation makes straight segments between each point, then subdivides those segments until the resulting shape is similar enough.
|
|
[code]max_stages[/code] controls how many subdivisions a curve segment may face before it is considered approximate enough. Each subdivision splits the segment in half, so the default 5 stages may mean up to 32 subdivisions per curve segment. Increase with care!
|
|
[code]tolerance_degrees[/code] controls how many degrees the midpoint of a segment may deviate from the real curve, before the segment has to be subdivided.
|
|
</description>
|
|
</method>
|
|
</methods>
|
|
<members>
|
|
<member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval" default="5.0">
|
|
The distance in pixels between two adjacent cached points. Changing it forces the cache to be recomputed the next time the [method get_baked_points] or [method get_baked_length] function is called. The smaller the distance, the more points in the cache and the more memory it will consume, so use with care.
|
|
</member>
|
|
</members>
|
|
<constants>
|
|
</constants>
|
|
</class>
|