/** Updates the contour data my directly copying values. */ void updateDirect(GridData griddata) { if (griddata == null) { return; } if (autoscaleZ) { double[] minmax = griddata.getZRange(ampIndex); zmax = minmax[1]; zmin = minmax[0]; if (zMap != null) { zMap.setMinMax(zmin, zmax); } colorMap.setScale(zmin, zmax); } if (griddata instanceof ArrayData) { double[][] arrayData = griddata.getData()[ampIndex]; for (int i = 0; i < nx; i++) { // copy the rows System.arraycopy(arrayData[i], 0, internalData[i], 0, ny); if (zMap != null) { for (int j = 0; j < ny; j++) { internalData[i][j] = zMap.evaluate(internalData[i][j]); } } } } else if (griddata instanceof GridPointData) { double[][][] ptdata = griddata.getData(); for (int i = 0, nx = ptdata.length; i < nx; i++) { for (int j = 0, ny = ptdata[0].length; j < ny; j++) { internalData[i][j] = ptdata[i][j][2 + ampIndex]; if (zMap != null) { internalData[i][j] = zMap.evaluate(internalData[i][j]); } } } } }
/** * Expands the z scale so as to enhance values close to zero. * * @param expanded boolean * @param expansionFactor double */ public void setExpandedZ(boolean expanded, double expansionFactor) { if (expanded && (expansionFactor > 0)) { zMap = new ZExpansion(expansionFactor); zMap.setMinMax(zmin, zmax); } else { zMap = null; } }
/** * Sets the autoscale flag and the floor and ceiling values. * * <p>If autoscaling is true, then the min and max values of z are set using the data. If * autoscaling is false, then floor and ceiling values become the max and min. Values below min * map to the first color; values above max map to the last color. * * @param isAutoscale * @param floor * @param ceil */ public void setAutoscaleZ(boolean isAutoscale, double floor, double ceil) { autoscaleZ = isAutoscale; if (autoscaleZ) { update(); } else { zmax = ceil; zmin = floor; if (zMap != null) { zMap.setMinMax(zmin, zmax); } colorMap.setScale(zmin, zmax); } }
/** Updates the internal data by interpolating large grids onto a smaller array. */ void updateInterpolated(GridData griddata) { if (autoscaleZ) { double[] minmax = griddata.getZRange(ampIndex); zmax = minmax[1]; zmin = minmax[0]; if (zMap != null) { zMap.setMinMax(zmin, zmax); } colorMap.setScale(zmin, zmax); } double x = griddata.getLeft(), dx = (griddata.getRight() - griddata.getLeft()) / (nx - 1); double y = griddata.getTop(), dy = -(griddata.getTop() - griddata.getBottom()) / (ny - 1); for (int i = 0; i < nx; i++) { y = griddata.getTop(); for (int j = 0; j < ny; j++) { internalData[i][j] = griddata.interpolate(x, y, ampIndex); if (zMap != null) { internalData[i][j] = zMap.evaluate(internalData[i][j]); } y += dy; } x += dx; } }