computeBoundingSphere method

void computeBoundingSphere()
override

Implementation

computeBoundingSphere() {
  var vector = new Vector3.init();

  if (this.boundingSphere == null) {
    this.boundingSphere = new Sphere(null, null);
  }

  if (this.boundingBox == null) {
    this.computeBoundingBox();
  }

  var start = this.attributes["instanceStart"];
  var end = this.attributes["instanceEnd"];

  if (start != null && end != null) {
    var center = this.boundingSphere!.center;

    this.boundingBox!.getCenter(center);

    num maxRadiusSq = 0;

    for (var i = 0, il = start.count; i < il; i++) {
      vector.fromBufferAttribute(start, i);
      maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(vector));

      vector.fromBufferAttribute(end, i);
      maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(vector));
    }

    this.boundingSphere!.radius = Math.sqrt(maxRadiusSq);

    if (this.boundingSphere!.radius == null) {
      print(
          'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values. ${this}');
    }
  }
}