Curve2D¶
Inherits: Resource < Reference < Object
Describe una curva de Bézier en el espacio 2D.
Descripción¶
Esta clase describe una curva de Bézier en el espacio 2D. Se utiliza principalmente para dar una forma a un Path2D, pero puede ser muestreada manualmente para otros propósitos.
Mantiene un cacheo de puntos precalculados a lo largo de la curva, para acelerar los cálculos.
Propiedades¶
|
Métodos¶
void |
add_point ( Vector2 position, Vector2 in=Vector2( 0, 0 ), Vector2 out=Vector2( 0, 0 ), int at_position=-1 ) |
void |
clear_points ( ) |
get_baked_length ( ) const |
|
get_baked_points ( ) const |
|
get_closest_offset ( Vector2 to_point ) const |
|
get_closest_point ( Vector2 to_point ) const |
|
get_point_count ( ) const |
|
get_point_in ( int idx ) const |
|
get_point_out ( int idx ) const |
|
get_point_position ( int idx ) const |
|
interpolate ( int idx, float t ) const |
|
interpolate_baked ( float offset, bool cubic=false ) const |
|
interpolatef ( float fofs ) const |
|
void |
remove_point ( int idx ) |
void |
set_point_in ( int idx, Vector2 position ) |
void |
set_point_out ( int idx, Vector2 position ) |
void |
set_point_position ( int idx, Vector2 position ) |
tessellate ( int max_stages=5, float tolerance_degrees=4 ) const |
Descripciones de Propiedades¶
float bake_interval
Default |
|
Setter |
set_bake_interval(value) |
Getter |
get_bake_interval() |
La distancia en píxeles entre dos puntos cacheados adyacentes. Cambiarlo obliga a recomponer la caché la próxima vez que se llame a la función get_baked_points o get_baked_length. Cuanto menor sea la distancia, más puntos en el cache y más memoria consumirá, así que úsala con cuidado.
Descripciones de Métodos¶
void add_point ( Vector2 position, Vector2 in=Vector2( 0, 0 ), Vector2 out=Vector2( 0, 0 ), int at_position=-1 )
Añade un punto a una curva en la posición position
, con puntos de control in
y out
.
Si se da at_position
, el punto se inserta antes del número de punto at_position
, desplazando ese punto (y todos los puntos posteriores) después del punto insertado. Si no se da at_position
, o es un valor ilegal (at_position <0
o at_position >= [method get_point_count]
), el punto se añadirá al final de la lista de puntos.
void clear_points ( )
Elimina todos los puntos de la curva.
float get_baked_length ( ) const
Devuelve la longitud total de la curva, basada en los puntos cacheados. Si se le da suficiente densidad (ver bake_interval), debe ser bastante aproximada.
PoolVector2Array get_baked_points ( ) const
Returns the cache of points as a PoolVector2Array.
Devuelve el desplazamiento más cercano a to_point
. Este desplazamiento está destinado a ser utilizado en interpolate_baked.
to_point
debe estar en el espacio local de esta curva.
Returns the closest baked point (in curve's local space) to to_point
.
to_point
must be in this curve's local space.
int get_point_count ( ) const
Devuelve el número de puntos que describen la curva.
Returns the position of the control point leading to the vertex idx
. The returned position is relative to the vertex idx
. If the index is out of bounds, the function sends an error to the console, and returns (0, 0)
.
Returns the position of the control point leading out of the vertex idx
. The returned position is relative to the vertex idx
. If the index is out of bounds, the function sends an error to the console, and returns (0, 0)
.
Devuelve la posición del vértice idx
. Si el índice está fuera de los límites, la función envía un error a la consola, y devuelve (0, 0)
.
Devuelve la posición entre el vértice idx
y el vértice idx + 1
, donde t
controla si el punto es el primer vértice (t = 0.0
), el último vértice (t = 1.0
), o en medio. Los valores de t
fuera del rango (0.0 >= t <=1
) dan resultados extraños, pero predecibles.
Si idx
está fuera de los límites se trunca el primer o último vértice, y t
se ignora. Si la curva no tiene puntos, la función envía un error a la consola, y devuelve (0, 0)
.
Devuelve un punto dentro de la curva en la posición offset
, donde offset
se mide como una distancia en píxeles a lo largo de la curva.
Para ello, encuentra los dos puntos en caché entre los que se encuentra offset
, e interpola los valores. Esta interpolación es cúbica si cubic
se establece en true
, o lineal si se establece en false
.
La interpolación cúbica tiende a seguir mejor las curvas, pero la lineal es más rápida (y a menudo, suficientemente precisa).
Devuelve la posición en el vértice fofs
. Llama a interpolate usando la parte entera de fofs
como idx
, y su parte fraccionaria como t
.
void remove_point ( int idx )
Suprime el punto idx
de la curva. Envía un error a la consola si idx
está fuera de los límites.
Sets the position of the control point leading to the vertex idx
. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
Sets the position of the control point leading out of the vertex idx
. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
Establece la posición del vértice idx
. Si el índice está fuera de los límites, la función envía un error a la consola.
PoolVector2Array tessellate ( int max_stages=5, float tolerance_degrees=4 ) const
Devuelve una lista de puntos a lo largo de la curva, con una densidad de puntos controlada por la curvatura. Es decir, las partes más curvadas tendrán más puntos que las partes más rectas.
Esta aproximación hace segmentos rectos entre cada punto, luego subdivide esos segmentos hasta que la forma resultante es lo suficientemente similar.
max_stages
controla cuántas subdivisiones puede afrontar un segmento de curva antes de que se considere suficientemente aproximado. Cada subdivisión divide el segmento por la mitad, por lo que las 5 etapas predeterminadas pueden significar hasta 32 subdivisiones por segmento de curva. Aumenta con cuidado!
tolerance_degrees
controla cuántos grados puede desviarse el punto medio de un segmento de la curva real, antes de que el segmento tenga que ser subdividido.