Cutting Holes Into Mesh
We be cutting holes :)
This commit is contained in:
@@ -14,8 +14,8 @@ var _v_points = []
|
||||
|
||||
var edges = {}
|
||||
|
||||
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")
|
||||
func _init(vector_indexes: PackedInt32Array, vector_points: PackedVector2Array, depth: float = -0.1):
|
||||
assert(len(vector_indexes) % 3 == 0 && len(vector_indexes) != 0, "Number of vertex points is not divisible by 3, invalid triangle verticies")
|
||||
surface_array.resize(Mesh.ARRAY_MAX)
|
||||
|
||||
self._v_indexes = vector_indexes
|
||||
@@ -39,7 +39,6 @@ func calculate_area(mesh_vertices: PackedVector2Array) -> float:
|
||||
|
||||
return result * 0.5
|
||||
|
||||
|
||||
# edges are any verticies that share only on triangle
|
||||
func _pre_process_edges():
|
||||
var faces = UTIL.chunk_array(self._v_indexes, 3)
|
||||
@@ -144,9 +143,6 @@ func _draw_sides(depth: float):
|
||||
var v3 = self._v_points[outline_edges_ordered[outline_vector_ind + 1]]+ Vector3(0, 0, depth)
|
||||
|
||||
var n1 = self._calc_triangle_normal(v2, v1, v0)
|
||||
#
|
||||
#print(v0, ", ", v1, ", ", v2, ", ", v3)
|
||||
#print(n1)
|
||||
|
||||
self.verts.append_array([v0, v1, v2, v1, v3, v2])
|
||||
self.normals.append_array([n1, n1, n1, n1, n1, n1])
|
||||
|
||||
@@ -4,37 +4,8 @@ extends Node
|
||||
# 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:
|
||||
static func triangulate(outer_polygon: PackedVector2Array, inner_polygons: Array[PackedVector2Array]) -> PackedInt32Array:
|
||||
var triag = Triangulization.new()
|
||||
return triag.triangulate_with_holes(self._outer_polygon, self._inner_polygons)
|
||||
var result = triag.triangulate_with_holes(outer_polygon, inner_polygons)
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user