Geometry¶
继承¶
Object
简要描述¶
帮助节点,用于计算通用几何运算。
描述¶
Geometry为用户提供了一组帮助功能,用于创建几何形状,计算形状之间的相交以及处理各种其他几何操作。
方法¶
| 返回值类型 | 方法名称 |
|---|---|
| Array | build_box_planes(extents: Vector3) |
| Array | build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: int = 2) |
| Array | build_cylinder_planes(radius: float, height: float, sides: int, axis: int = 2) |
| PoolVector3Array | clip_polygon(points: PoolVector3Array, plane: Plane) |
| Array | clip_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
| Array | clip_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array) |
| PoolVector2Array | convex_hull_2d(points: PoolVector2Array) |
| Array | exclude_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
| Vector3 | get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) |
| Vector2 | get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2) |
| Vector3 | get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) |
| Vector2 | get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2) |
| PoolVector3Array | get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) |
| PoolVector2Array | get_closest_points_between_segments_2d(p1: Vector2, q1: Vector2, p2: Vector2, q2: Vector2) |
| int | get_uv84_normal_bit(normal: Vector3) |
| Array | intersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
| Array | intersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array) |
| bool | is_point_in_circle(point: Vector2, circle_position: Vector2, circle_radius: float) |
| bool | is_point_in_polygon(point: Vector2, polygon: PoolVector2Array) |
| bool | is_polygon_clockwise(polygon: PoolVector2Array) |
| Variant | line_intersects_line_2d(from_a: Vector2, dir_a: Vector2, from_b: Vector2, dir_b: Vector2) |
| Dictionary | make_atlas(sizes: PoolVector2Array) |
| Array | merge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
| Array | offset_polygon_2d(polygon: PoolVector2Array, delta: float, join_type: int = 0) |
| Array | offset_polyline_2d(polyline: PoolVector2Array, delta: float, join_type: int = 0, end_type: int = 3) |
| bool | point_is_inside_triangle(point: Vector2, a: Vector2, b: Vector2, c: Vector2) const |
| Variant | ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) |
| float | segment_intersects_circle(segment_from: Vector2, segment_to: Vector2, circle_position: Vector2, circle_radius: float) |
| PoolVector3Array | segment_intersects_convex(from: Vector3, to: Vector3, planes: Array) |
| PoolVector3Array | segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) |
| Variant | segment_intersects_segment_2d(from_a: Vector2, to_a: Vector2, from_b: Vector2, to_b: Vector2) |
| PoolVector3Array | segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float) |
| Variant | segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3) |
| PoolIntArray | triangulate_delaunay_2d(points: PoolVector2Array) |
| PoolIntArray | triangulate_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_b用polygon_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_a与polygon_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片段(s1,s2)上的3D点。返回点将始终位于指定的段内。
- get_closest_point_to_segment_2d get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2)
返回2D段上最接近point的2D点(s1,s2)。返回的点将始终位于指定的线段内。
- get_closest_point_to_segment_uncapped get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)
返回由(s1,s2)定义的最接近point的3D线上的3D点。返回的点可以在线段内(s1,s2)或在线段外部,即从线段延伸的线上的某个位置。
- get_closest_point_to_segment_uncapped_2d get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2)
返回由(s1,s2)定义的最接近point的2D线上的2D点。返回的点可以在线段内(s1,s2)或在线段外部,即从线段延伸的线上的某个位置。
- get_closest_points_between_segments get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3)
给定两个3D线段(p1,p2)和(q1,q2),在两个线段上找到最接近的两个点。 返回一个PoolVector3Array,其中包含(p1,p2)上的该点以及(q1,q2)。
- get_closest_points_between_segments_2d get_closest_points_between_segments_2d(p1: Vector2, q1: Vector2, p2: Vector2, q2: Vector2)
给定两个2D线段(p1,p2)和([q1,q2),找到这两个点在两个线段上找到最接近的两个点。 返回一个PoolVector2Array,其中包含(p1,p2)上的该点以及(q1,q2)。
- get_uv84_normal_bit get_uv84_normal_bit(normal: Vector3)
由引擎内部使用。
- intersect_polygons_2d intersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
将polygon_a与polygon_b相交,并返回相交多边形的数组。这将在多边形之间执行OPERATION_INTERSECTION。 换句话说,返回多边形共享的公共区域。 如果没有交集,则返回一个空数组。
该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- intersect_polyline_with_polygon_2d intersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)
将polyline与polygon相交,并返回相交的折线数组。这会在折线和多边形之间执行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)
如果point在polygon内或正好位于在多边形*边界上*,则返回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_a,dir_a)和(from_b,dir_b)是否相交。如果是,则将相交点返回为Vector2。 如果没有交叉,则返回一个空的Variant。
**注意:**线是使用方向矢量而不是端点指定的。
- make_atlas make_atlas(sizes: PoolVector2Array)
给定表示瓦片的Vector2数组,构建一个地图集。 返回的字典有两个键:points是Vector2的向量,指定每个图块的位置,size包含整个图集的整体大小,如Vector2 。
- merge_polygons_2d merge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
合并(合并)polygon_a和polygon_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是否在a,b和c指定的三角形内。
- ray_intersects_triangle ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3)
测试以dir的方向从from开始的3D射线是否与a,b和c指定的三角形相交。如果是,返回交点Vector3。如果没有相交,则返回空的Variant。
- segment_intersects_circle segment_intersects_circle(segment_from: Vector2, segment_to: Vector2, circle_position: Vector2, circle_radius: float)
给定二维线段(segment_from,segment_to),返回线段在该线段上击中位于的圆的位置(0到1之间的数字)位置circle_position,半径为circle_radius。 如果线段不与圆相交,则返回-1(如果延伸线段的线与圆相交,但线段不相交,情况也是如此)。
- segment_intersects_convex segment_intersects_convex(from: Vector3, to: Vector3, planes: Array)
给定一个凸包,通过Plane数组中的Planes定义,测试(from, to)线段是否与该凸包相交。如果找到了交集,返回一个PoolVector3Array包含交集点和船体的法线。如果没有找到交集,则返回的数组为空。
- segment_intersects_cylinder segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float)
检查线段(from,to)是否与圆柱体相交,圆柱体的高度为height,且高度为原点,半径为radius。 如果否,则返回一个空的PoolVector3Array。 如果发生相交,则返回的数组包含相交点和相交点处的圆柱体法线。
- segment_intersects_segment_2d segment_intersects_segment_2d(from_a: Vector2, to_a: Vector2, from_b: Vector2, to_b: Vector2)
检查两个线段(from_a,to_a)和(from_b,to_b)是否相交。如果是,返回交点Vector2。如果没有交集,则返回空的Variant。
- segment_intersects_sphere segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float)
检查线段(from,to)是否与中心点为sphere_position且半径为sphere_radius的球面相交。如果否,则返回一个空的[Vector3]。 如果是,则返回一个[Vector3],该数组包含相交点和相交点处的球体法线。
- segment_intersects_triangle segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3)
测试线段(from,to)是否与三角形a,b,c相交。如果是,返回交点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。