triangulate static method
dynamic
triangulate(
- dynamic data,
- List<num>? holeIndices,
- dynamic dim
)
Implementation
static triangulate(data, List<num>? holeIndices, dim) {
dim = dim ?? 2;
var hasHoles = holeIndices != null && holeIndices.isNotEmpty;
var outerLen = hasHoles ? holeIndices![0] * dim : data.length;
var outerNode = linkedList(data, 0, outerLen, dim, true);
var triangles = [];
if (outerNode == null || outerNode.next == outerNode.prev) return triangles;
var minX, minY, maxX, maxY, x, y, invSize;
if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
if (data.length > 80 * dim) {
minX = maxX = data[0];
minY = maxY = data[1];
for (var i = dim; i < outerLen; i += dim) {
x = data[i];
y = data[i + 1];
if (x < minX) minX = x;
if (y < minY) minY = y;
if (x > maxX) maxX = x;
if (y > maxY) maxY = y;
}
// minX, minY and invSize are later used to transform coords into integers for z-order calculation
invSize = Math.max<num>(maxX - minX, maxY - minY);
invSize = invSize != 0 ? 1 / invSize : 0;
}
earcutLinked(outerNode, triangles, dim, minX, minY, invSize, null);
return triangles;
}