triangulate static method

dynamic triangulate(
  1. dynamic data,
  2. List<num>? holeIndices,
  3. 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;
}