UNPKG

@realsee/dnalogel

Version:
238 lines (237 loc) 10.3 kB
var P = Object.defineProperty; var D = Object.getOwnPropertySymbols; var B = Object.prototype.hasOwnProperty, j = Object.prototype.propertyIsEnumerable; var C = (s, o, e) => o in s ? P(s, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[o] = e, u = (s, o) => { for (var e in o || (o = {})) B.call(o, e) && C(s, e, o[e]); if (D) for (var e of D(o)) j.call(o, e) && C(s, e, o[e]); return s; }; var m = (s, o, e) => (C(s, typeof o != "symbol" ? o + "" : o, e), e); var H = (s, o, e) => new Promise((t, r) => { var i = (p) => { try { c(e.next(p)); } catch (f) { r(f); } }, a = (p) => { try { c(e.throw(p)); } catch (f) { r(f); } }, c = (p) => p.done ? t(p.value) : Promise.resolve(p.value).then(i, a); c((e = e.apply(s, o)).next()); }); import { Subscribe as y } from "@realsee/five"; import { Controller as k } from "../base/BasePlugin.js"; import "three"; import { MoveHelper as x } from "../shared-utils/Object3DHelper/Helper/MoveHelper.js"; import { RotateHelper as I } from "../shared-utils/Object3DHelper/Helper/RotateHelper.js"; import { CSS3DScaleHelper as W } from "../shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.js"; import { BoundingBoxHelper as L } from "../shared-utils/Object3DHelper/Helper/BoundingBoxHelper.js"; import { MoveController as _ } from "../shared-utils/Object3DHelper/Controller/MoveController.js"; import { ControllerWrapper as v } from "./FiveControllerWrapper.js"; import { Object3DHelper as $ } from "../shared-utils/Object3DHelper/index.js"; import { RotateController as G } from "../shared-utils/Object3DHelper/Controller/RotateController.js"; import { CSS3DScaleController as U } from "../shared-utils/Object3DHelper/Controller/CSS3DScaleController.js"; import { CSS3DRender as N } from "../CSS3DRenderPlugin/utils/three/CSS3DRender.js"; import F from "../CSS3DRenderPlugin/utils/waitFiveModelLoaded.js"; import V from "../CSS3DRenderPlugin/utils/generateBehindFiveElement.js"; import { BoundingBoxController as q } from "../shared-utils/Object3DHelper/Controller/BoundingBoxController.js"; import { ScaleHelper as z } from "../shared-utils/Object3DHelper/Helper/ScaleHelper.js"; import { ScaleController as A } from "../shared-utils/Object3DHelper/Controller/ScaleController.js"; import "../shared-utils/Subscribe.js"; import "hammerjs"; import "../vendor/@tweenjs/tween/dist/tween.esm.js.js"; import "../shared-utils/url/absoluteUrl.js"; import "../shared-utils/Object3DHelper/Base/BaseHelper.js"; import "../shared-utils/Object3DHelper/utils/setObjectQuaternion.js"; import "../shared-utils/three/IObject3D.js"; import "../shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.js"; import "../shared-utils/Object3DHelper/utils/direction.js"; import "../shared-utils/Object3DHelper/Constants/color.js"; import "../shared-utils/Object3DHelper/Helper/HTML/tipsDom.js"; import "../shared-utils/Object3DHelper/Helper/HTML/utils/createElement.js"; import "../shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.js"; import "../shared-utils/Object3DHelper/utils/boundingBox.js"; import "../shared-utils/Object3DHelper/Base/BaseController.js"; import "../shared-utils/threex/domevents/index.js"; import "../shared-utils/isNil.js"; import "../shared-utils/Object3DHelper/utils/getMouseRaycaster.js"; import "../shared-utils/Object3DHelper/utils/calculateThreeMouse.js"; import "../shared-utils/math/rad2Deg.js"; import "../shared-utils/math/deg2Rad.js"; import "../shared-utils/Object3DHelper/Controller/RectangleScaleController.js"; import "../shared-utils/Object3DHelper/utils/vectorIsEqual.js"; import "../shared-utils/positionToVector3.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/centerPoint.js"; import "../shared-utils/three/getObjectVisible.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DScene.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DGroup.js"; const S = "Object3DHelperPlugin", w = S, J = () => { console.error(`${w} is disposed`); }, K = () => { console.warn(`${w} is disabled`); }, Q = () => { console.error(`${w} is disabled`); }; class Xe extends k { constructor(e) { super(e); m(this, "name", S); m(this, "state", { visible: !0, enabled: !0, disposed: !1 }); m(this, "objectHelperMap", /* @__PURE__ */ new Map()); m(this, "css3DObjectParentMap", /* @__PURE__ */ new Map()); m(this, "css3DRender"); this.five = e, this.css3DRender = new N(this.five.scene), console.warn("Object3DHelper: 使用此插件,需要在初始化five时,设置five参数: { backgroundAlpha: 0, backgroundColor: 0x000000 }"), Object.assign(window, { [`__${S.toUpperCase()}_DEBUG__`]: this }); } /** * @description Show guide line */ show(e) { return H(this, null, function* () { this.setState({ visible: !0 }, e); }); } /** * @description Hide guide line */ hide(e) { return H(this, null, function* () { this.setState({ visible: !1 }, e); }); } /** * @description Enable */ enable(e) { this.setState({ enabled: !0 }, e); } /** * @description Disable */ disable(e) { this.setState({ enabled: !1 }, e); } /** * @description Dispose */ dispose() { this.setState({ disposed: !0 }); } setState(e, t) { if (this.state.disposed) return J(); if (!this.state.enabled && e.enabled !== !0 && e.disposed !== !0) return Q(); const r = u({}, this.state); this.state = u(u({}, this.state), e), e.disposed !== void 0 && e.disposed !== r.disposed && e.disposed && this.handleDispose(), e.visible !== void 0 && e.visible !== r.visible && this.handleVisible(e.visible), e.enabled !== void 0 && e.enabled !== r.enabled && this.handleEnable(e.enabled), this.hooks.emit("stateChange", { state: this.state, prevState: r }); } getObject3DHelper(e) { return this.objectHelperMap.get(e); } /** * @description 添加 helper * @param { THREE.Object3D } object3D 要添加helper的物体 * @param { boolean } config.moveHelper 位移helper * @param { boolean } config.rotateHelper 旋转helper * @param { boolean } config.scaleHelper 缩放helper */ addObject3DHelper(e, t = {}) { var g; if (!e) return console.error("Object3D is undefined"); if (this.objectHelperMap.has(e)) { console.warn(`Object3DHelperPlugin: object3D ${e.name} is already has helper`); return; } const r = new $(), i = [], a = (g = this.five.getElement()) == null ? void 0 : g.parentElement, c = this.five.camera, { moveHelper: p = !0, rotateHelper: f = !0, scaleHelper: E = !0, boundingBoxHelper: R = !1 } = t, b = new y(); if (p) { const n = new x(e), l = this.getConfig(t.moveHelper), d = new v(this.five, _, e, n, l, b); r.addControllers({ moveController: d.helperController }), i.push(() => d.dispose()); } if (f) { const n = this.getConfig(t.rotateHelper), l = new I(e, u({ container: a }, n)), d = new v(this.five, G, e, l, n, b); r.addControllers({ rotateController: d.helperController }), i.push(() => d.dispose()); } if (R) { const n = new L(e), l = new v(this.five, q, e, n, void 0, b); r.addControllers({ boundingBoxController: l.helperController }); } if (E) if (e.isCSS3DObjectPlus && a) { const n = new W(e, a, c, this.five.scene), l = new v(this.five, U, e, n, void 0, b); r.addControllers({ scaleController: l.helperController }), i.push(() => l.dispose()), F(this.five).then(() => { var d, M; if (e.isCSS3DObjectPlus) { const h = e; if (!h || h.mode !== "front") return; const O = (d = this.css3DRender.behindModeCSS3DRenderer.wrapper) != null ? d : V(this.five); O && (this.css3DObjectParentMap.set(h, h.parent), h.removeFromParent(), this.css3DRender.behindModeCSS3DRenderer.setWrapper(O), (M = this.css3DRender.getBehindCSS3DObjectGroup()) == null || M.add(h), this.css3DRender.render(this.five.camera)); } }); } else { const n = new z(e), l = new v(this.five, A, e, n, void 0, b); r.addControllers({ scaleController: l.helperController }), i.push(() => l.dispose()); } return this.objectHelperMap.set(e, { helper: r, disposers: i }), r.controllers; } removeObject3DHelper(e) { if (!this.objectHelperMap.has(e)) return; const { helper: t, disposers: r } = this.objectHelperMap.get(e); if (t) { if (e.isCSS3DObjectPlus) { const i = e, a = this.css3DObjectParentMap.get(i); a && a.add(i), this.css3DRender.render(this.five.camera); } this.objectHelperMap.delete(e), t.dispose(), r == null || r.forEach((i) => i == null ? void 0 : i()); } } handleEnable(e, t = !0) { e ? (this.everyHelperDo((r) => r.enable()), this.hooks.emit("enable", { userAction: t })) : (this.everyHelperDo((r) => r.disable()), this.hooks.emit("disable", { userAction: t })), this.state.enabled = e; } handleVisible(e, t = !0) { e ? (this.everyHelperDo((r) => r.show()), this.actionIfStateIsEnabled(() => this.hooks.emit("show", { userAction: t }))) : (this.everyHelperDo((r) => r.hide()), this.actionIfStateIsEnabled(() => this.hooks.emit("hide", { userAction: t }))), this.state.visible = e; } handleDispose() { this.objectHelperMap.forEach(({ helper: e, disposers: t }) => { e.dispose(), t == null || t.forEach((r) => r == null ? void 0 : r()); }); } everyHelperDo(e) { this.objectHelperMap.forEach(({ helper: t, disposers: r }) => { t && e(t); }); } actionIfStateIsEnabled(e, t) { if (this.state.enabled) return e(); t != null && t.warnLog && K(); } getConfig(e) { if (e && typeof e != "boolean" && e.enable) return e; } } export { Xe as Object3DHelperController, w as PLUGIN };