@realsee/dnalogel 4.0.0-webgpu.7 → 4.0.0-webgpu.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/floorplan.js +1 -1
  3. package/dist/index.js +20 -20
  4. package/dist/internal/{BasePlugin-Br1gjzFy.js → BasePlugin-DykvYZVy.js} +2 -2
  5. package/dist/internal/{BasePlugin-Br1gjzFy.js.map → BasePlugin-DykvYZVy.js.map} +1 -1
  6. package/dist/internal/BasePluginWithData-6nBdzY9e.js +7 -0
  7. package/dist/internal/{BasePluginWithData-Cz_hCIai.js.map → BasePluginWithData-6nBdzY9e.js.map} +1 -1
  8. package/dist/internal/{CSS3DObject-C9ck81UX.js → CSS3DObject-Bra0eAMf.js} +3 -2
  9. package/dist/internal/CSS3DObject-Bra0eAMf.js.map +1 -0
  10. package/dist/internal/{CSS3DRender-BKWjq-Mo.js → CSS3DRender-Du8bC8b8.js} +2 -2
  11. package/dist/internal/{CSS3DRender-BKWjq-Mo.js.map → CSS3DRender-Du8bC8b8.js.map} +1 -1
  12. package/dist/internal/{CSS3DRenderPlugin-CEatgl0m.js → CSS3DRenderPlugin-BuQ7tgJe.js} +3 -3
  13. package/dist/internal/{CSS3DRenderPlugin-CEatgl0m.js.map → CSS3DRenderPlugin-BuQ7tgJe.js.map} +1 -1
  14. package/dist/internal/{Controller-CyIcxTxN.js → Controller-Er0BrDv0.js} +4 -4
  15. package/dist/internal/{Controller-CyIcxTxN.js.map → Controller-Er0BrDv0.js.map} +1 -1
  16. package/dist/internal/{PointHelper-DIhgdjY2.js → PointHelper-qhcK4big.js} +10 -9
  17. package/dist/internal/{PointHelper-DIhgdjY2.js.map → PointHelper-qhcK4big.js.map} +1 -1
  18. package/dist/internal/{Rectangle-DnriNoRJ.js → Rectangle-B31n7TDh.js} +3 -3
  19. package/dist/internal/{Rectangle-DnriNoRJ.js.map → Rectangle-B31n7TDh.js.map} +1 -1
  20. package/dist/internal/{Work-ltxGwn4w.js → Work-XztRkc9j.js} +4 -4
  21. package/dist/internal/{Work-ltxGwn4w.js.map → Work-XztRkc9j.js.map} +1 -1
  22. package/dist/internal/{area-maker-6kaWjqeL.js → area-maker-bVre0AJ9.js} +2 -2
  23. package/dist/internal/{area-maker-6kaWjqeL.js.map → area-maker-bVre0AJ9.js.map} +1 -1
  24. package/dist/internal/{controller-Do-09Spx.js → controller-B-zFQPgF.js} +5 -5
  25. package/dist/internal/{controller-Do-09Spx.js.map → controller-B-zFQPgF.js.map} +1 -1
  26. package/dist/internal/{cruise-Bc8Uyi_j.js → cruise-jHbIppkf.js} +2 -2
  27. package/dist/internal/{cruise-Bc8Uyi_j.js.map → cruise-jHbIppkf.js.map} +1 -1
  28. package/dist/internal/{current-pano-image-CXiCqVoV.js → current-pano-image-DNfrkHuB.js} +2 -2
  29. package/dist/internal/{current-pano-image-CXiCqVoV.js.map → current-pano-image-DNfrkHuB.js.map} +1 -1
  30. package/dist/internal/{floorplan-BVvZ49A3.js → floorplan-RJYWsiTc.js} +2 -2
  31. package/dist/internal/{floorplan-BVvZ49A3.js.map → floorplan-RJYWsiTc.js.map} +1 -1
  32. package/dist/internal/{measure-B4jFwdQ6.js → measure-D6kvLcMk.js} +2 -2
  33. package/dist/internal/{measure-B4jFwdQ6.js.map → measure-D6kvLcMk.js.map} +1 -1
  34. package/dist/internal/{model-chassis-compass-C6NTVMLo.js → model-chassis-compass-rfKL38y2.js} +2 -1
  35. package/dist/internal/model-chassis-compass-rfKL38y2.js.map +1 -0
  36. package/dist/internal/{model-maker-C6fhkpcB.js → model-maker-Cu0GXliA.js} +2 -2
  37. package/dist/internal/{model-maker-C6fhkpcB.js.map → model-maker-Cu0GXliA.js.map} +1 -1
  38. package/dist/internal/{model-tv-video-BP-7HoDC.js → model-tv-video-E71WR84A.js} +2 -2
  39. package/dist/internal/{model-tv-video-BP-7HoDC.js.map → model-tv-video-E71WR84A.js.map} +1 -1
  40. package/dist/internal/object3d-helper-oTuySso1.js +7 -0
  41. package/dist/internal/{object3d-helper-1-TEtUKM.js.map → object3d-helper-oTuySso1.js.map} +1 -1
  42. package/dist/internal/{pano-compass-Bt9eAQQS.js → pano-compass-DfAPVSZU.js} +3 -3
  43. package/dist/internal/{pano-compass-Bt9eAQQS.js.map → pano-compass-DfAPVSZU.js.map} +1 -1
  44. package/dist/internal/{pano-door-label-KjaGohvA.js → pano-door-label-D9vCDCxJ.js} +2 -2
  45. package/dist/internal/{pano-door-label-KjaGohvA.js.map → pano-door-label-D9vCDCxJ.js.map} +1 -1
  46. package/dist/internal/{pano-measure-Cfe9RfWP.js → pano-measure-s-QZthZi.js} +3 -3
  47. package/dist/internal/{pano-measure-Cfe9RfWP.js.map → pano-measure-s-QZthZi.js.map} +1 -1
  48. package/dist/internal/{pano-spatial-tag-B7Gxn3BS.js → pano-spatial-tag-gwN_WDLJ.js} +2 -2
  49. package/dist/internal/{pano-spatial-tag-B7Gxn3BS.js.map → pano-spatial-tag-gwN_WDLJ.js.map} +1 -1
  50. package/dist/internal/{pano-tag-DeWr38_M.js → pano-tag-mnA3Y7eC.js} +2 -2
  51. package/dist/internal/{pano-tag-DeWr38_M.js.map → pano-tag-mnA3Y7eC.js.map} +1 -1
  52. package/dist/internal/{pano-video-CTlwzLiU.js → pano-video-CSb6bzy-.js} +2 -2
  53. package/dist/internal/{pano-video-CTlwzLiU.js.map → pano-video-CSb6bzy-.js.map} +1 -1
  54. package/dist/internal/{pipeline-BqVMSO6-.js → pipeline-CdRT0_qH.js} +2 -2
  55. package/dist/internal/{pipeline-BqVMSO6-.js.map → pipeline-CdRT0_qH.js.map} +1 -1
  56. package/dist/internal/{sculpt-E8oyJAik.js → sculpt-BXBzzG_D.js} +3 -3
  57. package/dist/internal/{sculpt-E8oyJAik.js.map → sculpt-BXBzzG_D.js.map} +1 -1
  58. package/dist/plugins/area-maker.js +1 -1
  59. package/dist/plugins/cruise.js +2 -2
  60. package/dist/plugins/css3d-render.js +1 -1
  61. package/dist/plugins/current-pano-image.js +1 -1
  62. package/dist/plugins/guide-line.js +1 -1
  63. package/dist/plugins/measure.js +1 -1
  64. package/dist/plugins/model-chassis-compass.js +1 -1
  65. package/dist/plugins/model-maker.js +1 -1
  66. package/dist/plugins/model-tv-video.js +1 -1
  67. package/dist/plugins/object3d-helper.js +2 -2
  68. package/dist/plugins/pano-compass.js +1 -1
  69. package/dist/plugins/pano-door-label.js +1 -1
  70. package/dist/plugins/pano-measure.js +1 -1
  71. package/dist/plugins/pano-spatial-tag.js +1 -1
  72. package/dist/plugins/pano-tag.js +2 -2
  73. package/dist/plugins/pano-video.js +1 -1
  74. package/dist/plugins/pipeline.js +1 -1
  75. package/dist/plugins/sculpt.js +2 -2
  76. package/dist/types/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +1 -2
  77. package/dist/types/shared-utils/CSS3DRender/index.d.ts +1 -2
  78. package/dist/types/shared-utils/three/CSS3DRenderer/index.d.ts +2 -3
  79. package/dist/types/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +1 -0
  80. package/dist/utils.js +1 -1
  81. package/package.json +1 -1
  82. package/dist/internal/BasePluginWithData-Cz_hCIai.js +0 -7
  83. package/dist/internal/CSS3DObject-C9ck81UX.js.map +0 -1
  84. package/dist/internal/model-chassis-compass-C6NTVMLo.js.map +0 -1
  85. package/dist/internal/object3d-helper-1-TEtUKM.js +0 -7
@@ -1,5 +1,4 @@
1
1
  import { CSS3DRenderer } from '../three/CSS3DRenderer/index.js';
2
- import { CSS3DObjectPlus } from './CSS3DObject.js';
3
2
  import type * as THREE from 'three/webgpu';
4
3
  export declare class ICSS3DRenderer extends CSS3DRenderer {
5
4
  wrapper?: Element;
@@ -11,7 +10,7 @@ export declare class ICSS3DRenderer extends CSS3DRenderer {
11
10
  setWrapper(wrapper: Element): this;
12
11
  appendToElement(wrapper: Element): void;
13
12
  renderEveryFrame(scene: THREE.Scene, camera: THREE.Camera): void;
14
- renderCss3dObjectEveryFrame(scenes: THREE.Scene[] | Map<string, THREE.Scene | CSS3DObjectPlus> | (() => Iterable<THREE.Scene | CSS3DObjectPlus>), camera: THREE.Camera): void;
13
+ renderCss3dObjectEveryFrame(scenes: THREE.Object3D[] | Map<string, THREE.Object3D> | (() => Iterable<THREE.Object3D>), camera: THREE.Camera): void;
15
14
  stopRender(): void;
16
15
  dispose(): void;
17
16
  }
@@ -1,7 +1,6 @@
1
1
  import { Five } from '@realsee/five-webgpu';
2
- import { CSS3DObjectPlus } from './CSS3DObject.js';
3
2
  import type * as THREE from 'three/webgpu';
4
- type CSSScene = THREE.Scene | CSS3DObjectPlus;
3
+ type CSSScene = THREE.Object3D;
5
4
  /** Add a front scene; the optional owner keeps identical keys in separate Five sessions. */
6
5
  export declare function addFrontScene(scene: CSSScene, key?: string, five?: Five): boolean;
7
6
  export declare function removeFrontScene(sceneOrKey: CSSScene | string, five?: Five): boolean;
@@ -1,5 +1,4 @@
1
1
  import { Object3D, Scene, Camera } from 'three/webgpu';
2
- import { CSS3DObjectPlus } from '../../CSS3DRender/CSS3DObject.js';
3
2
  export declare class CSS3DObject extends Object3D {
4
3
  element: HTMLElement;
5
4
  onBeforeRender: (renderer: unknown, scene: Scene, camera: Camera) => void;
@@ -17,6 +16,6 @@ export declare class CSS3DRenderer {
17
16
  height: number;
18
17
  };
19
18
  setSize(width: number, height: number): void;
20
- render(scene: Scene, camera: Camera): void;
21
- sceneRender(scenes: Scene[] | CSS3DObjectPlus[], camera: Camera): void;
19
+ render(scene: Object3D, camera: Camera): void;
20
+ sceneRender(scenes: Object3D[], camera: Camera): void;
22
21
  }
@@ -15,6 +15,7 @@ declare function createRingMesh(): THREE.Mesh<THREE.RingGeometry, THREE.MeshBasi
15
15
  declare function createBallMesh(): THREE.Mesh<THREE.SphereGeometry, THREE.MeshBasicMaterial, THREE.Object3DEventMap>;
16
16
  declare function createCSSBallMesh(): ICSS3DSprite;
17
17
  export declare class PointHelper2 extends THREE.Object3D implements PointHelperAbstract {
18
+ private readonly five;
18
19
  disableGetPixel: boolean;
19
20
  planeMesh: ReturnType<typeof createPlaneMesh>;
20
21
  ringMesh: ReturnType<typeof createRingMesh>;
package/dist/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./internal/transformPosition-Cc92Wf0o.js";
2
2
  import { t } from "./internal/Subscribe-DLlAl88n.js";
3
- import { a as n, f as r, r as i } from "./internal/PointHelper-DIhgdjY2.js";
3
+ import { a as n, f as r, r as i } from "./internal/PointHelper-qhcK4big.js";
4
4
  import { a, d as o, f as s, t as c } from "./internal/generatePolygonGeometry-BOnzdCaG.js";
5
5
  import { n as l } from "./internal/fiveModelLoad-BUIBYxzp.js";
6
6
  import { a as u, i as d, n as f, t as p } from "./internal/util-vGeVT4oo.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realsee/dnalogel",
3
- "version": "4.0.0-webgpu.7",
3
+ "version": "4.0.0-webgpu.9",
4
4
  "author": "REALSEE-DEVELOPER",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,7 +0,0 @@
1
- import { t as e } from "./BasePlugin-Br1gjzFy.js";
2
- //#region src/base/BasePluginWithData.ts
3
- var t = class extends e {};
4
- //#endregion
5
- export { t };
6
-
7
- //# sourceMappingURL=BasePluginWithData-Cz_hCIai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CSS3DObject-C9ck81UX.js","names":["OpacityMesh","Subscribe","centerPoint","getObjectVisible","isNil","THREE","CSS3DObject","Object3D","element","object","CSS3DSprite","CSS3DRenderer","_this","_width","_height","_widthHalf","_heightHalf","matrix","Matrix4","cache","domElement","cameraElement","width","height","epsilon","value","getCameraCSSMatrix","elements","getObjectCSSMatrix","hideObject","objectMode","mode","i","l","hasHiddenAncestor","parent","renderObject","scene","flag","visible","camera","style","cameraCSSMatrix","cachedObject","objectData","fov","tx","ty","scenes","even","roundNum","num","config","createResizeObserver","resizeObserverHandler","observer","fireImmediately","ICSS3DRenderer","wrapper","oldWrapper","observe","unobserve","_render","behindFiveElements","getBehindFiveElement","existing","five","generateBehindFiveElement","checkElement","behind","position","OpecityMesh","material","geometry","VERSION","NAME","MinRatio","CSS3DObjectPlus","params","container","cornerPoints","halfWidth","Vector3","ratio","dpr","pointerEvents","realRatio","planeWidth","planeHeight","domWidthPx","domHeightPx","centerPosition","css3DObjectElement","scale","targetVector01","targetVector03","targetNormal","up","targetUp","rotateAxis","opacityMesh","quaternion","css3DObject","mesh"],"sources":["../../src/shared-utils/three/CSS3DRenderer/index.js","../../src/shared-utils/even.ts","../../src/shared-utils/createResizeObserver.ts","../../src/shared-utils/CSS3DRender/CSS3DRenderer.ts","../../src/CSS3DRenderPlugin/utils/generateBehindFiveElement.ts","../../src/shared-utils/CSS3DRender/OpacityMesh.ts","../../src/CSS3DRenderPlugin/utils/three/CSS3DObject.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\n * @author mrdoob / http://mrdoob.com/\n * @author yomotsu / https://yomotsu.net/\n */\n\nimport { Matrix4, Object3D } from 'three/webgpu'\n\nclass CSS3DObject extends Object3D {\n constructor(element) {\n super()\n\n this.element = element\n this.element.style.position = 'absolute'\n this.element.style.pointerEvents = 'auto'\n this.element.style.userSelect = 'none'\n\n this.element.setAttribute('draggable', false)\n\n this.addEventListener('removed', function () {\n this.traverse(function (object) {\n if (object.element instanceof Element && object.element.parentNode !== null) {\n object.element.remove()\n }\n })\n })\n }\n}\n\nclass CSS3DSprite extends CSS3DObject {}\n\nlet CSS3DRenderer = function (mode /** 'front' | 'behind' */) {\n let _this = this\n\n let _width\n let _height\n let _widthHalf\n let _heightHalf\n\n let matrix = new Matrix4()\n\n let cache = {\n camera: { fov: 0, style: '' },\n objects: new Map(),\n }\n\n let domElement = document.createElement('div')\n domElement.style.overflow = 'hidden'\n\n this.domElement = domElement\n\n let cameraElement = document.createElement('div')\n\n cameraElement.style.WebkitTransformStyle = 'preserve-3d'\n cameraElement.style.transformStyle = 'preserve-3d'\n cameraElement.style.pointerEvents = 'none'\n\n domElement.appendChild(cameraElement)\n\n this.getSize = function () {\n return {\n width: _width,\n height: _height,\n }\n }\n\n this.setSize = function (width, height) {\n _width = width\n _height = height\n _widthHalf = _width / 2\n _heightHalf = _height / 2\n\n domElement.style.width = width + 'px'\n domElement.style.height = height + 'px'\n\n cameraElement.style.width = width + 'px'\n cameraElement.style.height = height + 'px'\n }\n\n function epsilon(value) {\n return Math.abs(value) < 1e-10 ? 0 : value\n }\n\n function getCameraCSSMatrix(matrix) {\n let elements = matrix.elements\n\n return (\n 'matrix3d(' +\n epsilon(elements[0]) +\n ',' +\n epsilon(-elements[1]) +\n ',' +\n epsilon(elements[2]) +\n ',' +\n epsilon(elements[3]) +\n ',' +\n epsilon(elements[4]) +\n ',' +\n epsilon(-elements[5]) +\n ',' +\n epsilon(elements[6]) +\n ',' +\n epsilon(elements[7]) +\n ',' +\n epsilon(elements[8]) +\n ',' +\n epsilon(-elements[9]) +\n ',' +\n epsilon(elements[10]) +\n ',' +\n epsilon(elements[11]) +\n ',' +\n epsilon(elements[12]) +\n ',' +\n epsilon(-elements[13]) +\n ',' +\n epsilon(elements[14]) +\n ',' +\n epsilon(elements[15]) +\n ')'\n )\n }\n\n function getObjectCSSMatrix(matrix, cameraCSSMatrix) {\n let elements = matrix.elements\n let matrix3d =\n 'matrix3d(' +\n epsilon(elements[0]) +\n ',' +\n epsilon(elements[1]) +\n ',' +\n epsilon(elements[2]) +\n ',' +\n epsilon(elements[3]) +\n ',' +\n epsilon(-elements[4]) +\n ',' +\n epsilon(-elements[5]) +\n ',' +\n epsilon(-elements[6]) +\n ',' +\n epsilon(-elements[7]) +\n ',' +\n epsilon(elements[8]) +\n ',' +\n epsilon(elements[9]) +\n ',' +\n epsilon(elements[10]) +\n ',' +\n epsilon(elements[11]) +\n ',' +\n epsilon(elements[12]) +\n ',' +\n epsilon(elements[13]) +\n ',' +\n epsilon(elements[14]) +\n ',' +\n epsilon(elements[15]) +\n ')'\n\n return 'translate(-50%,-50%)' + matrix3d\n }\n\n function hideObject(object) {\n if (object.isCSS3DObject) {\n const objectMode = object.mode ?? 'front'\n if (!mode || objectMode === mode) {\n object.element.style.display = 'none'\n }\n }\n\n for (let i = 0, l = object.children.length; i < l; i++) {\n hideObject(object.children[i])\n }\n }\n\n // Registered CSS roots can be children of a normal Three Group. Rendering\n // one directly must still respect that group's visibility, including a root\n // registered or populated after the group was hidden.\n function hasHiddenAncestor(object) {\n for (let parent = object.parent; parent; parent = parent.parent) {\n if (parent.visible === false) return true\n }\n return false\n }\n\n function renderObject(object, scene, camera, cameraCSSMatrix, flag) {\n if (object.visible === false || (object === scene && hasHiddenAncestor(object))) {\n hideObject(object)\n\n return\n }\n\n if (object.isCSS3DObject) {\n const objectMode = object.mode ?? 'front'\n if (mode && objectMode !== mode) return\n object.flag = flag\n\n const visible = object.layers.test(camera.layers) === true\n\n const element = object.element\n element.style.display = visible === true ? '' : 'none'\n\n if (visible) {\n object.onBeforeRender(_this, scene, camera)\n\n let style\n\n if (object.isCSS3DSprite) {\n // http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\n\n matrix.copy(camera.matrixWorldInverse)\n matrix.transpose()\n matrix.copyPosition(object.matrixWorld)\n matrix.scale(object.scale)\n\n matrix.elements[3] = 0\n matrix.elements[7] = 0\n matrix.elements[11] = 0\n matrix.elements[15] = 1\n\n style = getObjectCSSMatrix(matrix, cameraCSSMatrix)\n } else {\n style = getObjectCSSMatrix(object.matrixWorld, cameraCSSMatrix)\n }\n\n let cachedObject = cache.objects.get(object)\n\n if (cachedObject === undefined || cachedObject.style !== style) {\n element.style.WebkitTransform = style\n element.style.transform = style\n\n let objectData = { style: style }\n\n cache.objects.set(object, objectData)\n }\n\n element.style.display = object.visible ? '' : 'none'\n\n if (element.parentNode !== cameraElement) {\n cameraElement.appendChild(element)\n }\n\n object.onAfterRender(_this, scene, camera)\n }\n }\n\n for (let i = 0, l = object.children.length; i < l; i++) {\n renderObject(object.children[i], scene, camera, cameraCSSMatrix, flag)\n }\n }\n\n this.render = function (scene, camera) {\n let fov = camera.projectionMatrix.elements[5] * _heightHalf\n\n if (cache.camera.fov !== fov) {\n if (camera.isPerspectiveCamera) {\n domElement.style.WebkitPerspective = fov + 'px'\n domElement.style.perspective = fov + 'px'\n } else {\n domElement.style.WebkitPerspective = ''\n domElement.style.perspective = ''\n }\n\n cache.camera.fov = fov\n }\n\n if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld()\n if (camera.parent === null) camera.updateMatrixWorld()\n\n if (camera.isOrthographicCamera) {\n var tx = -(camera.right + camera.left) / 2\n var ty = (camera.top + camera.bottom) / 2\n }\n\n let cameraCSSMatrix = camera.isOrthographicCamera\n ? 'scale(' +\n fov +\n ')' +\n 'translate(' +\n epsilon(tx) +\n 'px,' +\n epsilon(ty) +\n 'px)' +\n getCameraCSSMatrix(camera.matrixWorldInverse)\n : 'translateZ(' + fov + 'px)' + getCameraCSSMatrix(camera.matrixWorldInverse)\n\n let style = cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)'\n\n if (cache.camera.style !== style) {\n cameraElement.style.WebkitTransform = style\n cameraElement.style.transform = style\n\n cache.camera.style = style\n }\n\n const flag = scene.uuid + '_' + performance.now().toString()\n renderObject(scene, scene, camera, cameraCSSMatrix, flag)\n\n cache.objects.forEach(function (objectData, object) {\n if (object.flag !== flag) {\n // Another renderer may already own this object's DOM after reparenting.\n if (object.element.parentNode === cameraElement) object.element.remove()\n cache.objects.delete(object)\n }\n })\n }\n\n this.sceneRender = function (scenes, camera) {\n let fov = camera.projectionMatrix.elements[5] * _heightHalf\n\n if (cache.camera.fov !== fov) {\n if (camera.isPerspectiveCamera) {\n domElement.style.WebkitPerspective = fov + 'px'\n domElement.style.perspective = fov + 'px'\n } else {\n domElement.style.WebkitPerspective = ''\n domElement.style.perspective = ''\n }\n\n cache.camera.fov = fov\n }\n\n // if (scene.autoUpdate === true) scene.updateMatrixWorld()\n if (camera.parent === null) camera.updateMatrixWorld()\n\n if (camera.isOrthographicCamera) {\n var tx = -(camera.right + camera.left) / 2\n var ty = (camera.top + camera.bottom) / 2\n }\n\n let cameraCSSMatrix = camera.isOrthographicCamera\n ? 'scale(' +\n fov +\n ')' +\n 'translate(' +\n epsilon(tx) +\n 'px,' +\n epsilon(ty) +\n 'px)' +\n getCameraCSSMatrix(camera.matrixWorldInverse)\n : 'translateZ(' + fov + 'px)' + getCameraCSSMatrix(camera.matrixWorldInverse)\n\n let style = cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)'\n\n if (cache.camera.style !== style) {\n cameraElement.style.WebkitTransform = style\n cameraElement.style.transform = style\n\n cache.camera.style = style\n }\n const flag = performance.now().toString()\n\n scenes.forEach((scene) => {\n if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld()\n renderObject(scene, scene, camera, cameraCSSMatrix, flag)\n })\n\n cache.objects.forEach(function (objectData, object) {\n if (object.flag !== flag) {\n // Another renderer may already own this object's DOM after reparenting.\n if (object.element.parentNode === cameraElement) object.element.remove()\n cache.objects.delete(object)\n }\n })\n }\n}\n\nexport { CSS3DRenderer, CSS3DObject, CSS3DSprite }\n","/**\n * @description: 获取一个数字的最近的偶数\n * @param { number } num\n * @param { boolean } config.floor 是否取较小的偶数,默认为false,即取较大的偶数\n * @return { number } 返回一个偶数\n */\nexport function even(num: number, config?: { floor?: boolean }): number {\n const roundNum = Math.round(num)\n return roundNum % 2 === 0 ? roundNum : roundNum + Number(config?.floor ? -1 : 1)\n}\n","import { even } from './even'\n\nexport default function createResizeObserver(\n element: Element,\n resizeHandler: (width: number, height: number) => any,\n fireImmediately = true,\n) {\n if (!element) {\n console.error('createResizeObserver: element is undefined')\n return { observe: () => {}, unobserve: () => {} }\n }\n\n const resizeObserverHandler = () => {\n /**\n * 这里even策略是遇到奇数会加1,在某些浏览器中会触发滚动条显示,导致fiveElement变小,fiveElement变小又触发了这里的resize,宽高变小,滚动条消失,然后又触发resize。。。无限循环\n * 所以为了规避上面这种情况,even设置了一个参数,遇到奇数可选择减一\n */\n const width = even(element.clientWidth, { floor: true })\n const height = even(element.clientHeight, { floor: true })\n resizeHandler(width, height)\n }\n\n if (typeof ResizeObserver === 'undefined' || !ResizeObserver) {\n console.warn('createResizeObserver: ResizeObserver is undefined')\n return { observe: () => resizeObserverHandler(), unobserve: () => {} }\n }\n\n const observer = new ResizeObserver(resizeObserverHandler)\n if (fireImmediately) resizeObserverHandler()\n return {\n observe: () => observer.observe(element),\n unobserve: () => observer.unobserve(element),\n }\n}\n","import type * as THREE from 'three/webgpu'\nimport { CSS3DRenderer } from '../three/CSS3DRenderer' // version 117\nimport createResizeObserver from '../createResizeObserver'\nimport type { CSS3DObjectPlus } from './CSS3DObject'\n\nexport class ICSS3DRenderer extends CSS3DRenderer {\n public wrapper?: Element\n\n public domElementWrapper = document.createElement('div')\n\n private requestAnimationFrameId?: number\n\n private resizeDisoper?: () => void\n\n private disposed = false\n\n public constructor(mode?: 'front' | 'behind') {\n super(mode)\n this.domElementWrapper.classList.add('ICSS3DRendererWrapper')\n this.domElementWrapper.style.position = 'absolute'\n this.domElementWrapper.style.top = '0'\n this.domElementWrapper.style.left = '0'\n this.domElementWrapper.style.width = '100%'\n this.domElementWrapper.style.height = '100%'\n this.domElementWrapper.style.userSelect = 'none'\n this.domElementWrapper.style.pointerEvents = 'none'\n\n this.domElement.classList.add('ICSS3DRenderer')\n this.domElement.style.position = 'absolute'\n this.domElement.style.top = '0'\n this.domElement.style.left = '0'\n this.domElement.style.userSelect = 'none'\n this.domElement.style.pointerEvents = 'none'\n\n this.domElementWrapper.appendChild(this.domElement)\n }\n\n public setWrapper(wrapper: Element) {\n if (!wrapper) throw new Error('CSS3DRenderer: wrapper is required')\n\n const contain = (() => {\n for (let i = 0; i < wrapper.children.length; i++) {\n const child = wrapper.children.item(i)\n if (child === this.domElementWrapper) return true\n }\n return false\n })()\n if (contain) return\n\n const oldWrapper = this.wrapper\n if (oldWrapper) {\n if (oldWrapper.contains(this.domElementWrapper)) {\n this.domElementWrapper.remove()\n }\n }\n this.appendToElement(wrapper)\n this.wrapper = wrapper\n return this\n }\n\n public appendToElement(wrapper: Element) {\n if (this.disposed) return\n this.resizeDisoper?.()\n wrapper.appendChild(this.domElementWrapper)\n const reSize = (width: number, height: number) => this.setSize(width, height)\n const { observe, unobserve } = createResizeObserver(this.domElementWrapper, reSize, true)\n observe()\n this.resizeDisoper = unobserve\n this.wrapper = wrapper\n }\n\n public renderEveryFrame(scene: THREE.Scene, camera: THREE.Camera) {\n if (!this.wrapper)\n console.warn('wrapper is not find, creating a html element and call setWrapper(wrapper)', this, scene)\n if (this.disposed || this.requestAnimationFrameId !== undefined) return\n const _render = () => {\n if (this.disposed) return\n this.requestAnimationFrameId = requestAnimationFrame(_render)\n if (!scene.visible) return\n this.render(scene, camera)\n }\n _render()\n }\n\n public renderCss3dObjectEveryFrame(\n scenes:\n | THREE.Scene[]\n | Map<string, THREE.Scene | CSS3DObjectPlus>\n | (() => Iterable<THREE.Scene | CSS3DObjectPlus>),\n camera: THREE.Camera,\n ) {\n if (!this.wrapper)\n console.warn('wrapper is not find, creating a html element and call setWrapper(wrapper)', this, scenes)\n if (this.disposed || this.requestAnimationFrameId !== undefined) return\n const _render = () => {\n if (this.disposed) return\n this.requestAnimationFrameId = requestAnimationFrame(_render)\n\n if (Array.isArray(scenes)) {\n // 处理数组形式\n scenes.forEach((scene) => {\n if (scene.visible) {\n this.render(scene, camera)\n }\n })\n } else {\n // 处理 Map 对象形式\n this.sceneRender(Array.from(typeof scenes === 'function' ? scenes() : scenes.values()) as any, camera)\n }\n }\n _render()\n }\n\n public stopRender() {\n if (this.requestAnimationFrameId !== undefined) {\n cancelAnimationFrame(this.requestAnimationFrameId)\n this.requestAnimationFrameId = undefined\n }\n }\n\n public dispose() {\n if (this.disposed) return\n this.disposed = true\n this.stopRender()\n this.resizeDisoper?.()\n this.resizeDisoper = undefined\n this.wrapper = undefined\n this.domElementWrapper.remove()\n }\n}\n","import type { Five } from '@realsee/five-webgpu'\n\nconst behindFiveElements = new WeakMap<Five, HTMLDivElement>()\n\nfunction getBehindFiveElement(five: Five) {\n const existing = behindFiveElements.get(five)\n if (existing) return existing\n const element = document.createElement('div')\n element.classList.add('behindFiveElement')\n Object.assign(element.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n })\n behindFiveElements.set(five, element)\n return element\n}\n\nexport default function generateBehindFiveElement(five: Five) {\n const element =\n checkElement(five.getElement()) ??\n checkElement(five.getElement()?.parentElement) ??\n checkElement(five.getElement()?.parentElement?.parentElement)\n const wrapper = element?.parentElement\n if (!wrapper || !element) {\n console.error(\n 'Can not find a valid element to insert behindFiveElement. How to fix it: https://github.com/realsee-developer/dnalogel/tree/main/plugins/src/CSS3DRenderPlugin/README.md',\n )\n return\n }\n\n const behind = getBehindFiveElement(five)\n if (!wrapper.contains(behind)) wrapper.insertBefore(behind, element)\n return behind\n}\n\nfunction checkElement(element?: HTMLElement | null) {\n if (!element) return\n\n const position = element.style.position || getComputedStyle(element).position\n if (position !== 'fixed' && position !== 'absolute' && position !== 'relative') return\n\n const style = getComputedStyle(element)\n const backgroundNotTransparent =\n style.backgroundColor !== 'transparent' &&\n style.backgroundColor !== 'rgba(0, 0, 0, 0)' &&\n style.backgroundColor !== ''\n if (backgroundNotTransparent) return\n if (style.backgroundImage !== 'none' && style.backgroundImage !== '') return\n return element\n}\n\nexport { generateBehindFiveElement }\n","import * as THREE from 'three/webgpu'\n\nexport default class OpecityMesh extends THREE.Mesh {\n public name = 'opacity-mesh'\n\n public constructor(width: number, height: number) {\n const material = new THREE.MeshBasicMaterial({ opacity: 0, color: 0x000000, transparent: false, side: THREE.DoubleSide })\n const geometry = new THREE.PlaneGeometry(width, height)\n super(geometry, material)\n }\n\n public removeFromParent() {\n const parent = this.parent\n\n if (parent !== null) {\n parent.remove(this)\n }\n\n return this\n }\n}\n","import type { Matrix4, Quaternion, Scene } from 'three/webgpu'\nimport { Vector3 } from 'three/webgpu'\nimport { even } from '../../../shared-utils/even'\nimport { Subscribe } from '../../../shared-utils/Subscribe'\nimport OpacityMesh from '../../../shared-utils/CSS3DRender/OpacityMesh'\nimport { centerPoint } from '../../../shared-utils/three/centerPoint'\nimport { getObjectVisible } from '../../../shared-utils/three/getObjectVisible'\nimport { isNil } from '../../../shared-utils'\nimport { CSS3DObject } from '../../../shared-utils/three/CSS3DRenderer'\n\n/**\n * @changelog\n * - 1: Fix rotate\n * - 0: Add `applyScaleMatrix4` method, Rewrite `applyQuaternion` and `applyMatrix4` method\n */\nconst VERSION = 1\n\nconst NAME = `CSS3DObjectPlus@${VERSION}`\n\nexport const MinRatio = 0.00216\n\nexport const DefaultRatio = 0.003\n\nexport type Mode = 'front' | 'behind'\n\nexport type CornerPoints = [Vector3, Vector3, Vector3, Vector3]\n\n\nexport type CSS3DRenderEventMap = {\n applyMatrix4: (matrix: Matrix4) => void\n applyQuaternion: (quaternion: Quaternion) => void\n applyScaleMatrix4: (matrix: Matrix4) => void\n}\n\nexport class CSS3DObjectPlus<T extends HTMLElement = HTMLElement> extends CSS3DObject {\n public version = VERSION\n public readonly isCSS3DObjectPlus: true = true\n public readonly isCSS3DObject: true = true\n public name: string = NAME\n\n public container: T\n public width: number\n public height: number\n public domWidthPx: number\n public domHeightPx: number\n public cornerPoints: CornerPoints\n public centerPosition: Vector3\n public ratio: number\n public mode: 'front' | 'behind' = 'front'\n\n public readonly hooks: Subscribe<CSS3DRenderEventMap> = new Subscribe()\n\n public opacityMesh?: OpacityMesh\n\n private selfVisible = true\n\n public constructor(params: {\n container?: T\n mode?: 'front' | 'behind'\n width?: number\n cornerPoints?: CornerPoints\n ratio?: number\n dpr?: number\n pointerEvents?: 'none' | 'auto'\n style?: Partial<CSSStyleDeclaration>\n }) {\n if (isNil(params.cornerPoints) && isNil(params.width)) {\n throw new Error('cornerPoints and width cannot be both empty')\n }\n const container = params.container ?? (document.createElement('div') as unknown as T)\n const cornerPoints =\n params.cornerPoints ??\n (() => {\n const halfWidth = params.width / 2\n return [\n new Vector3(-halfWidth, halfWidth, 0),\n new Vector3(-halfWidth, -halfWidth, 0),\n new Vector3(halfWidth, -halfWidth, 0),\n new Vector3(halfWidth, halfWidth, 0),\n ]\n })()\n const ratio = params.ratio ?? DefaultRatio\n const dpr = params.dpr ?? 1\n const pointerEvents = params.pointerEvents ?? 'auto'\n\n const realRatio = Math.max(MinRatio, ratio)\n const planeWidth = cornerPoints[0].distanceTo(cornerPoints[1])\n const planeHeight = cornerPoints[1].distanceTo(cornerPoints[2])\n const domWidthPx = even((planeWidth / ratio) * dpr)\n const domHeightPx = even((planeHeight / ratio) * dpr)\n const centerPosition = centerPoint(...cornerPoints)\n\n let css3DObjectElement: HTMLElement\n\n if (realRatio === ratio) {\n container.style.width = `${domWidthPx}px`\n container.style.height = `${domHeightPx}px`\n\n css3DObjectElement = container\n } else {\n // 兼容ratio小于0.00216的情况\n const element = document.createElement('div')\n element.style.width = `${domWidthPx}px`\n element.style.height = `${domHeightPx}px`\n element.style.pointerEvents = 'none'\n\n const scale = ratio / realRatio\n container.style.position = 'absolute'\n container.style.left = '0'\n container.style.top = '0'\n container.style.width = `${scale * domWidthPx}px`\n container.style.height = `${scale * domHeightPx}px`\n element.appendChild(container)\n\n css3DObjectElement = element\n }\n\n super(css3DObjectElement)\n\n // 注意设置pointerEvents要在super之后,否则会被覆盖\n container.style.pointerEvents = pointerEvents\n Object.assign(container.style, params.style)\n\n this.scale.set(realRatio, realRatio, realRatio)\n\n // set public property\n this.cornerPoints = cornerPoints\n this.ratio = ratio\n this.container = container\n if (params.mode) this.mode = params.mode\n\n if (realRatio === ratio) {\n this.width = planeWidth\n this.height = planeHeight\n this.domWidthPx = domWidthPx\n this.domHeightPx = domHeightPx\n this.centerPosition = centerPosition\n } else {\n const scale = ratio / realRatio\n\n this.width = scale * planeWidth\n this.height = scale * planeHeight\n this.domWidthPx = scale * domWidthPx\n this.domHeightPx = scale * domHeightPx\n this.centerPosition = new Vector3().subVectors(centerPosition, cornerPoints[0]).multiplyScalar(scale).add(cornerPoints[0])\n }\n // end\n\n container.classList.add(`${NAME}__container`)\n\n const targetVector01 = new Vector3().subVectors(cornerPoints[1], cornerPoints[0]) // 点0 -> 点1 的向量\n const targetVector03 = new Vector3().subVectors(cornerPoints[3], cornerPoints[0]) // 点0 -> 点3 的向量\n\n // 旋转法向量\n const targetNormal = new Vector3().crossVectors(targetVector01, targetVector03).normalize() // 旋转后的法向量\n this.lookAt(targetNormal)\n\n // 绕法向量旋转\n const up = this.up.clone().applyQuaternion(this.quaternion)\n const targetUp = targetVector03.clone()\n const rotateAxis = new Vector3().crossVectors(up, targetUp).normalize() // 计算旋转轴\n this.rotateOnWorldAxis(rotateAxis, up.angleTo(targetUp))\n\n // set position\n this.position.copy(centerPosition)\n\n // listener\n this.addEventListener('added', () => {\n if (this.mode === 'front') this.opacityMesh?.removeFromParent()\n })\n\n this.addEventListener('removed', () => {\n this.opacityMesh?.removeFromParent()\n })\n }\n\n public setVisible = (visible: boolean) => {\n this.selfVisible = visible\n\n this.visible = getObjectVisible(this.parent) && this.selfVisible\n\n if (this.opacityMesh) this.opacityMesh.visible = this.visible\n }\n\n public updateVisible = () => {\n this.setVisible(this.selfVisible)\n }\n\n public removeFromParent() {\n const parent = this.parent\n if (parent !== null) {\n parent.remove(this)\n }\n this.opacityMesh?.removeFromParent()\n return this\n }\n\n public removeOpacityMesh() {\n this.opacityMesh?.removeFromParent()\n this.opacityMesh = undefined\n return this\n }\n\n public dispose() {\n this.container.remove()\n this.removeFromParent()\n this.opacityMesh?.removeFromParent()\n }\n\n public getOpacityMesh() {\n if (this.opacityMesh) return this.opacityMesh\n else {\n const opacityMesh = this.createOpacityMesh(this)\n this.opacityMesh = opacityMesh\n return opacityMesh\n }\n }\n\n public applyMatrix4(matrix: Matrix4): void {\n super.applyMatrix4(matrix)\n this.opacityMesh?.applyMatrix4(matrix)\n }\n\n public applyQuaternion(quaternion: Quaternion) {\n super.applyQuaternion(quaternion)\n this.opacityMesh?.applyQuaternion(quaternion)\n return this\n }\n\n public applyScaleMatrix4(matrix: Matrix4) {\n this.scale.applyMatrix4(matrix)\n this.opacityMesh?.scale.applyMatrix4(matrix)\n }\n\n /**\n * @description: 生成透明Mesh\n */\n private createOpacityMesh = (css3DObject: CSS3DObjectPlus) => {\n const { domWidthPx, domHeightPx } = css3DObject\n const mesh = new OpacityMesh(domWidthPx, domHeightPx)\n mesh.position.copy(css3DObject.position)\n mesh.rotation.copy(css3DObject.rotation)\n mesh.scale.copy(css3DObject.scale)\n return mesh\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-chassis-compass-C6NTVMLo.js","names":["MODEL_CHASSIS_COMPASS_DEFAULT_MODEL","FBXLoader","THREE","genRotationMatrix","matrix","euler","x","y","z","bject3d2LocalMatrix","scale","mesh","rotation","position","ModelChassisCompassPlugin","defaultFbxUrl","params","defaultNorthRad","state","northRad","disposed","generation","enabled","updateObjectMatrix","load","request","fbxUrl","data","object","disposeOwnedObject","transformToMeshBasicMaterial","enable","onCameraUpdate","getPositionY","latitude","ratio","five","disable","bounding","xOffset","zOffset","maxOffset","xMax","zMax","xMin","yMin","zMin","dispose"],"sources":["../../src/shared-utils/object3d2LocalMatrix.ts","../../src/ModelChassisCompassPlugin/Plugin.ts"],"sourcesContent":["import * as THREE from 'three/webgpu'\n\nexport const genRotationMatrix = (x: number, y: number, z: number) => {\n const matrix = new THREE.Matrix4()\n const euler = new THREE.Euler(x, y, z, 'YXZ')\n matrix.makeRotationFromEuler(euler)\n return matrix\n}\n\nconst bject3d2LocalMatrix = (\n mesh: THREE.Object3D,\n {\n scale,\n rotation,\n position,\n }: {\n scale: number\n rotation: number[]\n position: { x: number; y: number; z: number }\n },\n) => {\n if (scale) {\n mesh.scale.set(scale, scale, scale)\n }\n if (rotation) {\n const [x, y, z] = rotation\n if (x) {\n mesh.applyMatrix4(genRotationMatrix(x, 0, 0))\n }\n if (y) {\n mesh.applyMatrix4(genRotationMatrix(0, y, 0))\n }\n if (z) {\n mesh.applyMatrix4(genRotationMatrix(0, 0, z))\n }\n }\n if (position) {\n mesh.position.set(position.x, position.y, position.z)\n }\n return mesh\n}\n\nexport default bject3d2LocalMatrix\n","import type { Five, FivePlugin } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\nimport object3d2LocalMatrix from '../shared-utils/object3d2LocalMatrix'\nimport transformToMeshBasicMaterial from '../shared-utils/three/transformToMeshBasicMaterial'\nimport { FBXLoader } from '../shared-utils/three/FBXLoader'\nimport { disposeOwnedObject } from '../shared-utils/three/disposeOwnedObject'\nimport { MODEL_CHASSIS_COMPASS_DEFAULT_MODEL } from '../shared-utils/url/defaultUrls'\n\nexport interface ModelChassisCompassPluginParameterType {\n north_rad?: number\n fbx_url?: string\n}\n\nexport interface ModelChassisCompassPluginData {\n north_rad?: number\n fbx_url?: string\n}\n\ninterface ModelChassisCompassPluginState {\n yBase?: number\n object?: THREE.Object3D\n}\n\nexport interface ModelChassisCompassPluginExportType {\n enable: () => void\n disable: () => void\n load: (data?: ModelChassisCompassPluginData) => Promise<boolean>\n dispose: () => void\n}\n\n/**\n * 模型底盘指南针插件\n */\nexport const ModelChassisCompassPlugin: FivePlugin<ModelChassisCompassPluginParameterType, ModelChassisCompassPluginExportType> = (\n five: Five,\n params,\n) => {\n const defaultFbxUrl = params?.fbx_url || MODEL_CHASSIS_COMPASS_DEFAULT_MODEL\n\n const defaultNorthRad = params?.north_rad ?? undefined\n\n // 局部状态\n const state: ModelChassisCompassPluginState = {}\n\n let position = { x: 0, y: 0, z: 0 }\n let rotation = [0, 0, 0]\n let scale = 1\n let northRad = defaultNorthRad\n let disposed = false, generation = 0, enabled = false\n\n five.on('modelLoaded', updateObjectMatrix)\n\n const load = async (data?: ModelChassisCompassPluginData) => {\n if (disposed) return false\n const request = ++generation\n const fbxUrl = data?.fbx_url || defaultFbxUrl\n northRad = data?.north_rad ?? defaultNorthRad\n\n if (typeof northRad !== 'number') {\n throw new Error('\"northRad\"配置参数缺失:未配置指南针指向!')\n }\n\n const fbxLoader = new FBXLoader()\n const object = (await fbxLoader.loadAsync(fbxUrl)) as THREE.Group\n if (disposed || request !== generation) { disposeOwnedObject(object); return false }\n if (state.object) disposeOwnedObject(state.object)\n transformToMeshBasicMaterial(object, {\n transparent: true,\n side: THREE.DoubleSide,\n blending: THREE.AdditiveBlending,\n })\n\n state.object = object\n\n updateObjectMatrix()\n if (enabled) enable()\n return true\n }\n\n const onCameraUpdate = ({ latitude }: { latitude: number }) => {\n if (!state.object) return\n const y = getPositionY(latitude)\n if (y !== undefined) {\n state.object.position.y = y\n }\n }\n\n const getPositionY = (latitude: number) => {\n if (state.yBase === undefined) return\n const difference = 0.6\n if (latitude >= Math.PI / 4) return state.yBase - (difference + 1.6)\n const ratio = latitude * (4 / Math.PI)\n return state.yBase - (difference * ratio + 1.6)\n }\n\n const enable = () => {\n if (disposed || !state.object) return\n enabled = true\n const y = getPositionY(five.getPose().latitude)\n if (y !== undefined) state.object.position.y = y\n five.scene.add(state.object)\n five.needsRender = true\n five.on('cameraDirectionUpdate', onCameraUpdate)\n }\n\n const disable = () => {\n enabled = false\n if (!state.object) return\n five.scene.remove(state.object)\n five.needsRender = true\n five.off('cameraDirectionUpdate', onCameraUpdate)\n }\n\n function updateObjectMatrix() {\n const object = state.object\n if (!object) return\n const bounding = five.model.bounding\n const xOffset = bounding.max.x - bounding.min.x\n const zOffset = bounding.max.z - bounding.min.z\n const maxOffset = Math.max(xOffset, zOffset)\n const {\n max: { x: xMax, z: zMax },\n min: { x: xMin, y: yMin, z: zMin },\n } = bounding\n\n state.yBase = yMin\n position = { x: (xMax + xMin) / 2, y: yMin - 1.6, z: (zMax + zMin) / 2 }\n rotation = [0, northRad - Math.PI / 2, 0]\n scale = 0.0045 * maxOffset\n object3d2LocalMatrix(object, { position, rotation, scale })\n }\n\n const dispose = () => {\n if (disposed) return\n disposed = true; generation += 1\n disable()\n if (state.object) disposeOwnedObject(state.object)\n state.object = undefined\n five.off('modelLoaded', updateObjectMatrix)\n five.off('dispose', dispose)\n }\n five.once('dispose', dispose)\n return { load, disable, enable, dispose }\n}\n\nexport default ModelChassisCompassPlugin\n"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { t as e } from "./Controller-CyIcxTxN.js";
2
- //#region src/Object3DHelperPlugin/index.ts
3
- var t = (t) => new e(t);
4
- //#endregion
5
- export { t };
6
-
7
- //# sourceMappingURL=object3d-helper-1-TEtUKM.js.map