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

float

bake_interval

5.0

Métodos

void

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

void

clear_points ( )

float

get_baked_length ( ) const

PoolVector2Array

get_baked_points ( ) const

float

get_closest_offset ( Vector2 to_point ) const

Vector2

get_closest_point ( Vector2 to_point ) const

int

get_point_count ( ) const

Vector2

get_point_in ( int idx ) const

Vector2

get_point_out ( int idx ) const

Vector2

get_point_position ( int idx ) const

Vector2

interpolate ( int idx, float t ) const

Vector2

interpolate_baked ( float offset, bool cubic=false ) const

Vector2

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 )

PoolVector2Array

tessellate ( int max_stages=5, float tolerance_degrees=4 ) const

Descripciones de Propiedades

Default

5.0

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

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.


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.


  • void set_point_out ( int idx, Vector2 position )

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.


  • void set_point_position ( int idx, Vector2 position )

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.


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.