solidParts property

  1. @override
List<SolidPart> get solidParts
override

One piece when the outline is convex, else one per convex part of it.

Implementation

@override
List<SolidPart> get solidParts {
  final outline = _outline;
  if (outline.length < 3) return const [];
  final hy = Primitive3D.size(height) / 2;
  SolidHull hull(Iterable<(double, double)> corners) => SolidHull(
    Float32List.fromList([
      for (final (x, z) in corners) ...[x, -hy, z, x, hy, z],
    ]),
  );
  if (Outline.isConvex(outline)) return [hull(outline)];
  return [
    for (final part in Outline.convexParts(
      outline,
      Outline.triangulate(outline),
    ))
      hull([for (final i in part) outline[i]]),
  ];
}