UNPKG

@realsee/dnalogel

Version:
355 lines (354 loc) 14.2 kB
var I = Object.defineProperty; var B = Object.getOwnPropertySymbols; var W = Object.prototype.hasOwnProperty, L = Object.prototype.propertyIsEnumerable; var w = (n, i, e) => i in n ? I(n, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[i] = e, p = (n, i) => { for (var e in i || (i = {})) W.call(i, e) && w(n, e, i[e]); if (B) for (var e of B(i)) L.call(i, e) && w(n, e, i[e]); return n; }; var f = (n, i, e) => (w(n, typeof i != "symbol" ? i + "" : i, e), e); var O = (n, i, e) => new Promise((r, t) => { var s = (d) => { try { u(e.next(d)); } catch (l) { t(l); } }, h = (d) => { try { u(e.throw(d)); } catch (l) { t(l); } }, u = (d) => d.done ? r(d.value) : Promise.resolve(d.value).then(s, h); u((e = e.apply(n, i)).next()); }); import { Controller as _ } from "../base/BasePlugin.js"; import "three"; import "../shared-utils/three/core/Sphere.js"; import { MoveHelper as $ } from "../shared-utils/Object3DHelper/Helper/MoveHelper.js"; import { RotateHelper as F } from "../shared-utils/Object3DHelper/Helper/RotateHelper.js"; import { CSS3DScaleHelper as G } from "../shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.js"; import { BoundingBoxHelper as U } from "../shared-utils/Object3DHelper/Helper/BoundingBoxHelper.js"; import { MoveController as N } from "../shared-utils/Object3DHelper/Controller/MoveController.js"; import { ControllerWrapper as S } from "./FiveControllerWrapper.js"; import { Object3DHelper as V } from "../shared-utils/Object3DHelper/index.js"; import { RotateController as q } from "../shared-utils/Object3DHelper/Controller/RotateController.js"; import { CSS3DScaleController as z } from "../shared-utils/Object3DHelper/Controller/CSS3DScaleController.js"; import { CSS3DRender as A } from "../CSS3DRenderPlugin/utils/three/CSS3DRender.js"; import J from "../CSS3DRenderPlugin/utils/generateBehindFiveElement.js"; import { BoundingBoxController as K } from "../shared-utils/Object3DHelper/Controller/BoundingBoxController.js"; import { ScaleHelper as Q } from "../shared-utils/Object3DHelper/Helper/ScaleHelper.js"; import { ScaleController as T } from "../shared-utils/Object3DHelper/Controller/ScaleController.js"; import { waitFiveModelLoaded as X } from "../shared-utils/five/fiveModelLoad.js"; import { Subscribe as Y } from "../shared-utils/Subscribe.js"; import { DomEvents as Z } from "../shared-utils/threex/domevents/index.js"; import "../shared-utils/tag.js"; import "../shared-utils/positionToVector3.js"; import "../shared-utils/five/vector3ToScreen.js"; import "../shared-utils/five/getFiveModel.js"; import "../shared-utils/Utils/FiveUtil.js"; import "../shared-utils/Utils/BaseUtil.js"; import "../shared-utils/Utils/WorkUtil.js"; import "../shared-utils/five/transformPosition.js"; import "../shared-utils/three/temp.js"; import "../shared-utils/three/core/Raycaster.js"; import "../shared-utils/dom/resizeObserver.js"; import "../shared-utils/five/fiveEveryReadyListener.js"; import "../shared-utils/throttle.js"; import "../vendor/hammerjs/hammer.js"; import "../shared-utils/three/PointSelector/index.js"; import "../shared-utils/three/PointSelector/utils/PointSelectorHelper.js"; import "../shared-utils/three/Magnifier.js"; import "../shared-utils/three/PointSelector/utils/PointHelper.js"; import "../shared-utils/three/Assets/index.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DObject.js"; import "../shared-utils/even.js"; import "../shared-utils/CSS3DRender/OpacityMesh.js"; import "../shared-utils/three/centerPoint.js"; import "../shared-utils/three/getObjectVisible.js"; import "../shared-utils/three/CSS3DRenderer/index.js"; import "@realsee/five/line"; import "../shared-utils/isNil.js"; import "../shared-utils/three/core/Five_LineMaterial2.js"; import "../shared-utils/three/blink.js"; import "../vendor/animejs/lib/anime.es.js"; import "../shared-utils/util.js"; import "../vendor/@tweenjs/tween/dist/tween.esm.js.js"; import "../vendor/earcut/src/earcut.js"; import "../shared-utils/five/FivePuppet.js"; import "@realsee/five"; import "../shared-utils/three/PointSelector/utils/html.js"; import "../shared-utils/CSS3DRender/index.js"; import "../shared-utils/CSS3DRender/CSS3DRenderer.js"; import "../shared-utils/createResizeObserver.js"; import "../shared-utils/three/PointSelector/utils/PointHelper2.js"; import "../Sculpt/Meshes/Line.js"; import "../Sculpt/typings/style.js"; import "../shared-utils/three/IObject3D.js"; import "../Sculpt/utils/Meshes/getLengthHTML.js"; import "../shared-utils/three/applyObjectMatrixWorld.js"; import "../shared-utils/five/getFiveFromParentChain.js"; import "../shared-utils/three/core/LineGeometry.js"; import "../shared-utils/three/core/LineMaterial.js"; import "../shared-utils/three/core/Line2.js"; import "../shared-utils/three/core/LineMaterial2.js"; import "../Sculpt/utils/unit.js"; import "../Sculpt/utils/renderDom.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DSprite.js"; import "../shared-utils/isTouchDevice.js"; import "../shared-utils/five/getPosition.js"; import "../shared-utils/five/getRaycasterByNdcPosition.js"; import "../shared-utils/three/PointSelector/utils/contents.js"; import "../Sculpt/utils/three/rayOnLine.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DScene.js"; import "../CSS3DRenderPlugin/utils/getAllCSS3DObject.js"; import "../CSS3DRenderPlugin/utils/three/CSS3DGroup.js"; import "../shared-utils/url/defaultUrls.js"; import "../shared-utils/Object3DHelper/Base/BaseHelper.js"; import "../shared-utils/Object3DHelper/utils/setObjectQuaternion.js"; import "../shared-utils/three/boundingBox.js"; import "../shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.js"; import "../shared-utils/Object3DHelper/utils/direction.js"; import "../shared-utils/Object3DHelper/Constants/RenderOrder.js"; import "../shared-utils/Object3DHelper/Helper/Objects/CenterHandle.js"; import "../shared-utils/Object3DHelper/Constants/color.js"; import "../shared-utils/Object3DHelper/utils/calculateScaleByCamera.js"; import "../shared-utils/Object3DHelper/utils/getPoseFromCamera.js"; import "../shared-utils/clamp.js"; import "../shared-utils/formatRad.js"; import "../shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.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/cameraHooks.js"; import "../shared-utils/Object3DHelper/Base/BaseController.js"; import "../shared-utils/Object3DHelper/utils/solidGuide.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/three/vectorIsEqual.js"; import "../shared-utils/three/getNormal.js"; const M = "Object3DHelperPlugin", E = M, ee = () => { console.error(`${E} is disposed`); }, te = () => { console.warn(`${E} is disabled`); }, re = () => { console.error(`${E} is disabled`); }; class ir extends _ { constructor(e) { super(e); f(this, "name", M); f(this, "state", { visible: !0, enabled: !0, disposed: !1 }); f(this, "objectHelperMap", /* @__PURE__ */ new Map()); f(this, "css3DObjectParentMap", /* @__PURE__ */ new Map()); f(this, "css3DObjectModeMap", /* @__PURE__ */ new Map()); f(this, "css3DRender"); this.five = e, this.css3DRender = new A(this.five.scene), console.warn("Object3DHelper: 使用此插件,需要在初始化five时,设置five参数: { backgroundAlpha: 0, backgroundColor: 0x000000 }"), Object.assign(window, { [`__${M.toUpperCase()}_DEBUG__`]: this }); } /** * @description Show guide line */ show(e) { return O(this, null, function* () { this.setState({ visible: !0 }, e); }); } /** * @description Hide guide line */ hide(e) { return O(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, r) { if (this.state.disposed) return ee(); if (!this.state.enabled && e.enabled !== !0 && e.disposed !== !0) return re(); const t = p({}, this.state); this.state = p(p({}, this.state), e), e.disposed !== void 0 && e.disposed !== t.disposed && e.disposed && this.handleDispose(), e.visible !== void 0 && e.visible !== t.visible && this.handleVisible(e.visible), e.enabled !== void 0 && e.enabled !== t.enabled && this.handleEnable(e.enabled), this.hooks.emit("stateChange", { state: this.state, prevState: t }); } 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, r = {}) { var D; if (!e) { console.error("Object3D is undefined"); return; } if (this.objectHelperMap.has(e)) { console.warn(`Object3DHelperPlugin: object3D ${e.name} is already has helper`); return; } const t = new V(), s = [], h = (D = this.five.getElement()) == null ? void 0 : D.parentElement, u = this.five.camera, l = p(p({}, { moveHelper: !0, rotateHelper: !0, scaleHelper: !0, boundingBoxHelper: !1, positionFrom: "objectPosition" }), r), { moveHelper: P, rotateHelper: k, scaleHelper: x, boundingBoxHelper: j } = l, v = t.hooks, H = new Y(), C = new Z(this.five.camera, this.five.getElement()), g = (o) => { if (o) return typeof o == "boolean" ? o : o.enable; }, c = {}; if (g(P)) { const o = p(p({}, this.getConfig(l.moveHelper)), l), m = new $(e, p({}, o)), a = new S( this.five, C, N, e, m, o, v, H ); c.moveController = a.helperController, s.push(() => a.dispose()); } if (g(k)) { const o = p(p({}, this.getConfig(l.rotateHelper)), l), m = new F(e, p({ container: h }, o)), a = new S( this.five, C, q, e, m, o, v, H ); c.rotateController = a.helperController, s.push(() => a.dispose()); } if (g(j)) { const o = new U(e), m = new S( this.five, C, K, e, o, void 0, v, H ); c.boundingBoxController = m.helperController, s.push(() => m.dispose()); } if (g(x)) if (e.isCSS3DObject && h) { const o = new G(e, h, u, this.five.scene), m = new S( this.five, C, z, e, o, void 0, v, H ); c.scaleController = m.helperController, s.push(() => m.dispose()), X(this.five).then(() => { var a, y; if (e.isCSS3DObjectPlus) { const b = e; if (!b || b.mode !== "front") return; const R = (a = this.css3DRender.behindModeCSS3DRenderer.wrapper) != null ? a : J(this.five); R && (this.css3DObjectParentMap.set(b, b.parent), b.removeFromParent(), this.css3DRender.behindModeCSS3DRenderer.setWrapper(R), (y = this.css3DRender.getBehindCSS3DObjectGroup()) == null || y.add(b), this.css3DRender.render(this.five.camera)); } else e.isCSS3DObject && (this.css3DObjectModeMap.set(e, e.mode), e.mode = "behind"); }); } else { const o = p(p({}, this.getConfig(l.scaleHelper)), l), m = new Q(e, o), a = new S( this.five, C, T, e, m, o, v, H ); c.scaleController = a.helperController, s.push(() => a.dispose()); } return Object.values(c).forEach((o) => { o && typeof o.updateOtherControllers == "function" && o.updateOtherControllers(c); }), t.addControllers(c), this.objectHelperMap.set(e, { helper: t, disposers: s }), t.controllers; } removeObject3DHelper(e) { if (!this.objectHelperMap.has(e)) return; const { helper: r, disposers: t } = this.objectHelperMap.get(e); if (r) { if (e.isCSS3DObjectPlus) { const s = e, h = this.css3DObjectParentMap.get(s); h && h.add(s), this.css3DRender.render(this.five.camera); } else if (e.isCSS3DObject) { const s = this.css3DObjectModeMap.get(e); e.mode = s; } this.objectHelperMap.delete(e), r.dispose(), t == null || t.forEach((s) => s == null ? void 0 : s()); } } handleEnable(e, r = !0) { e ? (this.everyHelperDo((t) => t.enable()), this.hooks.emit("enable", { userAction: r })) : (this.everyHelperDo((t) => t.disable()), this.hooks.emit("disable", { userAction: r })), this.state.enabled = e; } handleVisible(e, r = !0) { e ? (this.everyHelperDo((t) => t.show()), this.actionIfStateIsEnabled(() => this.hooks.emit("show", { userAction: r }))) : (this.everyHelperDo((t) => t.hide()), this.actionIfStateIsEnabled(() => this.hooks.emit("hide", { userAction: r }))), this.state.visible = e; } handleDispose() { this.everyHelperDo((e, r) => { e.dispose(), r == null || r.forEach((t) => t == null ? void 0 : t()); }); } everyHelperDo(e) { this.objectHelperMap.forEach(({ helper: r, disposers: t }) => { r && e(r, t); }); } actionIfStateIsEnabled(e, r) { if (this.state.enabled) return e(); r != null && r.warnLog && te(); } getConfig(e) { if (e && typeof e != "boolean" && e.enable) return e; } } export { ir as Object3DHelperController, E as PLUGIN };