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

Add method bind for `Geometry2D.decompose_polygon_in_convex`
This commit is contained in:
Rémi Verschelde 2022-09-21 13:26:08 +02:00
commit 85a46d36b5
3 changed files with 20 additions and 0 deletions

View file

@ -709,6 +709,17 @@ Vector<Point2> Geometry2D::convex_hull(const Vector<Point2> &p_points) {
return ::Geometry2D::convex_hull(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) { 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); 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_polygon", "polygon"), &Geometry2D::triangulate_polygon);
ClassDB::bind_method(D_METHOD("triangulate_delaunay", "points"), &Geometry2D::triangulate_delaunay); 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("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("merge_polygons", "polygon_a", "polygon_b"), &Geometry2D::merge_polygons);
ClassDB::bind_method(D_METHOD("clip_polygons", "polygon_a", "polygon_b"), &Geometry2D::clip_polygons); ClassDB::bind_method(D_METHOD("clip_polygons", "polygon_a", "polygon_b"), &Geometry2D::clip_polygons);

View file

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

View file

@ -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. 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> </description>
</method> </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"> <method name="exclude_polygons">
<return type="PackedVector2Array[]" /> <return type="PackedVector2Array[]" />
<param index="0" name="polygon_a" type="PackedVector2Array" /> <param index="0" name="polygon_a" type="PackedVector2Array" />