Geometry

Inherits: Object

Helper node to calculate generic geometry operations.

Descripción

Geometry provides users with a set of helper functions to create geometric shapes, compute intersections between shapes, and process various other geometric operations.

Métodos

Array

build_box_planes ( Vector3 extents )

Array

build_capsule_planes ( float radius, float height, int sides, int lats, Vector3.Axis axis=2 )

Array

build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 )

PoolVector3Array

clip_polygon ( PoolVector3Array points, Plane plane )

Array

clip_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

clip_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )

PoolVector2Array

convex_hull_2d ( PoolVector2Array points )

Array

exclude_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Vector3

get_closest_point_to_segment ( Vector3 point, Vector3 s1, Vector3 s2 )

Vector2

get_closest_point_to_segment_2d ( Vector2 point, Vector2 s1, Vector2 s2 )

Vector3

get_closest_point_to_segment_uncapped ( Vector3 point, Vector3 s1, Vector3 s2 )

Vector2

get_closest_point_to_segment_uncapped_2d ( Vector2 point, Vector2 s1, Vector2 s2 )

PoolVector3Array

get_closest_points_between_segments ( Vector3 p1, Vector3 p2, Vector3 q1, Vector3 q2 )

PoolVector2Array

get_closest_points_between_segments_2d ( Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2 )

int

get_uv84_normal_bit ( Vector3 normal )

Array

intersect_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

intersect_polyline_with_polygon_2d ( PoolVector2Array polyline, PoolVector2Array polygon )

bool

is_point_in_circle ( Vector2 point, Vector2 circle_position, float circle_radius )

bool

is_point_in_polygon ( Vector2 point, PoolVector2Array polygon )

bool

is_polygon_clockwise ( PoolVector2Array polygon )

Variant

line_intersects_line_2d ( Vector2 from_a, Vector2 dir_a, Vector2 from_b, Vector2 dir_b )

Dictionary

make_atlas ( PoolVector2Array sizes )

Array

merge_polygons_2d ( PoolVector2Array polygon_a, PoolVector2Array polygon_b )

Array

offset_polygon_2d ( PoolVector2Array polygon, float delta, PolyJoinType join_type=0 )

Array

offset_polyline_2d ( PoolVector2Array polyline, float delta, PolyJoinType join_type=0, PolyEndType end_type=3 )

bool

point_is_inside_triangle ( Vector2 point, Vector2 a, Vector2 b, Vector2 c ) const

Variant

ray_intersects_triangle ( Vector3 from, Vector3 dir, Vector3 a, Vector3 b, Vector3 c )

float

segment_intersects_circle ( Vector2 segment_from, Vector2 segment_to, Vector2 circle_position, float circle_radius )

PoolVector3Array

segment_intersects_convex ( Vector3 from, Vector3 to, Array planes )

PoolVector3Array

segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius )

Variant

segment_intersects_segment_2d ( Vector2 from_a, Vector2 to_a, Vector2 from_b, Vector2 to_b )

PoolVector3Array

segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius )

Variant

segment_intersects_triangle ( Vector3 from, Vector3 to, Vector3 a, Vector3 b, Vector3 c )

PoolIntArray

triangulate_delaunay_2d ( PoolVector2Array points )

PoolIntArray

triangulate_polygon ( PoolVector2Array polygon )

Enumeraciones

enum PolyBooleanOperation:

  • OPERATION_UNION = 0 --- Crear regiones en las que se llenen los polígonos del sujeto o del recorte (o ambos).

  • OPERATION_DIFFERENCE = 1 --- Crea regiones en las que se rellenen los polígonos del sujeto, excepto cuando se rellenen los polígonos de clips.

  • OPERATION_INTERSECTION = 2 --- Crea regiones en las que se llenen tanto los polígonos del sujeto como los del recorte.

  • OPERATION_XOR = 3 --- Crea regiones en las que se llenen los polígonos del sujeto o del recorte pero no en las que se llenen ambos.


enum PolyJoinType:

  • JOIN_SQUARE = 0 --- La cuadratura se aplica uniformemente en todas las uniones de bordes convexos en 1 * delta.

  • JOIN_ROUND = 1 --- Mientras que los caminos aplanados nunca pueden trazar perfectamente un arco, son aproximados por una serie de acordes de arco.

  • JOIN_MITER = 2 --- Hay un límite necesario para las uniones a inglete, ya que los bordes desplazados que se unen en ángulos muy agudos producirán "picos" excesivamente largos y estrechos. Para cualquier unión de borde, cuando la compensación de inglete exceda esa distancia máxima, se aplica la unión "cuadrada".


enum PolyEndType:

  • END_POLYGON = 0 --- Los puntos finales se unen usando el valor PolyJoinType y el camino llenado como un polígono.

  • END_JOINED = 1 --- Los puntos finales se unen usando el valor PolyJoinType y el camino llenado como una polilínea.

  • END_BUTT = 2 --- Los puntos finales son cuadrados sin extensión.

  • END_SQUARE = 3 --- Los puntos finales se cuadran y se amplían con unidades delta.

  • END_ROUND = 4 --- Los puntos finales se redondean y se amplían con unidades delta.

Descripciones de Métodos

Devuelve un array con 6 Planes que describen los lados de una caja centrada en el origen. El tamaño de la caja está definido por extents, que representa una esquina (positiva) de la caja (es decir, la mitad de su tamaño real).


Devuelve un conjunto de Planes que delimita estrechamente una cápsula con caras centrada en el origen con radio radio y altura height. El parámetro sides define cuántos planos se generarán para la parte lateral de la cápsula, mientras que lats da el número de pasos latitudinales en la parte inferior y superior de la cápsula. El parámetro axis describe el eje a lo largo del cual se orienta la cápsula (0 para X, 1 para Y, 2 para Z).


  • Array build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 )

Devuelve un conjunto de Planes que delimita estrechamente un cilindro facetado centrado en el origen con radio radius y altura height. El parámetro sides define cuántos planos se generarán para la parte redonda del cilindro. El parámetro axis describe el eje a lo largo del cual se orienta el cilindro (0 para X, 1 para Y, 2 para Z).


Recorta el polígono definido por los puntos en points contra el plane y devuelve los puntos del polígono recortado.


Recorta el polygon_a contra polygon_b y devuelve un array de polígonos recortados. Esto realiza OPERATION_DIFFERENCE entre los polígonos. Devuelve un array vacío si polygon_b se superpone completamente a polygon_a.

Si polygon_b está encerrado por polygon_a, devuelve un polígono exterior (límite) y un polígono interior (agujero) que se pueden distinguir llamando a is_polygon_clockwise.


Recorta polyline contra polygon y devuelve un conjunto de polilíneas recortadas. Esto realiza OPERATION_DIFFERENCE entre la polilínea y el polígono. Esta operación puede ser pensada como el corte de una línea con una forma cerrada.


Dado un conjunto de Vector2, devuelve el casco convexo como una lista de puntos en orden antihorario. El último punto es el mismo que el primero.


Mutually excludes common area defined by intersection of polygon_a and polygon_b (see intersect_polygons_2d) and returns an array of excluded polygons. This performs OPERATION_XOR between polygons. In other words, returns all but common area between polygons.

The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling is_polygon_clockwise.


Devuelve el punto 3D en el segmento 3D (s1, s2) que está más cerca del point. El punto devuelto siempre estará dentro del segmento especificado.


Devuelve el punto 2D en el segmento 2D (s1, s2) que está más cerca del point. El punto devuelto siempre estará dentro del segmento especificado.


Devuelve el punto 3D en la línea 3D definida por (s1, s2) que está más cerca de point. El punto devuelto puede estar dentro del segmento (s1, s2) o fuera de él, es decir, en algún lugar de la línea que se extiende desde el segmento.


Devuelve el punto 2D en la línea 2D definida por (s1, s2) que está más cerca del point. El punto devuelto puede estar dentro del segmento (s1, s2) o fuera de él, es decir, en algún lugar de la línea que se extiende desde el segmento.


Given the two 3D segments (p1, p2) and (q1, q2), finds those two points on the two segments that are closest to each other. Returns a PoolVector3Array that contains this point on (p1, p2) as well the accompanying point on (q1, q2).


Given the two 2D segments (p1, q1) and (p2, q2), finds those two points on the two segments that are closest to each other. Returns a PoolVector2Array that contains this point on (p1, q1) as well the accompanying point on (p2, q2).


Usado internamente por el motor.


Intersecta polygon_a con polygon_b y devuelve una matriz de polígonos intersectados. Esto realiza OPERATION_INTERSECTION entre los polígonos. En otras palabras, devuelve el área común compartida por los polígonos. Devuelve una matriz vacía si no se produce ninguna intersección.

La operación puede dar como resultado un polígono exterior (límite) y un polígono interior (agujero) producidos que se podrían distinguir llamando a is_polygon_clockwise.


Intersecta polyline con polygon y devuelve un conjunto de polilíneas intersectadas. Esto realiza OPERATION_INTERSECTION entre la polilínea y el polígono. Esta operación puede ser pensada como cortar una línea con una forma cerrada.


Devuelve true si point está dentro del círculo o si está situado exactamente on el límite del círculo, de lo contrario devuelve false.


Devuelve true si point está dentro de polygon o si se encuentra exactamente en el límite del polígono, de lo contrario devuelve false.


Devuelve true si los vértices de polygon están ordenados en el sentido de las agujas del reloj, de lo contrario devuelve false.


Comprueba si las dos líneas (from_a, dir_a) y (from_b, dir_b) se cruzan. Si es así, devuelve el punto de intersección como Vector2. Si no hay intersección, devuelve un Variant vacío.

Nota: Las rectas se especifican usando vectores de dirección, no puntos finales.


Dada una serie de Vector2s que representan piezas que construye un atlas. El diccionario devuelto tiene dos claves: points es un vector de Vector2 que especifica las posiciones de cada pieza, size contiene el tamaño global de todo el atlas como Vector2.


Merges (combines) polygon_a and polygon_b and returns an array of merged polygons. This performs OPERATION_UNION between polygons.

The operation may result in an outer polygon (boundary) and multiple inner polygons (holes) produced which could be distinguished by calling is_polygon_clockwise.


Inflates or deflates polygon by delta units (pixels). If delta is positive, makes the polygon grow outward. If delta is negative, shrinks the polygon inward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. Returns an empty array if delta is negative and the absolute value of it approximately exceeds the minimum bounding rectangle dimensions of the polygon.

Each polygon's vertices will be rounded as determined by join_type, see PolyJoinType.

The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling is_polygon_clockwise.

Note: To translate the polygon's vertices specifically, use the Transform2D.xform method:

var polygon = PoolVector2Array([Vector2(0, 0), Vector2(100, 0), Vector2(100, 100), Vector2(0, 100)])
var offset = Vector2(50, 50)
polygon = Transform2D(0, offset).xform(polygon)
print(polygon) # prints [Vector2(50, 50), Vector2(150, 50), Vector2(150, 150), Vector2(50, 150)]

Infla o desinfla la polyline por unidades delta (píxeles), produciendo polígonos. Si delta es positivo, hace que la polilínea crezca hacia afuera. Devuelve un conjunto de polígonos porque inflarse/desinflarse puede resultar en múltiples polígonos discretos. Si delta es negativo, devuelve una matriz vacía.

Los vértices de cada polígono se redondearán según lo determinado por join_type, ver PolyJoinType.

Los vértices de cada polígono se redondearán según lo determinado por end_type, ver PolyEndType.

La operación puede dar como resultado un polígono exterior (límite) y un polígono interior (agujero) producidos que pueden distinguirse llamando a is_polygon_clockwise.


Regresa si point está dentro del triángulo especificado por a, b y c.


Comprueba si el rayo 3D que comienza en from con la dirección de dir intersecta el triángulo especificado por a, b y c. Si es así, devuelve el punto de intersección como Vector3. Si no hay intersección, se devuelve una Variant vacía.


Given the 2D segment (segment_from, segment_to), returns the position on the segment (as a number between 0 and 1) at which the segment hits the circle that is located at position circle_position and has radius circle_radius. If the segment does not intersect the circle, -1 is returned (this is also the case if the line extending the segment would intersect the circle, but the segment does not).


Given a convex hull defined though the Planes in the array planes, tests if the segment (from, to) intersects with that hull. If an intersection is found, returns a PoolVector3Array containing the point the intersection and the hull's normal. If no intersecion is found, an the returned array is empty.


Checks if the segment (from, to) intersects the cylinder with height height that is centered at the origin and has radius radius. If no, returns an empty PoolVector3Array. If an intersection takes place, the returned array contains the point of intersection and the cylinder's normal at the point of intersection.


Comprueba si los dos segmentos (from_a, to_a) y (from_b, to_b) se cruzan. Si es así, devuelve el punto de intersección como Vector2. Si no hay intersección, devuelve un Variant vacío.


Checks if the segment (from, to) intersects the sphere that is located at sphere_position and has radius sphere_radius. If no, returns an empty PoolVector3Array. If yes, returns a PoolVector3Array containing the point of intersection and the sphere's normal at the point of intersection.


Comprueba si el segmento (de, a) intersecta el triángulo a, b, c. Si es así, devuelve el punto de intersección como Vector3. Si no hay intersección, se devuelve una Variant vacía.


Triangulates the area specified by discrete set of points such that no point is inside the circumcircle of any resulting triangle. Returns a PoolIntArray where each triangle consists of three consecutive point indices into points (i.e. the returned array will have n * 3 elements, with n being the number of found triangles). If the triangulation did not succeed, an empty PoolIntArray is returned.


Triangulates the polygon specified by the points in polygon. Returns a PoolIntArray where each triangle consists of three consecutive point indices into polygon (i.e. the returned array will have n * 3 elements, with n being the number of found triangles). If the triangulation did not succeed, an empty PoolIntArray is returned.