| Clazz.declarePackage ("JSV.common"); | |
| Clazz.load (["JSV.common.XYScaleConverter"], "JSV.common.ImageView", ["java.lang.Double", "JSV.common.Coordinate", "$.ScaleData"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.buf2d = null; | |
| this.grayFactorLast = 0; | |
| this.averageGray = 0; | |
| this.xPixel0 = 0; | |
| this.yPixel0 = 0; | |
| this.xPixel1 = 0; | |
| this.yPixel1 = 0; | |
| this.imageWidth = 0; | |
| this.imageHeight = 0; | |
| this.xPixels = 0; | |
| this.yPixels = 0; | |
| this.xPixelZoom1 = 0; | |
| this.yPixelZoom1 = 0; | |
| this.xPixelZoom2 = 0; | |
| this.yPixelZoom2 = 0; | |
| this.xView1 = 0; | |
| this.yView1 = 0; | |
| this.xView2 = 0; | |
| this.yView2 = 0; | |
| this.minX = NaN; | |
| this.maxX = 0; | |
| this.minY = 0; | |
| this.maxY = 0; | |
| this.minZ = 0; | |
| this.maxZ = 0; | |
| this.scaleData = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JSV.common, "ImageView", null, JSV.common.XYScaleConverter); | |
| Clazz.defineMethod (c$, "set", | |
| function (view) { | |
| if (Double.isNaN (this.minX)) { | |
| this.minX = view.minX; | |
| this.maxX = view.maxX; | |
| }this.minZ = view.minY; | |
| this.maxZ = view.maxY; | |
| this.scaleData = new JSV.common.ScaleData (); | |
| }, "JSV.common.ScaleData"); | |
| Clazz.defineMethod (c$, "setZoom", | |
| function (xPixel1, yPixel1, xPixel2, yPixel2) { | |
| this.xPixelZoom1 = Math.min (xPixel1, xPixel2); | |
| this.yPixelZoom1 = Math.min (yPixel1, yPixel2); | |
| this.xPixelZoom2 = Math.max (xPixel1, xPixel2); | |
| this.yPixelZoom2 = Math.max (yPixel1, yPixel2); | |
| this.setView (); | |
| }, "~N,~N,~N,~N"); | |
| Clazz.defineMethod (c$, "setXY0", | |
| function (spec, xPixel, yPixel) { | |
| this.xPixel0 = xPixel; | |
| this.yPixel0 = yPixel; | |
| this.xPixel1 = this.xPixel0 + this.xPixels - 1; | |
| this.yPixel1 = this.yPixel0 + this.yPixels - 1; | |
| this.setMinMaxY (spec); | |
| }, "JSV.common.Spectrum,~N,~N"); | |
| Clazz.defineMethod (c$, "setPixelWidthHeight", | |
| function (xPixels, yPixels) { | |
| this.xPixels = xPixels; | |
| this.yPixels = yPixels; | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "resetView", | |
| function () { | |
| this.xView1 = 0; | |
| this.yView1 = 0; | |
| this.xView2 = this.imageWidth - 1; | |
| this.yView2 = this.imageHeight - 1; | |
| }); | |
| Clazz.defineMethod (c$, "setView", | |
| function () { | |
| if (this.xPixelZoom1 == 0) this.resetZoom (); | |
| var x1 = this.toImageX (this.xPixelZoom1); | |
| var y1 = this.toImageY (this.yPixelZoom1); | |
| var x2 = this.toImageX (this.xPixelZoom2); | |
| var y2 = this.toImageY (this.yPixelZoom2); | |
| this.xView1 = Math.min (x1, x2); | |
| this.yView1 = Math.min (y1, y2); | |
| this.xView2 = Math.max (x1, x2); | |
| this.yView2 = Math.max (y1, y2); | |
| this.setScaleData (); | |
| this.resetZoom (); | |
| }); | |
| Clazz.defineMethod (c$, "resetZoom", | |
| function () { | |
| this.xPixelZoom1 = this.xPixel0; | |
| this.yPixelZoom1 = this.yPixel0; | |
| this.xPixelZoom2 = this.xPixel1; | |
| this.yPixelZoom2 = this.yPixel1; | |
| }); | |
| Clazz.defineMethod (c$, "toImageX", | |
| function (xPixel) { | |
| return this.xView1 + Clazz.doubleToInt (Math.floor ((xPixel - this.xPixel0) / (this.xPixels - 1.0) * (this.xView2 - this.xView1))); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toImageY", | |
| function (yPixel) { | |
| return this.yView1 + Clazz.doubleToInt (Math.floor ((yPixel - this.yPixel0) / (this.yPixels - 1.0) * (this.yView2 - this.yView1))); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toImageX0", | |
| function (xPixel) { | |
| return JSV.common.Coordinate.intoRange (Clazz.doubleToInt ((1.0 * xPixel - this.xPixel0) / (this.xPixels - 1) * (this.imageWidth - 1)), 0, this.imageWidth - 1); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toImageY0", | |
| function (yPixel) { | |
| return JSV.common.Coordinate.intoRange (Clazz.doubleToInt ((1.0 * yPixel - this.yPixel0) / (this.yPixels - 1) * (this.imageHeight - 1)), 0, this.imageHeight - 1); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "isXWithinRange", | |
| function (xPixel) { | |
| return (xPixel >= this.xPixel0 - 5 && xPixel < this.xPixel0 + this.xPixels + 5); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toSubspectrumIndex", | |
| function (yPixel) { | |
| return JSV.common.Coordinate.intoRange (this.imageHeight - 1 - this.toImageY (yPixel), 0, this.imageHeight - 1); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toX0", | |
| function (xPixel) { | |
| return this.maxX + (this.minX - this.maxX) * (this.fixX (xPixel) - this.xPixel0) / (this.xPixels - 1); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toPixelX0", | |
| function (x) { | |
| return this.xPixel1 - Clazz.doubleToInt ((x - this.minX) / (this.maxX - this.minX) * (this.xPixels - 1)); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "toPixelY0", | |
| function (ysub) { | |
| return this.yPixel1 - Clazz.doubleToInt (ysub / (this.imageHeight - 1) * (this.yPixels - 1)); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "subIndexToPixelY", | |
| function (subIndex) { | |
| var f = 1.0 * (this.imageHeight - 1 - subIndex - this.yView1) / (this.yView2 - this.yView1); | |
| var y = this.yPixel0 + Clazz.doubleToInt (f * (this.yPixels - 1)); | |
| return y; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "fixSubIndex", | |
| function (subIndex) { | |
| return JSV.common.Coordinate.intoRange (subIndex, this.imageHeight - 1 - this.yView2, this.imageHeight - 1 - this.yView1); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "setView0", | |
| function (xp1, yp1, xp2, yp2) { | |
| var x1 = this.toImageX0 (xp1); | |
| var y1 = this.toImageY0 (yp1); | |
| var x2 = this.toImageX0 (xp2); | |
| var y2 = this.toImageY0 (yp2); | |
| this.xView1 = Math.min (x1, x2); | |
| this.yView1 = Math.min (y1, y2); | |
| this.xView2 = Math.max (x1, x2); | |
| this.yView2 = Math.max (y1, y2); | |
| this.resetZoom (); | |
| }, "~N,~N,~N,~N"); | |
| Clazz.defineMethod (c$, "get2dBuffer", | |
| function (spec, forceNew) { | |
| var subSpectra = spec.getSubSpectra (); | |
| if (subSpectra == null || !subSpectra.get (0).isContinuous ()) return null; | |
| var xyCoords = spec.getXYCoords (); | |
| var nSpec = subSpectra.size (); | |
| this.imageWidth = xyCoords.length; | |
| this.imageHeight = nSpec; | |
| var grayFactor = 255 / (this.maxZ - this.minZ); | |
| if (!forceNew && this.buf2d != null && grayFactor == this.grayFactorLast) return this.buf2d; | |
| this.grayFactorLast = grayFactor; | |
| var pt = this.imageWidth * this.imageHeight; | |
| var buf = (this.buf2d == null || this.buf2d.length != pt ? Clazz.newIntArray (pt, 0) : this.buf2d); | |
| var totalGray = 0; | |
| for (var i = 0; i < nSpec; i++) { | |
| var points = subSpectra.get (i).xyCoords; | |
| if (points.length != xyCoords.length) return null; | |
| for (var j = 0; j < xyCoords.length; j++) { | |
| var y = points[j].getYVal (); | |
| var gray = 255 - JSV.common.Coordinate.intoRange (Clazz.doubleToInt ((y - this.minZ) * grayFactor), 0, 255); | |
| buf[--pt] = gray; | |
| totalGray += gray; | |
| } | |
| } | |
| this.averageGray = (1 - totalGray / (this.imageWidth * this.imageHeight) / 255); | |
| System.out.println ("Average gray = " + this.averageGray); | |
| return (this.buf2d = buf); | |
| }, "JSV.common.Spectrum,~B"); | |
| Clazz.defineMethod (c$, "adjustView", | |
| function (spec, view) { | |
| var i = 0; | |
| var isLow = false; | |
| while (((isLow = (this.averageGray < 0.05)) || this.averageGray > 0.3) && i++ < 10) { | |
| view.scaleSpectrum (-2, isLow ? 2 : 0.5); | |
| this.set (view.getScale ()); | |
| this.get2dBuffer (spec, false); | |
| } | |
| return this.buf2d; | |
| }, "JSV.common.Spectrum,JSV.common.ViewData"); | |
| Clazz.defineMethod (c$, "getBuffer", | |
| function () { | |
| return this.buf2d; | |
| }); | |
| Clazz.defineMethod (c$, "setMinMaxY", | |
| function (spec) { | |
| var subSpectra = spec.getSubSpectra (); | |
| var spec0 = subSpectra.get (0); | |
| this.maxY = spec0.getY2D (); | |
| this.minY = subSpectra.get (subSpectra.size () - 1).getY2D (); | |
| if (spec0.y2DUnits.equalsIgnoreCase ("Hz")) { | |
| this.maxY /= spec0.freq2dY; | |
| this.minY /= spec0.freq2dY; | |
| }this.setScaleData (); | |
| }, "JSV.common.Spectrum"); | |
| Clazz.defineMethod (c$, "setScaleData", | |
| function () { | |
| this.scaleData.minY = this.minY; | |
| this.scaleData.maxY = this.maxY; | |
| this.scaleData.setYScale (this.toY (this.yPixel0), this.toY (this.yPixel1), false, false); | |
| }); | |
| Clazz.overrideMethod (c$, "fixX", | |
| function (xPixel) { | |
| return (xPixel < this.xPixel0 ? this.xPixel0 : xPixel > this.xPixel1 ? this.xPixel1 : xPixel); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "fixY", | |
| function (yPixel) { | |
| return JSV.common.Coordinate.intoRange (yPixel, this.yPixel0, this.yPixel1); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "getScale", | |
| function () { | |
| return this.scaleData; | |
| }); | |
| Clazz.overrideMethod (c$, "toX", | |
| function (xPixel) { | |
| return this.maxX + (this.minX - this.maxX) * this.toImageX (this.fixX (xPixel)) / (this.imageWidth - 1); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "toY", | |
| function (yPixel) { | |
| var isub = this.toSubspectrumIndex (yPixel); | |
| return this.maxY + (this.minY - this.maxY) * isub / (this.imageHeight - 1); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "toPixelX", | |
| function (x) { | |
| var x0 = this.toX (this.xPixel0); | |
| var x1 = this.toX (this.xPixel1); | |
| return this.xPixel0 + Clazz.doubleToInt ((x - x0) / (x1 - x0) * (this.xPixels - 1)); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "toPixelY", | |
| function (y) { | |
| var f = (y - this.scaleData.minYOnScale) / (this.scaleData.maxYOnScale - this.scaleData.minYOnScale); | |
| return Clazz.doubleToInt (this.yPixel0 + f * this.yPixels); | |
| }, "~N"); | |
| Clazz.overrideMethod (c$, "getXPixels", | |
| function () { | |
| return this.xPixels; | |
| }); | |
| Clazz.overrideMethod (c$, "getYPixels", | |
| function () { | |
| return this.yPixels; | |
| }); | |
| Clazz.overrideMethod (c$, "getXPixel0", | |
| function () { | |
| return this.xPixel0; | |
| }); | |
| Clazz.defineStatics (c$, | |
| "DEFAULT_MIN_GRAY", 0.05, | |
| "DEFAULT_MAX_GRAY", 0.30); | |
| }); | |