solidParts property

  1. @override
List<SolidPart> get solidParts
override

One piece per step round the ring (at most 24): the hull of the tube where the step begins and ends.

Implementation

@override
List<SolidPart> get solidParts {
  final big = Primitive3D.size(radius), r = Primitive3D.size(tubeRadius);
  final s = Primitive3D.count(segments, 3, 24);
  final t = Primitive3D.count(sides, 3, 12);
  SolidHull piece(int i) {
    final points = Float32List(t * 6);
    var o = 0;
    for (final step in [i, i + 1]) {
      final a = 2 * math.pi * step / s;
      for (var k = 0; k < t; k++) {
        final b = 2 * math.pi * k / t;
        final rho = big + r * math.cos(b);
        points
          ..[o++] = rho * math.cos(a)
          ..[o++] = -r * math.sin(b)
          ..[o++] = rho * math.sin(a);
      }
    }
    return SolidHull(points);
  }

  return [for (var i = 0; i < s; i++) piece(i)];
}