Example #1
0
  private void updateClips() {
    if (_clipsDirty && _usePercentiles) {
      boolean clipsComputed = false;

      // If we just need min and max values, ...
      if (_percMin == 0.0f && _percMax == 100.0f) {
        if (_f instanceof float[]) {
          float[] a = (float[]) _f;
          _clipMin = min(a);
          _clipMax = max(a);
          clipsComputed = true;
        } else if (_f instanceof float[][]) {
          float[][] a = (float[][]) _f;
          _clipMin = min(a);
          _clipMax = max(a);
          clipsComputed = true;
        } else if (_f instanceof float[][][]) {
          float[][][] a = (float[][][]) _f;
          _clipMin = min(a);
          _clipMax = max(a);
          clipsComputed = true;
        } else if (_f instanceof Float3) {
          Float3 f3 = (Float3) _f;
          int n1 = f3.getN1();
          int n2 = f3.getN2();
          int n3 = f3.getN3();
          float[][] a = new float[n2][n1];
          for (int i3 = 0; i3 < n3; ++i3) {
            f3.get12(n1, n2, 0, 0, i3, a);
            _clipMin = min(_clipMin, min(a));
            _clipMax = max(_clipMax, max(a));
          }
          clipsComputed = true;
        }
      }

      // Else if we must compute percentiles, ...
      else {
        float[] a = null;
        if (_f instanceof float[]) {
          a = copy((float[]) _f);
        } else if (_f instanceof float[][]) {
          a = flatten((float[][]) _f);
        } else if (_f instanceof float[][][]) {
          a = flatten((float[][][]) _f);
        } else if (_f instanceof Float3) {
          Float3 f3 = (Float3) _f;
          int n1 = f3.getN1();
          int n2 = f3.getN2();
          int n3 = f3.getN3();
          a = new float[n1 * n2 * n3];
          f3.get123(n1, n2, n3, 0, 0, 0, a);
        }
        if (a != null) {
          int n = a.length;
          int kmin = (int) rint(_percMin * 0.01 * (n - 1));
          if (kmin <= 0) {
            _clipMin = min(a);
          } else {
            quickPartialSort(kmin, a);
            _clipMin = a[kmin];
          }
          int kmax = (int) rint(_percMax * 0.01 * (n - 1));
          if (kmax >= n - 1) {
            _clipMax = max(a);
          } else {
            quickPartialSort(kmax, a);
            _clipMax = a[kmax];
          }
          clipsComputed = true;
        }
      }

      // If clips were computed, make them valid and not dirty.
      if (clipsComputed) {
        makeClipsValid();
        _clipsDirty = false;
      }
    }
  }