extends Node # provides all the utility functions for generating # a triangulized Polygon with holes class_name GeoPolyTriangulization # triangles are made by 3 vector const CHUNK_RESULT: int = 3 # the boundary polygon var _outer_polygon: PackedVector2Array # inner polygons (holes) var _inner_polygons: Array[PackedVector2Array] # all vector points defined by outer and inner polygons var vectors: PackedVector2Array = [] var _edge_safety: float = 0.0 func _init(outer_polygon: PackedVector2Array, inner_polygons: Array[PackedVector2Array], edge_safety: float): self._outer_polygon = outer_polygon self._edge_safety = edge_safety # calulate boundary var hole_boundary = Geometry2D.offset_polygon(outer_polygon, self._edge_safety)[0] for ip in inner_polygons: var new_hole = Geometry2D.intersect_polygons(hole_boundary, ip)[0] self._inner_polygons.append(new_hole) self.vectors.append_array(self._outer_polygon) for inner_polygon in self._inner_polygons: self.vectors.append_array(inner_polygon) # returns all triangles generated by ear clipping the outer and inner polygons func triangulate() -> PackedInt32Array: var triag = Triangulization.new() return triag.triangulate_with_holes(self._outer_polygon, self._inner_polygons)