瀏覽代碼

Merge pull request #66096 from 4d49/decompose-polygon-in-convex

Add method bind for `Geometry2D.decompose_polygon_in_convex`
Rémi Verschelde 3 年之前
父節點
當前提交
85a46d36b5
共有 3 個文件被更改,包括 20 次插入0 次删除
  1. 12 0
      core/core_bind.cpp
  2. 1 0
      core/core_bind.h
  3. 7 0
      doc/classes/Geometry2D.xml

+ 12 - 0
core/core_bind.cpp

@@ -709,6 +709,17 @@ Vector<Point2> Geometry2D::convex_hull(const Vector<Point2> &p_points) {
 	return ::Geometry2D::convex_hull(p_points);
 }
 
+TypedArray<PackedVector2Array> Geometry2D::decompose_polygon_in_convex(const Vector<Vector2> &p_polygon) {
+	Vector<Vector<Point2>> decomp = ::Geometry2D::decompose_polygon_in_convex(p_polygon);
+
+	TypedArray<PackedVector2Array> ret;
+
+	for (int i = 0; i < decomp.size(); ++i) {
+		ret.push_back(decomp[i]);
+	}
+	return ret;
+}
+
 TypedArray<PackedVector2Array> Geometry2D::merge_polygons(const Vector<Vector2> &p_polygon_a, const Vector<Vector2> &p_polygon_b) {
 	Vector<Vector<Point2>> polys = ::Geometry2D::merge_polygons(p_polygon_a, p_polygon_b);
 
@@ -840,6 +851,7 @@ void Geometry2D::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("triangulate_polygon", "polygon"), &Geometry2D::triangulate_polygon);
 	ClassDB::bind_method(D_METHOD("triangulate_delaunay", "points"), &Geometry2D::triangulate_delaunay);
 	ClassDB::bind_method(D_METHOD("convex_hull", "points"), &Geometry2D::convex_hull);
+	ClassDB::bind_method(D_METHOD("decompose_polygon_in_convex", "polygon"), &Geometry2D::decompose_polygon_in_convex);
 
 	ClassDB::bind_method(D_METHOD("merge_polygons", "polygon_a", "polygon_b"), &Geometry2D::merge_polygons);
 	ClassDB::bind_method(D_METHOD("clip_polygons", "polygon_a", "polygon_b"), &Geometry2D::clip_polygons);

+ 1 - 0
core/core_bind.h

@@ -289,6 +289,7 @@ public:
 	Vector<int> triangulate_polygon(const Vector<Vector2> &p_polygon);
 	Vector<int> triangulate_delaunay(const Vector<Vector2> &p_points);
 	Vector<Point2> convex_hull(const Vector<Point2> &p_points);
+	TypedArray<PackedVector2Array> decompose_polygon_in_convex(const Vector<Vector2> &p_polygon);
 
 	enum PolyBooleanOperation {
 		OPERATION_UNION,

+ 7 - 0
doc/classes/Geometry2D.xml

@@ -33,6 +33,13 @@
 				Given an array of [Vector2]s, returns the convex hull as a list of points in counterclockwise order. The last point is the same as the first one.
 			</description>
 		</method>
+		<method name="decompose_polygon_in_convex">
+			<return type="PackedVector2Array[]" />
+			<param index="0" name="polygon" type="PackedVector2Array" />
+			<description>
+				Decomposes the [param polygon] into multiple convex hulls and returns an array of [PackedVector2Array].
+			</description>
+		</method>
 		<method name="exclude_polygons">
 			<return type="PackedVector2Array[]" />
 			<param index="0" name="polygon_a" type="PackedVector2Array" />