triangulateShape static method

dynamic triangulateShape(
  1. dynamic contour,
  2. dynamic holes
)

Implementation

static triangulateShape(contour, holes) {
  var vertices =
      []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]
  List<num> holeIndices = []; // array of hole indices
  var faces =
      []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]

  removeDupEndPts(contour);
  addContour(vertices, contour);

  //

  var holeIndex = contour.length;

  holes.forEach(removeDupEndPts);

  for (var i = 0; i < holes.length; i++) {
    holeIndices.add(holeIndex);
    holeIndex += holes[i].length;
    addContour(vertices, holes[i]);
  }

  //

  var triangles = Earcut.triangulate(vertices, holeIndices, null);

  //

  for (var i = 0; i < triangles.length; i += 3) {
    faces.add(triangles.sublist(i, i + 3));
  }

  return faces;
}