computeBoundingBox method

void computeBoundingBox()

Implementation

void computeBoundingBox() {
  boundingBox ??= Box3(null, null);

  var position = attributes["position"];
  var morphAttributesPosition = morphAttributes["position"];

  if (position != null && position is GLBufferAttribute) {
    print(
        'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false". ${this}');

    double Infinity = 9999999999.0;

    boundingBox!.set(Vector3(-Infinity, -Infinity, -Infinity),
        Vector3(Infinity, Infinity, Infinity));

    return;
  }

  if (position != null) {
    boundingBox!.setFromBufferAttribute(position);

    // process morph attributes if present

    if (morphAttributesPosition != null) {
      for (var i = 0, il = morphAttributesPosition.length; i < il; i++) {
        var morphAttribute = morphAttributesPosition[i];
        _bufferGeometrybox.setFromBufferAttribute(morphAttribute);

        if (morphTargetsRelative) {
          _bufferGeometryvector.addVectors(
              boundingBox!.min, _bufferGeometrybox.min);
          boundingBox!.expandByPoint(_bufferGeometryvector);

          _bufferGeometryvector.addVectors(
              boundingBox!.max, _bufferGeometrybox.max);
          boundingBox!.expandByPoint(_bufferGeometryvector);
        } else {
          boundingBox!.expandByPoint(_bufferGeometrybox.min);
          boundingBox!.expandByPoint(_bufferGeometrybox.max);
        }
      }
    }
  } else {
    boundingBox!.makeEmpty();
  }

  // if (boundingBox!.min.x == null ||
  //     boundingBox!.min.y == null ||
  //     boundingBox!.min.z == null) {
  //   print(
  //       'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values. ${this}');
  // }
}