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; } } }