UNPKG

@realsee/dnalogel

Version:
195 lines (194 loc) 8.61 kB
var P = Object.defineProperty; var D = (l, n, e) => n in l ? P(l, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[n] = e; var r = (l, n, e) => (D(l, typeof n != "symbol" ? n + "" : n, e), e); var M = (l, n, e) => new Promise((s, t) => { var m = (i) => { try { a(e.next(i)); } catch (p) { t(p); } }, o = (i) => { try { a(e.throw(i)); } catch (p) { t(p); } }, a = (i) => i.done ? s(i.value) : Promise.resolve(i.value).then(m, o); a((e = e.apply(l, n)).next()); }); import { Controller as A } from "../base/BasePluginWithData.js"; import * as h from "three"; import { ModelMakerBoxItem as C } from "./item/boxItem.js"; import { PrismMesh as j } from "../Sculpt/Meshes/Prism.js"; import { anyPositionToVector3 as I } from "../shared-utils/positionToVector3.js"; import { PolygonWithEdgeMesh as T } from "../Sculpt/Meshes/PolygonWithEdge.js"; import "hammerjs"; import "@realsee/five"; import "../vendor/@tweenjs/tween/dist/tween.esm.js.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DRender.js"; import "../CSS3DRenderPlugin/utils/generateBehindFiveElement.js"; import "animejs"; import { notNil as x } from "../shared-utils/isNil.js"; import { tagRendererMap as H } from "./utils/tagRenderer.js"; import { ModelMakerPrismItem as F } from "./item/prismItem.js"; import { ModelMakerPolygonItem as L } from "./item/polygonItem.js"; import { boxVertex as c } from "../shared-utils/Object3DHelper/utils/boundingBox.js"; import { getFiveDomEvent as O } from "./utils/getFiveDomEvent.js"; import "../base/BasePlugin.js"; import "../shared-utils/Subscribe.js"; import "../shared-utils/url/absoluteUrl.js"; import "../shared-utils/three/IObject3D.js"; import "../Sculpt/Meshes/Polygon.js"; import "../shared-utils/three/generatePolygonGeometry.js"; import "../shared-utils/three/earcut3D.js"; import "earcut"; import "../shared-utils/three/getNormal.js"; import "../Sculpt/utils/color.js"; import "../Sculpt/utils/three/ColoredMesh.js"; import "../shared-utils/three/geometryUtil.js"; import "../shared-utils/three/centerPoint.js"; import "../Sculpt/Meshes/Line.js"; import "@realsee/five/line"; import "../Sculpt/Meshes/Polyline.js"; import "../Sculpt/Meshes/LineWithDots.js"; import "../Sculpt/Meshes/Point.js"; import "../shared-utils/three/closeVectors.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DRenderer.js"; import "three/examples/jsm/renderers/CSS3DRenderer"; import "../CSS3DRenderPlugin/utils/getAllCSS3DObject.js"; import "../shared-utils/util.js"; import "../CSS3DRenderPlugin/utils/createResizeObserver.js"; import "../CSS3DRenderPlugin/utils/even.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DObject.js"; import "../CSS3DRenderPlugin/utils/three/OpacityMesh.js"; import "../shared-utils/three/getObjectVisible.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DScene.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DGroup.js"; import "./utils/Text.js"; import "../vendor/svelte/internal/index.js"; import "../components/AreaLabel/LabelItem.js"; import "../components/AreaLabel/Assets/roomLabelBg.js"; import "./item/baseItem.js"; import "../shared-utils/three/addIfNotExists.js"; import "../shared-utils/tag.js"; import "../shared-utils/five/vector3ToScreen.js"; import "../shared-utils/five/FiveDomEvents.js"; import "../shared-utils/five/calculateThreeMouse.js"; class Se extends A { constructor(e) { super(e); r(this, "state"); r(this, "items", []); r(this, "data"); r(this, "group", new h.Group()); r(this, "tagRendererMap", {}); r(this, "fiveDomEvents"); r(this, "zFightingOffset", 0); r(this, "handleEnable", () => { this.items.forEach((e) => e.enable()); }); r(this, "handleDisable", () => { this.items.forEach((e) => e.disable()); }); r(this, "updateTagRenderer", () => { this.items.forEach((e) => { var t; const s = (t = this.tagRendererMap[e.type]) != null ? t : H[e.type]; s && e.__renderer !== s && (e.__renderer = s, typeof e.__disposeRenderer == "function" && e.__disposeRenderer(), e.tag.container.innerHTML = "", e.__disposeRenderer = s(e.tag.container, e)); }); }); this.group.name = "ModelMakerPluginGroup", this.state = { enabled: !0, visible: !0 }, this.fiveDomEvents = O(e), e.scene.add(this.group), this.handleEnable(), window.__MODELMAKER_DEBUG__ = this; } load(e) { return M(this, null, function* () { var s; this.clear(), this.data = e, (s = e == null ? void 0 : e.list) == null || s.forEach((t) => { var m; if (t.type === "triangles") { const o = new T(); o.setPoints(t.object_data.points), o.setStyle({ color: t.object_data.color, opacity: t.object_data.opacity, lineColor: t.object_data.color, occlusionVisibility: !1 }), this.fiveDomEvents.addEventListener(o, "hover", () => o.highlight()), this.fiveDomEvents.addEventListener(o, "unHover", () => o.unhighlight()); const a = new L({ five: this.five, model: o, group: this.group, type: t.type, rawData: t }); this.items.push(a); } else if (t.type === "prism") { const o = new j(); this.zFightingOffset += 1e-4, o.setPoints({ points: t.object_data.points.map((i) => { var p; return [i[0], i[1] + ((p = t.object_data.fixedY) != null ? p : 0), i[2]]; }), heightPoint: I(t.object_data.points[0]).add(new h.Vector3().setY(t.object_data.height + ((m = t.object_data.fixedHeight) != null ? m : 0))).add(new h.Vector3().setY(this.zFightingOffset)) }), o.setStyle({ color: t.object_data.color, opacity: t.object_data.opacity, lineColor: t.object_data.color, occlusionVisibility: !1 }); const a = new F({ five: this.five, model: o, group: this.group, type: t.type, rawData: t }); this.items.push(a); } else if (t.type === "box") { const o = new j(), { start: a, end: i, rotation: p = [0, 0, 0, 0], opacity: V, color: b } = t.object_data, f = new h.Vector3().fromArray(a), u = new h.Vector3().fromArray(i), R = new h.Euler().fromArray(p), g = new h.Quaternion().setFromEuler(R), y = g.clone().inverse(), _ = new h.Vector3().lerpVectors(f, u, 0.5), w = _.clone().negate(), v = f.clone().add(w).applyQuaternion(y), E = u.clone().add(w).applyQuaternion(y), d = new h.Box3(v.clone().max(E), v.clone().min(E)); o.setPoints({ points: [c(d, 2), c(d, 3), c(d, 7), c(d, 6)], heightPoint: c(d, 0) }), o.position.copy(_), o.quaternion.copy(g), o.setStyle({ color: b, opacity: V, lineColor: b, occlusionVisibility: !1 }); const k = new C({ five: this.five, model: o, group: this.group, type: t.type, rawData: t }); this.items.push(k); } }), this.five.needsRender = !0, this.state.enabled ? this.handleEnable() : this.handleDisable(), this.state.visible ? this.handleShow() : this.handleHide(), this.updateTagRenderer(), this.hooks.emit("dataLoaded", e); }); } setState(e) { x(e.enabled) && this.state.enabled !== e.enabled && (this.state.enabled = e.enabled, e.enabled ? this.handleEnable() : this.handleDisable(), this.hooks.emit(e.enabled ? "enable" : "disable", { userAction: "我不知道捏" }), this.hooks.emit("stateChange", { state: this.state, userAction: "我不知道捏" })), x(e.visible) && this.state.visible !== e.visible && (this.state.visible = e.visible, e.visible ? this.handleShow() : this.handleHide(), this.hooks.emit(e.visible ? "show" : "hide", { userAction: "我不知道捏" }), this.hooks.emit("stateChange", { state: this.state, userAction: "我不知道捏" })); } getItemById(e) { return this.items.find((s) => s.rawData.id === e); } registerTagRenderer(e) { this.tagRendererMap = e, this.updateTagRenderer(); } enable() { this.setState({ enabled: !0 }); } disable() { this.setState({ enabled: !1 }); } show() { this.setState({ visible: !0 }); } hide() { this.setState({ visible: !1 }); } clear() { this.zFightingOffset = 0, this.handleDisable(), this.items = []; } dispose() { this.hooks.emit("dispose"), this.handleDisable(); } handleShow() { this.items.forEach((e) => e.show()); } handleHide() { this.items.forEach((e) => e.hide()); } } export { Se as Controller };