class PColorView extends View { Slice env; Statevar var; int K,M; color[] cmap = warmrainbow(); float dataMin, dataMax; int[] lastKM; boolean selectable = false; float rescaleFactor = 1; String varUnits = ""; PColorView() { shortname = "section"; } PColorView(Slice env, String varname, float dataMin, float dataMax, float rescaleFactor, String newUnits) { this(env, varname, dataMin, dataMax); this.rescaleFactor = rescaleFactor; varUnits = newUnits; } PColorView(Slice env, String varname, float dataMin, float dataMax) { shortname = "section"; this.env = env; this.var = env.getVar(varname); this.K = env.K; this.M = env.M; this.dataMin = dataMin; this.dataMax = dataMax; varUnits = var.units; } void define() { ax.styles = styles; ax.setXRange(env.x_u[0]/1000., env.x_u[M]/1000.); // measure x axis in km ax.setYRange(env.z_w[0], env.z_w[K]); setXLabels(new float[] {env.x_u[0]/1000., env.x_u[M]/1000.}, "km"); setZLabels(new float[] {env.z_w[0], env.z_w[K]}, "m"); ax.largeTopLabel = true; ax.axesOn = false; // adjustments to screen position ax.x0 += 70; ax.wd -= 200; ax.y0 += 50; ax.ht -= 80; if (ax.width()/float(M) > 3 * ax.height()/float(K)) { // if too stretched horizontally: average cell with an aspect ratio > 3:1 ax.wd = ax.height()/float(K) * 3 * M; } ax.createCells(K,M); for (int m=0; m= env.kbot[km[1]]) { pushStyle(); fill(0); styles.setFont(styles.normalFontSize); String value = "" + (round(var.current[env.km2ind(km[0],km[1])]*rescaleFactor*100.)/100.) + " " + varUnits; text(value, mouseX + 4, mouseY - styles.normalFontSize - 4); popStyle(); } } } } boolean offerMousePress() { if (!selectable) return false; for (int m=0; m