solidParts property
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)];
}