0 purchases
dart earcut
dart_earcut #
Ear-clipping (earcutting) triangulation algorithm, ported (with minor API differences) from earcut4j/earcut4j and mapbox/earcut. Also includes the fix from mapbox/earcut#91.
Usage #
2D (x/y) coordinates, without holes
triangulateRaw: expects points in the format [x0, y0, x1, y1, x2, y2, ...]
triangulateFromPoints: expects 'dart:math's Point objects
final triangles = Earcut.triangulateRaw([10,0, 0,50, 60,60, 70,10]);
final triangles = Earcut.triangulateFromPoints([Point(10, 0), Point(0,50), Point(60,60), Point(70,10)]);
// Both return [1,0,3, 3,2,1]
copied to clipboard
Holes
A list of hole indicies, if any. For example, [5, 8] for a 12-vertice input would mean one hole with vertices 5-7 and another with 8-11. If you pass a single vertice as a hole, Earcut treats it as a Steiner point.
final List<int> triangles = Earcut.triangulateRaw([0, 0, 100, 0, 100, 100, 0, 100, 20, 20, 80, 20, 80, 80, 20, 80], holeIndices: [4]);
// Returns [3,0,4, 5,4,0, 3,4,7, 5,0,1, 2,3,7, 6,5,1, 2,7,6, 6,1,2]
copied to clipboard
More dimensions
Expected to be in the format [x0, y0, z0, x1, y1, z1, x2, y2, z2, ...]
final List<int> triangles = Earcut.triangulateRaw([10, 0, 1, 0, 50, 2, 60, 60, 3, 70, 10, 4], dimensions: 3);
// Returns [1,0,3, 3,2,1]
copied to clipboard
The Algorithm #
The library implements a modified ear slicing algorithm, optimized by z-order curve hashing and extended to handle holes, twisted polygons, degeneracies and self-intersections in a way that doesn't guarantee correctness of triangulation, but attempts to always produce acceptable results for practical data.
It's based on ideas from FIST: Fast Industrial-Strength Triangulation of Polygons by Martin Held andTriangulation by Ear Clipping by David Eberly.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.