Modify Earcut and Triangulization Library to Work With Godot::Vector2
Allows use to ease some pain when converting PackedVector2Array to std::vector<Vector2>.
This commit is contained in:
@@ -14,20 +14,6 @@ var _v_points = []
|
||||
|
||||
var edges = {}
|
||||
|
||||
# returns debug lines to be drawn by callers DrawDebug3D
|
||||
#var _debug_lines: Array[PackedVector3Array]:
|
||||
#get:
|
||||
#if !_debug_lines:
|
||||
#for results in self._triangles:
|
||||
#var triangle_lines: PackedVector3Array = []
|
||||
#for vector_index in range(len(results)):
|
||||
#var v1: Vector2 = results[vector_index]
|
||||
#var v2: Vector2 = results[(vector_index+1) % CHUNK_RESULT]
|
||||
#triangle_lines.append(Vector3(v1.x, v1.y, 0))
|
||||
#triangle_lines.append(Vector3(v2.x, v2.y, 0))
|
||||
#_debug_lines.push_back(triangle_lines)
|
||||
#return _debug_lines
|
||||
|
||||
func _init(vector_indexes: PackedInt32Array, vector_points: PackedVector2Array, depth: float = -2.0):
|
||||
assert(len(vector_indexes) % 3 == 0, "Number of vertex points is not divisible by 3, invalid triangle verticies")
|
||||
surface_array.resize(Mesh.ARRAY_MAX)
|
||||
|
||||
@@ -8,35 +8,31 @@ class_name GeoPolyTriangulization
|
||||
const CHUNK_RESULT: int = 3
|
||||
|
||||
# the boundary polygon
|
||||
var _outer_polygon: Polygon2D
|
||||
var _outer_polygon: PackedVector2Array
|
||||
|
||||
# inner polygons (holes)
|
||||
var _inner_polygons: Array[Polygon2D]
|
||||
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: Polygon2D, inner_polygons: Array[Polygon2D], edge_safety: float):
|
||||
func _init(outer_polygon: PackedVector2Array, inner_polygons: Array[PackedVector2Array], edge_safety: float):
|
||||
self._outer_polygon = outer_polygon
|
||||
self._inner_polygons = inner_polygons
|
||||
self._edge_safety = edge_safety
|
||||
|
||||
# create a polygon that will be used to intesect the hole and control where they can destoy the wall
|
||||
var intersect_polygon = Polygon2D.new()
|
||||
# calulate the new smaller polygon
|
||||
intersect_polygon.polygon = Geometry2D.offset_polygon(outer_polygon.polygon, self._edge_safety)[0]
|
||||
print(intersect_polygon.polygon)
|
||||
|
||||
# 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(intersect_polygon.polygon, ip.polygon)[0]
|
||||
ip.polygon = new_hole
|
||||
var new_hole = Geometry2D.intersect_polygons(hole_boundary, ip)[0]
|
||||
self._inner_polygons.append(new_hole)
|
||||
|
||||
self.vectors.append_array(self._outer_polygon.polygon)
|
||||
self.vectors.append_array(self._outer_polygon)
|
||||
|
||||
for inner_polygon in self._inner_polygons:
|
||||
self.vectors.append_array(inner_polygon.polygon)
|
||||
self.vectors.append_array(inner_polygon)
|
||||
|
||||
# returns all triangles generated by ear clipping the outer and inner polygons
|
||||
func triangulate() -> PackedInt32Array:
|
||||
|
||||
Reference in New Issue
Block a user