跳到主要内容

Geometry

继承

Object

简要描述

帮助节点,用于计算通用几何运算。

描述

Geometry为用户提供了一组帮助功能,用于创建几何形状,计算形状之间的相交以及处理各种其他几何操作。

方法

返回值类型方法名称
Arraybuild_box_planes(extents: Vector3)
Arraybuild_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: int = 2)
Arraybuild_cylinder_planes(radius: float, height: float, sides: int, axis: int = 2)
PoolVector3Arrayclip_polygon(points: PoolVector3Array, plane: Plane)
Arrayclip_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
Arrayclip_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)
PoolVector2Arrayconvex_hull_2d(points: PoolVector2Array)
Arrayexclude_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
Vector3get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3)
Vector2get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2)
Vector3get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)
Vector2get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2)
PoolVector3Arrayget_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3)
PoolVector2Arrayget_closest_points_between_segments_2d(p1: Vector2, q1: Vector2, p2: Vector2, q2: Vector2)
intget_uv84_normal_bit(normal: Vector3)
Arrayintersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
Arrayintersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)
boolis_point_in_circle(point: Vector2, circle_position: Vector2, circle_radius: float)
boolis_point_in_polygon(point: Vector2, polygon: PoolVector2Array)
boolis_polygon_clockwise(polygon: PoolVector2Array)
Variantline_intersects_line_2d(from_a: Vector2, dir_a: Vector2, from_b: Vector2, dir_b: Vector2)
Dictionarymake_atlas(sizes: PoolVector2Array)
Arraymerge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
Arrayoffset_polygon_2d(polygon: PoolVector2Array, delta: float, join_type: int = 0)
Arrayoffset_polyline_2d(polyline: PoolVector2Array, delta: float, join_type: int = 0, end_type: int = 3)
boolpoint_is_inside_triangle(point: Vector2, a: Vector2, b: Vector2, c: Vector2) const
Variantray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3)
floatsegment_intersects_circle(segment_from: Vector2, segment_to: Vector2, circle_position: Vector2, circle_radius: float)
PoolVector3Arraysegment_intersects_convex(from: Vector3, to: Vector3, planes: Array)
PoolVector3Arraysegment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float)
Variantsegment_intersects_segment_2d(from_a: Vector2, to_a: Vector2, from_b: Vector2, to_b: Vector2)
PoolVector3Arraysegment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float)
Variantsegment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3)
PoolIntArraytriangulate_delaunay_2d(points: PoolVector2Array)
PoolIntArraytriangulate_polygon(polygon: PoolVector2Array)

枚举

enum PolyBooleanOperation:

  • **OPERATION_UNION = 0**

创建填充主题或剪辑多边形(或两者都填充)的区域。

  • **OPERATION_DIFFERENCE = 1**

创建填充主题多边形的区域,除了填充剪辑多边形的区域。

  • **OPERATION_INTERSECTION = 2**

创建填充主题和剪辑多边形的区域。

  • **OPERATION_XOR = 3**

创建填充主题或剪辑多边形但不填充两者的区域。


enum PolyJoinType:

  • **JOIN_SQUARE = 0**

1 * delta处的所有凸边连接处均一地应用平方。

  • **JOIN_ROUND = 1**

尽管展平的路径永远无法完美地描绘出一条弧线,但它们由一系列弧线弦近似。

  • **JOIN_MITER = 2**

有一个必要的限度,因为这抵消在加盟非常尖锐的角过长会产生,缩小“尖峰”边缘尖角连接。


enum PolyEndType:

  • **END_POLYGON = 0**

使用PolyJoinType值和填充为多边形的路径来连接端点。

  • **END_JOINED = 1**

使用PolyJoinType值连接端点,并以多段线填充路径。

  • **END_BUTT = 2**

端点平方无扩展。

  • **END_SQUARE = 3**

端点平方并以delta单位扩展。

  • **END_ROUND = 4**

端点四舍五入并以delta单位扩展。


方法说明

  • build_box_planes build_box_planes(extents: Vector3)

返回一个具有6个Plane的数组,这些数组描述以原点为中心的盒子的侧面。框的大小由extents定义,它表示框的一个(正)角(即其实际大小的一半)。


  • build_capsule_planes build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: int = 2)

返回以半径radius和高度height紧密围绕以原点为中心的多面囊的[平面]数组。 参数sides定义要为胶囊的侧面部分生成多少个平面,而lats给出胶囊底部和顶部的横向步数。 参数axis描述了胶囊沿其定向的轴(X表示0,Y表示1,Z表示2)。


  • build_cylinder_planes build_cylinder_planes(radius: float, height: float, sides: int, axis: int = 2)

返回Plane数组,该数组以半径radius和高度height紧密地围绕以原点为中心的多面圆柱体。 参数sides定义将为圆柱的圆形部分生成多少个平面。 参数axis描述圆柱体沿其定向的轴(X表示0,Y表示1,Z表示2)。


  • clip_polygon clip_polygon(points: PoolVector3Array, plane: Plane)

points中的点定义的多边形相对于plane进行裁剪,并返回裁剪后的多边形的点。


  • clip_polygons_2d clip_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)

polygon_a裁剪到polygon_b上,并返回一个裁剪后的多边形数组。 这将在多边形之间执行OPERATION_DIFFERENCE。 如果polygon_b完全重叠polygon_a,则返回一个空数组。

如果polygon_bpolygon_a括起来,则返回外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


  • clip_polyline_with_polygon_2d clip_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)

polyline剪切到polygon上,并返回一组剪切后的折线。 这会在折线和多边形之间执行OPERATION_DIFFERENCE。 该操作可以被认为是切割具有闭合形状的线。


  • convex_hull_2d convex_hull_2d(points: PoolVector2Array)

给定Vector2 s数组,以逆时针顺序将凸包作为点列表返回。最后一点与第一点相同。


  • exclude_polygons_2d exclude_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)

相互排除由polygon_apolygon_b的交集定义的公共区域(请参阅intersect_polygons_2d),并返回排除的多边形数组。 这将在多边形之间执行OPERATION_XOR。 换句话说,返回多边形之间除公共区域外的所有区域。

该操作可能会导致生成外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分它们。


  • get_closest_point_to_segment get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3)

返回最接近point的3D片段(s1s2)上的3D点。返回点将始终位于指定的段内。


  • get_closest_point_to_segment_2d get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2)

返回2D段上最接近point的2D点(s1s2)。返回的点将始终位于指定的线段内。


  • get_closest_point_to_segment_uncapped get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)

返回由(s1s2)定义的最接近point的3D线上的3D点。返回的点可以在线段内(s1s2)或在线段外部,即从线段延伸的线上的某个位置。


  • get_closest_point_to_segment_uncapped_2d get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2)

返回由(s1s2)定义的最接近point的2D线上的2D点。返回的点可以在线段内(s1s2)或在线段外部,即从线段延伸的线上的某个位置。


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

给定两个3D线段(p1p2)和(q1q2),在两个线段上找到最接近的两个点。 返回一个PoolVector3Array,其中包含(p1p2)上的该点以及(q1q2)。


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

给定两个2D线段(p1p2)和([q1q2),找到这两个点在两个线段上找到最接近的两个点。 返回一个PoolVector2Array,其中包含(p1p2)上的该点以及(q1q2)。


  • get_uv84_normal_bit get_uv84_normal_bit(normal: Vector3)

由引擎内部使用。


  • intersect_polygons_2d intersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)

polygon_apolygon_b相交,并返回相交多边形的数组。这将在多边形之间执行OPERATION_INTERSECTION。 换句话说,返回多边形共享的公共区域。 如果没有交集,则返回一个空数组。

该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


  • intersect_polyline_with_polygon_2d intersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)

polylinepolygon相交,并返回相交的折线数组。这会在折线和多边形之间执行OPERATION_INTERSECTION。 可以认为此操作是切成闭合形状的线。


  • is_point_in_circle is_point_in_circle(point: Vector2, circle_position: Vector2, circle_radius: float)

如果point在圆内或正好位于圆的边界上,则返回true,否则返回false


  • is_point_in_polygon is_point_in_polygon(point: Vector2, polygon: PoolVector2Array)

如果pointpolygon内或正好位于在多边形边界上,则返回true,否则返回false


  • is_polygon_clockwise is_polygon_clockwise(polygon: PoolVector2Array)

如果多边形的顶点按顺时针顺序排序,则返回true,否则返回false


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

检查两行(from_adir_a)和(from_bdir_b)是否相交。如果是,则将相交点返回为Vector2。 如果没有交叉,则返回一个空的Variant

注意:线是使用方向矢量而不是端点指定的。


  • make_atlas make_atlas(sizes: PoolVector2Array)

给定表示瓦片的Vector2数组,构建一个地图集。 返回的字典有两个键:pointsVector2的向量,指定每个图块的位置,size包含整个图集的整体大小,如Vector2


  • merge_polygons_2d merge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)

合并(合并)polygon_apolygon_b并返回合并后的多边形数组。这将在多边形之间执行OPERATION_UNION

该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


  • offset_polygon_2d offset_polygon_2d(polygon: PoolVector2Array, delta: float, join_type: int = 0)

delta单位(像素)对多边形进行增大或缩小。 如果delta为正,则使多边形向外增长。 如果delta为负,则向内缩小多边形。 返回多边形数组,因为扩展/缩小可能会导致多个离散的多边形。 如果delta为负并且其绝对值大约超过多边形的最小边界矩形尺寸,则返回一个空数组。

每个多边形的顶点将根据join_type的确定取整,请参见PolyJoinType

该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


  • offset_polyline_2d offset_polyline_2d(polyline: PoolVector2Array, delta: float, join_type: int = 0, end_type: int = 3)

放大或缩小polyline通过delta单位(像素),产生多边形。如果delta为正,则折线向外增长。返回一个多边形数组,因为充气/放气可能会产生多个离散的多边形。如果delta为负,返回一个空数组。

每个多边形的顶点将根据join_type取整,请参见PolyJoinType

每个多边形的端点将根据end_type进行四舍五入,请参见PolyEndType

该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。


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

返回point是否在abc指定的三角形内。


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

测试以dir的方向从from开始的3D射线是否与abc指定的三角形相交。如果是,返回交点Vector3。如果没有相交,则返回空的Variant


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

给定二维线段(segment_fromsegment_to),返回线段在该线段上击中位于的圆的位置(0到1之间的数字)位置circle_position,半径为circle_radius。 如果线段不与圆相交,则返回-1(如果延伸线段的线与圆相交,但线段不相交,情况也是如此)。


  • segment_intersects_convex segment_intersects_convex(from: Vector3, to: Vector3, planes: Array)

给定一个凸包,通过Plane数组中的Planes定义,测试(fromto)线段是否与该凸包相交。如果找到了交集,返回一个PoolVector3Array包含交集点和船体的法线。如果没有找到交集,则返回的数组为空。


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

检查线段(fromto)是否与圆柱体相交,圆柱体的高度为height,且高度为原点,半径为radius。 如果否,则返回一个空的PoolVector3Array。 如果发生相交,则返回的数组包含相交点和相交点处的圆柱体法线。


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

检查两个线段(from_ato_a)和(from_bto_b)是否相交。如果是,返回交点Vector2。如果没有交集,则返回空的Variant


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

检查线段(fromto)是否与中心点为sphere_position且半径为sphere_radius的球面相交。如果否,则返回一个空的[Vector3]。 如果是,则返回一个[Vector3],该数组包含相交点和相交点处的球体法线。


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

测试线段(fromto)是否与三角形abc相交。如果是,返回交点Vector3。如果没有交集,则返回空的Variant


  • triangulate_delaunay_2d triangulate_delaunay_2d(points: PoolVector2Array)

对由points的离散集合指定的区域进行三角剖分,以使任何点都不在任何所得三角形的外接圆之内。 返回一个PoolIntArray,其中每个三角形由三个连续的点索引组成,这些点索引指向points(即返回的数组将具有n * 3个元素,其中` n []是找到的三角形的数量)。 如果三角剖分没有成功,则返回一个空的PoolIntArray


  • triangulate_polygon triangulate_polygon(polygon: PoolVector2Array)

对由polygon中的点指定的多边形进行三角剖分。 返回一个PoolIntArray,其中每个三角形由三个连续的点索引组成,这些索引指向polygon(即,返回的数组将具有n * 3个元素,其中n是找到的三角形的数量)。 如果三角剖分没有成功,则返回一个空的PoolIntArray