UNPKG

@realsee/dnalogel

Version:
148 lines (147 loc) 8.43 kB
var P = Object.defineProperty, E = Object.defineProperties; var N = Object.getOwnPropertyDescriptors; var A = Object.getOwnPropertySymbols; var v = Object.prototype.hasOwnProperty, b = Object.prototype.propertyIsEnumerable; var f = (e, i, t) => i in e ? P(e, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[i] = t, m = (e, i) => { for (var t in i || (i = {})) v.call(i, t) && f(e, t, i[t]); if (A) for (var t of A(i)) b.call(i, t) && f(e, t, i[t]); return e; }, a = (e, i) => E(e, N(i)); var k = (e, i) => { var t = {}; for (var o in e) v.call(e, o) && i.indexOf(o) < 0 && (t[o] = e[o]); if (e != null && A) for (var o of A(e)) i.indexOf(o) < 0 && b.call(e, o) && (t[o] = e[o]); return t; }; var s = (e, i, t) => (f(e, typeof i != "symbol" ? i + "" : i, t), t); import * as n from "three"; import { DEFAULT_HIGHLIGHT_OPACITY as I } from "../typings/style.js"; import { IObject3D as T } from "../../shared-utils/three/IObject3D.js"; import { anyPositionToVector3 as W } from "../../shared-utils/positionToVector3.js"; import { LightTag as B } from "../../shared-utils/tag.js"; import "../../vendor/hammerjs/hammer.js"; import "../../shared-utils/three/PointSelector/index.js"; import "../../shared-utils/three/CSS3DRenderer/index.js"; import "../../CSS3DRenderPlugin/utils/generateBehindFiveElement.js"; import { getLengthHTML as F } from "../utils/Meshes/getLengthHTML.js"; import { localToWorld as H } from "../../shared-utils/three/applyObjectMatrixWorld.js"; import { getFiveFromParentChain as S } from "../../shared-utils/five/getFiveFromParentChain.js"; import "@realsee/five/line"; import { notNil as g } from "../../shared-utils/isNil.js"; import "../../shared-utils/three/core/Five_LineMaterial2.js"; import { RenderDom as c } from "../utils/renderDom.js"; import "../../shared-utils/three/core/Sphere.js"; import "../../shared-utils/three/blink.js"; import "../../vendor/@tweenjs/tween/dist/tween.esm.js.js"; import "../../CSS3DRenderPlugin/utils/three/CSS3DRender.js"; import "../../vendor/earcut/src/earcut.js"; import "../../shared-utils/five/FivePuppet.js"; const x = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg=="; let C = null; class nt extends T { constructor(t) { var y, w, V; super(); s(this, "name", "PointMesh"); s(this, "dom"); s(this, "opacityBeforeHighlight"); s(this, "highlighted", !1); s(this, "fontMesh"); s(this, "backgroundMesh"); s(this, "lastRenderDomItem"); s(this, "paramsStyle"); s(this, "_visible", !0); s(this, "_onAdded", () => { this.dom || this.updateDom(); }); s(this, "_onRemoved", () => { var t; (t = this.dom) == null || t.destroy(), this.dom = void 0; }); s(this, "_onShowed", () => { this.dom && (this.dom.container.style.display = "block"); }); s(this, "_onHidden", () => { this.dom && (this.dom.container.style.display = "none"); }); const p = t != null ? t : {}, { point: o } = p, h = k(p, ["point"]); this.paramsStyle = h != null ? h : {}; const u = new n.BufferGeometry(); u.setAttribute("position", new n.Float32BufferAttribute([0, 0, 0], 3)); const M = { transparent: !0, side: n.DoubleSide, size: (y = t == null ? void 0 : t.size) != null ? y : 8, map: C || (C = new n.TextureLoader().load(x)), sizeAttenuation: !1 }, r = new n.PointsMaterial(a(m({}, M), { color: (w = t == null ? void 0 : t.color) != null ? w : 16777215, depthTest: !0, opacity: (V = t == null ? void 0 : t.opacity) != null ? V : 1 })), D = new n.PointsMaterial(a(m({}, M), { size: r.size, color: r.color, depthWrite: !1, depthTest: !1, opacity: r.opacity * 0.5 })), l = new n.Points(u, r), d = new n.Points(u, D); this.fontMesh = l, this.backgroundMesh = d, l.name = "FontMesh", d.name = "BackgroundMesh", l.renderOrder = 10, d.renderOrder = 0, this.add(l, d), t != null && t.point && this.position.copy(W(t.point)), t && this.setStyle(t), this.addEventListener("removed", () => { c.cacheObject.delete(this), c.checkDom(this); }), this.addEventListener("added", () => { c.cacheObject.add(this); }), c.checkDomEveryFrame(); } get color() { return this.fontMesh.material.color; } get size() { return this.fontMesh.material.size; } get style() { return { color: this.color, size: this.size, opacity: this.fontMesh.material.opacity, occlusionVisibility: this.fontMesh.material.depthTest, occlusionMode: this.backgroundMesh.visible ? "depthWrite" : "depthTest" }; } get five() { return S(this); } setStyle(t) { g(t.color) && (this.fontMesh.material.setValues({ color: t.color }), this.backgroundMesh.material.setValues({ color: t.color })), g(t.size) && (this.fontMesh.material.setValues({ side: t.size }), this.backgroundMesh.material.setValues({ side: t.size })), g(t.occlusionVisibility) && (t.occlusionVisibility ? t.occlusionMode === "depthTest" ? (this.fontMesh.material.depthTest = !1, this.backgroundMesh.visible = !1) : (this.fontMesh.material.depthTest = !0, this.backgroundMesh.visible = !0) : (this.fontMesh.material.depthTest = !0, this.backgroundMesh.visible = !1)); } highlight() { this.highlighted || (this.highlighted = !0, this.opacityBeforeHighlight = this.fontMesh.material.opacity, this.fontMesh.material.setValues({ opacity: this.opacityBeforeHighlight * I })); } unhighlight() { this.highlighted && (this.highlighted = !1, this.fontMesh.material.setValues({ opacity: this.opacityBeforeHighlight })); } updateMatrixWorld(t) { super.updateMatrixWorld(t); const o = H(this, this.position).toArray().join(","); o !== this.lastRenderDomItem && (this.updateDom(), this.lastRenderDomItem = o); } updateDom() { const t = this.paramsStyle.tip; t && !this.dom && this.five && (this.dom = new B(this.five), this.dom.intersectCheck = !1, this.dom.simulate3D = !0, this.dom.container.style.display = this.visible ? "block" : "none"); const o = (h) => { this.dom && this.dom.__text !== h && (this.dom.__text = h, h instanceof HTMLElement ? (this.dom.container.innerHTML = "", this.dom.container.appendChild(h)) : h ? this.dom.container.innerHTML = F(h, { style: "", offsetY: -20 // 移动label到点的上方,否则会遮挡鼠标选点 }) : this.dom.container.innerHTML = ""); }; t ? (o(t), this.dom.setPosition(this.position.clone())) : o(null); } } export { nt as PointMesh };