Clazz.declarePackage ("J.render"); Clazz.load (["J.render.ShapeRenderer", "JU.P3", "$.P3i", "$.V3"], "J.render.FontLineShapeRenderer", ["java.lang.Float", "JU.PT"], function () { c$ = Clazz.decorateAsClass (function () { this.imageFontScaling = 0; this.tickA = null; this.tickB = null; this.tickAs = null; this.tickBs = null; this.font3d = null; this.pt0i = null; this.pt2i = null; this.s1 = null; this.s2 = null; this.pointT = null; this.pointT2 = null; this.pointT3 = null; this.vectorT = null; this.vectorT2 = null; this.vectorT3 = null; this.tickInfo = null; this.draw000 = true; this.width = 0; this.endcap = 3; this.pt0 = null; this.pt1 = null; this.colixA = 0; this.colixB = 0; this.dotsOrDashes = false; this.dashDots = null; this.asLineOnly = false; Clazz.instantialize (this, arguments); }, J.render, "FontLineShapeRenderer", J.render.ShapeRenderer); Clazz.prepareFields (c$, function () { this.pt0i = new JU.P3i (); this.pt2i = new JU.P3i (); this.s1 = new JU.P3i (); this.s2 = new JU.P3i (); this.pointT = new JU.P3 (); this.pointT2 = new JU.P3 (); this.pointT3 = new JU.P3 (); this.vectorT = new JU.V3 (); this.vectorT2 = new JU.V3 (); this.vectorT3 = new JU.V3 (); this.pt0 = new JU.P3 (); this.pt1 = new JU.P3 (); }); Clazz.defineMethod (c$, "getDiameter", function (z, mad10OrPixels) { var diameter; var isMad10 = (mad10OrPixels > 20); switch (this.exportType) { case 1: diameter = (isMad10 ? mad10OrPixels : Clazz.doubleToInt (Math.floor (this.vwr.tm.unscaleToScreen (z, mad10OrPixels * 2 / 10) * 1000))); break; default: if (isMad10) { diameter = Clazz.floatToInt (this.vwr.tm.scaleToScreen (z, Clazz.doubleToInt (mad10OrPixels / 10))); } else { if (this.g3d.isAntialiased ()) mad10OrPixels += mad10OrPixels; diameter = mad10OrPixels; }} return diameter; }, "~N,~N"); Clazz.defineMethod (c$, "renderLine", function (p0, p1, diameter, drawTicks) { if (diameter < 0) this.g3d.drawDashedLineBits (8, 4, p0, p1); else this.g3d.fillCylinderBits (this.endcap, diameter, p0, p1); if (!drawTicks || this.tickInfo == null) return; this.checkTickTemps (); this.tickAs.setT (p0); this.tickBs.setT (p1); this.drawTicks (diameter, true); }, "JU.P3,JU.P3,~N,~B"); Clazz.defineMethod (c$, "checkTickTemps", function () { if (this.tickA == null) { this.tickA = new JU.P3 (); this.tickB = new JU.P3 (); this.tickAs = new JU.P3 (); this.tickBs = new JU.P3 (); }}); Clazz.defineMethod (c$, "drawTicks", function (diameter, withLabels) { if (Float.isNaN (this.tickInfo.first)) this.tickInfo.first = 0; this.drawTicks2 (this.tickInfo.ticks.x, 8, diameter, (!withLabels ? null : this.tickInfo.tickLabelFormats == null ? Clazz.newArray (-1, ["%0.2f"]) : this.tickInfo.tickLabelFormats)); this.drawTicks2 (this.tickInfo.ticks.y, 4, diameter, null); this.drawTicks2 (this.tickInfo.ticks.z, 2, diameter, null); }, "~N,~B"); Clazz.defineMethod (c$, "drawTicks2", function (dx, length, diameter, formats) { if (dx == 0) return; if (this.g3d.isAntialiased ()) length *= 2; this.vectorT2.set (this.tickBs.x, this.tickBs.y, 0); this.vectorT.set (this.tickAs.x, this.tickAs.y, 0); this.vectorT2.sub (this.vectorT); if (this.vectorT2.length () < 50) return; var signFactor = this.tickInfo.signFactor; this.vectorT.sub2 (this.tickB, this.tickA); var d0 = this.vectorT.length (); if (this.tickInfo.scale != null) { if (Float.isNaN (this.tickInfo.scale.x)) { var a = this.vwr.getUnitCellInfo (0); if (!Float.isNaN (a)) this.vectorT.set (this.vectorT.x / a, this.vectorT.y / this.vwr.getUnitCellInfo (1), this.vectorT.z / this.vwr.getUnitCellInfo (2)); } else { this.vectorT.set (this.vectorT.x * this.tickInfo.scale.x, this.vectorT.y * this.tickInfo.scale.y, this.vectorT.z * this.tickInfo.scale.z); }}var d = this.vectorT.length () + 0.0001 * dx; if (d < dx) return; var f = dx / d * d0 / d; this.vectorT.scale (f); var dz = (this.tickBs.z - this.tickAs.z) / (d / dx); d += this.tickInfo.first; var p = (Clazz.doubleToInt (Math.floor (this.tickInfo.first / dx))) * dx - this.tickInfo.first; this.pointT.scaleAdd2 (p / dx, this.vectorT, this.tickA); p += this.tickInfo.first; var z = this.tickAs.z; if (diameter < 0) diameter = 1; this.vectorT2.set (-this.vectorT2.y, this.vectorT2.x, 0); this.vectorT2.scale (length / this.vectorT2.length ()); var ptRef = this.tickInfo.reference; if (ptRef == null) { this.pointT3.setT (this.vwr.getBoundBoxCenter ()); if (this.vwr.g.axesMode == 603979809) { this.pointT3.add3 (1, 1, 1); }} else { this.pointT3.setT (ptRef); }this.tm.transformPtScr (this.pointT3, this.pt2i); var horizontal = (Math.abs (this.vectorT2.x / this.vectorT2.y) < 0.2); var centerX = horizontal; var centerY = !horizontal; var rightJustify = !centerX && (this.vectorT2.x < 0); var drawLabel = (formats != null && formats.length > 0); var x; var y; var val = new Array (1); var i = (this.draw000 ? 0 : -1); while (p < d) { if (p >= this.tickInfo.first) { this.pointT2.setT (this.pointT); this.tm.transformPt3f (this.pointT2, this.pointT2); this.drawLine (Clazz.doubleToInt (Math.floor (this.pointT2.x)), Clazz.doubleToInt (Math.floor (this.pointT2.y)), Clazz.floatToInt (z), (x = Clazz.doubleToInt (Math.floor (this.pointT2.x + this.vectorT2.x))), (y = Clazz.doubleToInt (Math.floor (this.pointT2.y + this.vectorT2.y))), Clazz.floatToInt (z), diameter); if (drawLabel && (this.draw000 || p != 0)) { val[0] = Float.$valueOf ((p == 0 ? 0 : p * signFactor)); var s = JU.PT.sprintf (formats[i % formats.length], "f", val); this.drawString (x, y, Clazz.floatToInt (z), 4, rightJustify, centerX, centerY, Clazz.doubleToInt (Math.floor (this.pointT2.y)), s); }}this.pointT.add (this.vectorT); p += dx; z += dz; i++; } }, "~N,~N,~N,~A"); Clazz.defineMethod (c$, "drawLine", function (x1, y1, z1, x2, y2, z2, diameter) { return this.drawLine2 (x1, y1, z1, x2, y2, z2, diameter); }, "~N,~N,~N,~N,~N,~N,~N"); Clazz.defineMethod (c$, "drawLine2", function (x1, y1, z1, x2, y2, z2, diameter) { this.pt0.set (x1, y1, z1); this.pt1.set (x2, y2, z2); if (this.dotsOrDashes) { if (this.dashDots != null) this.drawDashed (x1, y1, z1, x2, y2, z2, this.dashDots); } else { if (diameter < 0) { this.g3d.drawDashedLineBits (8, 4, this.pt0, this.pt1); return 1; }this.g3d.fillCylinderBits (2, diameter, this.pt0, this.pt1); }return Clazz.doubleToInt ((diameter + 1) / 2); }, "~N,~N,~N,~N,~N,~N,~N"); Clazz.defineMethod (c$, "drawString", function (x, y, z, radius, rightJustify, centerX, centerY, yRef, sVal) { if (sVal == null) return; var width = this.font3d.stringWidth (sVal); var height = this.font3d.getAscent (); var xT = x; if (rightJustify) xT -= Clazz.doubleToInt (radius / 2) + 2 + width; else if (centerX) xT -= Clazz.doubleToInt (radius / 2) + 2 + Clazz.doubleToInt (width / 2); else xT += Clazz.doubleToInt (radius / 2) + 2; var yT = y; if (centerY) yT += Clazz.doubleToInt (height / 2); else if (yRef == 0 || yRef < y) yT += height; else yT -= Clazz.doubleToInt (radius / 2); var zT = z - radius - 2; if (zT < 1) zT = 1; this.g3d.drawString (sVal, this.font3d, xT, yT, zT, zT, 0); }, "~N,~N,~N,~N,~B,~B,~B,~N,~S"); Clazz.defineMethod (c$, "drawDashed", function (xA, yA, zA, xB, yB, zB, array) { if (array == null || this.width < 0) return; var f = array[0]; var dx = xB - xA; var dy = yB - yA; var dz = zB - zA; var n = 0; var isNdots = (array === J.render.FontLineShapeRenderer.ndots); var isDots = (isNdots || array === J.render.FontLineShapeRenderer.sixdots); if (isDots) { var d2 = (dx * dx + dy * dy) / (this.width * this.width); if (isNdots) { f = (Math.sqrt (d2) / 1.5); n = Clazz.floatToInt (f) + 2; } else if (d2 < 8) { array = J.render.FontLineShapeRenderer.twodots; } else if (d2 < 32) { array = J.render.FontLineShapeRenderer.fourdots; }}var ptS = array[1]; var ptE = array[2]; var colixS = this.colixA; var colixE = (ptE == 0 ? this.colixB : this.colixA); if (n == 0) n = array.length; for (var i = 0, pt = 3; pt < n; pt++) { i = (isNdots ? i + 1 : array[pt]); var xS = Clazz.doubleToInt (Math.floor (xA + dx * i / f)); var yS = Clazz.doubleToInt (Math.floor (yA + dy * i / f)); var zS = Clazz.doubleToInt (Math.floor (zA + dz * i / f)); if (isDots) { this.s1.set (xS, yS, zS); if (pt == ptS) this.g3d.setC (this.colixA); else if (pt == ptE) this.g3d.setC (this.colixB); this.g3d.fillSphereI (this.width, this.s1); continue; }if (pt == ptS) colixS = this.colixB; i = array[++pt]; if (pt == ptE) colixE = this.colixB; var xE = Clazz.doubleToInt (Math.floor (xA + dx * i / f)); var yE = Clazz.doubleToInt (Math.floor (yA + dy * i / f)); var zE = Clazz.doubleToInt (Math.floor (zA + dz * i / f)); this.fillCylinder (colixS, colixE, 2, this.width, xS, yS, zS, xE, yE, zE); } }, "~N,~N,~N,~N,~N,~N,~A"); Clazz.defineMethod (c$, "fillCylinder", function (colixA, colixB, endcaps, diameter, xA, yA, zA, xB, yB, zB) { if (this.asLineOnly) this.g3d.drawLine (colixA, colixB, xA, yA, zA, xB, yB, zB); else this.g3d.fillCylinderXYZ (colixA, colixB, endcaps, (!this.isExport || this.mad == 1 ? diameter : this.mad), xA, yA, zA, xB, yB, zB); }, "~N,~N,~N,~N,~N,~N,~N,~N,~N,~N"); Clazz.defineStatics (c$, "dashes", Clazz.newIntArray (-1, [12, 0, 0, 2, 5, 7, 10]), "hDashes", Clazz.newIntArray (-1, [10, 7, 6, 1, 3, 4, 6, 7, 9]), "ndots", Clazz.newIntArray (-1, [0, 3, 1000]), "sixdots", Clazz.newIntArray (-1, [12, 3, 6, 1, 3, 5, 7, 9, 11]), "fourdots", Clazz.newIntArray (-1, [13, 3, 5, 2, 5, 8, 11]), "twodots", Clazz.newIntArray (-1, [12, 3, 4, 3, 9])); });