@shopware-ag/dive 1.0.7

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dive.ts","../src/renderer/Renderer.ts","../src/scene/Scene.ts","../src/scene/root/Root.ts","../src/scene/root/lightroot/LightRoot.ts","../src/light/AmbientLight.ts","../src/constant/VisibilityLayerMask.ts","../src/light/PointLight.ts","../src/com/Communication.ts","../src/light/SceneLight.ts","../src/scene/root/modelroot/ModelRoot.ts","../src/model/Model.ts","../src/loadingmanager/LoadingManager.ts","../src/primitive/floor/Floor.ts","../src/constant/GridColors.ts","../src/grid/Grid.ts","../src/camera/PerspectiveCamera.ts","../src/controls/OrbitControls.ts","../src/mediacreator/MediaCreator.ts","../src/toolbox/select/SelectTool.ts","../src/toolbox/BaseTool.ts","../src/toolbox/Toolbox.ts","../src/animation/AnimationSystem.ts","../src/axiscamera/AxisCamera.ts","../src/constant/AxisHelperColors.ts","../src/helper/getObjectDelta/getObjectDelta.ts","../src/math/helper/shift.ts","../src/math/ceil/ceilExp.ts","../src/math/floor/floorExp.ts","../src/math/round/roundExp.ts","../src/math/toFixed/toFixedExp.ts","../src/math/truncate/truncateExp.ts","../src/math/index.ts"],"sourcesContent":["import { Vector4 } from \"three\";\nimport DIVERenderer, { DIVERendererDefaultSettings, DIVERendererSettings } from \"./renderer/Renderer.ts\";\nimport DIVEScene from \"./scene/Scene.ts\";\nimport DIVEPerspectiveCamera, { DIVEPerspectiveCameraDefaultSettings, DIVEPerspectiveCameraSettings } from \"./camera/PerspectiveCamera.ts\";\nimport DIVEOrbitControls, { DIVEOrbitControlsDefaultSettings, DIVEOrbitControlsSettings } from \"./controls/OrbitControls.ts\";\nimport DIVEMediaCreator from \"./mediacreator/MediaCreator.ts\";\nimport DIVEToolbox from \"./toolbox/Toolbox.ts\";\nimport DIVECommunication from \"./com/Communication.ts\";\nimport DIVEAnimationSystem from \"./animation/AnimationSystem.ts\";\nimport DIVEAxisCamera from \"./axiscamera/AxisCamera.ts\";\nimport { getObjectDelta } from \"./helper/getObjectDelta/getObjectDelta.ts\";\n\nimport type { Actions } from './com/actions/index.ts';\nimport type { COMPov, COMLight, COMModel, COMEntity } from './com/types.ts';\nimport { DIVEMath } from './math/index.ts';\n\nexport type DIVESettings = {\n autoResize: boolean;\n renderer: DIVERendererSettings;\n perspectiveCamera: DIVEPerspectiveCameraSettings;\n orbitControls: DIVEOrbitControlsSettings;\n}\n\nexport const DIVEDefaultSettings: DIVESettings = {\n autoResize: true,\n renderer: DIVERendererDefaultSettings,\n perspectiveCamera: DIVEPerspectiveCameraDefaultSettings,\n orbitControls: DIVEOrbitControlsDefaultSettings,\n}\n\n/**\n * #### DIVE\n * is the main class of the DIVE framework.\n *\n * An instance of this class delivers a complete 3D environment with a perspective camera, orbit controls, a toolbox, and a communication system.\n * ```ts\n * import { DIVE } from \"@shopware-ag/dive\";\n *\n * const myWrapper = document.getElementById('myWrapper');\n *\n * const dive = new DIVE();\n *\n * myWrapper.appendChild(dive.Canvas);\n *\n * dive.Communication.Subscribe('GET_ALL_SCENE_DATA', () => {\n * // do something\n * }));\n *\n * dive.Communication.PerformAction('GET_ALL_SCENE_DATA', {});\n * ```\n * @module\n */\n\nexport default class DIVE {\n // descriptive members\n private _settings: DIVESettings;\n private _resizeObserverId: string;\n private _width: number;\n private _height: number;\n\n // functional components\n private renderer: DIVERenderer;\n private scene: DIVEScene;\n private perspectiveCamera: DIVEPerspectiveCamera;\n private orbitControls: DIVEOrbitControls;\n private mediaCreator: DIVEMediaCreator;\n private toolbox: DIVEToolbox;\n private communication: DIVECommunication;\n\n // additional components\n private animationSystem: DIVEAnimationSystem;\n private axisCamera: DIVEAxisCamera;\n\n // getters\n public get Communication(): DIVECommunication {\n return this.communication;\n }\n\n public get Canvas(): HTMLCanvasElement {\n return this.renderer.domElement;\n }\n\n // setters\n public set Settings(settings: Partial<DIVESettings>) {\n const settingsDelta = getObjectDelta(this._settings, settings);\n\n // apply renderer settings (we have to rebuild the renderer to apply the settings)\n if (settingsDelta.renderer) this.renderer = new DIVERenderer(this._settings.renderer);\n\n // apply perspective camera settings\n if (settingsDelta.perspectiveCamera) {\n this.perspectiveCamera.fov = settingsDelta.perspectiveCamera.fov;\n this.perspectiveCamera.near = settingsDelta.perspectiveCamera.near;\n this.perspectiveCamera.far = settingsDelta.perspectiveCamera.far;\n this.perspectiveCamera.OnResize(this.renderer.domElement.width, this.renderer.domElement.height);\n }\n // apply orbit controls settings\n if (settingsDelta.orbitControls) {\n this.orbitControls.enableDamping = settingsDelta.orbitControls.enableDamping;\n this.orbitControls.dampingFactor = settingsDelta.orbitControls.dampingFactor;\n }\n\n if (settingsDelta.autoResize !== this._settings.autoResize) {\n if (settingsDelta.autoResize) {\n this.addResizeObserver();\n } else {\n this.removeResizeObserver();\n }\n }\n\n Object.assign(this._settings, settings);\n }\n\n constructor(settings?: Partial<DIVESettings>) {\n this._settings = { ...DIVEDefaultSettings, ...(settings !== undefined ? settings : {}) };\n\n this._resizeObserverId = '';\n this._width = 0;\n this._height = 0;\n\n // initialize functional components\n this.renderer = new DIVERenderer(this._settings.renderer);\n this.scene = new DIVEScene();\n this.perspectiveCamera = new DIVEPerspectiveCamera(this._settings.perspectiveCamera);\n this.orbitControls = new DIVEOrbitControls(this.perspectiveCamera, this.renderer, this._settings.orbitControls);\n this.mediaCreator = new DIVEMediaCreator(this.renderer, this.scene, this.orbitControls);\n this.toolbox = new DIVEToolbox(this.scene, this.orbitControls);\n this.communication = new DIVECommunication(this.scene, this.orbitControls, this.toolbox, this.mediaCreator);\n\n // initialize animation system\n this.animationSystem = new DIVEAnimationSystem();\n this.renderer.AddPreRenderCallback(() => {\n this.animationSystem.update();\n })\n\n // initialize axis camera\n this.axisCamera = new DIVEAxisCamera();\n this.scene.add(this.axisCamera);\n const restoreViewport = new Vector4();\n\n this.renderer.AddPostRenderCallback(() => {\n const restoreBackground = this.scene.background;\n this.scene.background = null;\n\n this.renderer.getViewport(restoreViewport);\n this.renderer.setViewport(0, 0, 150, 150);\n this.renderer.autoClear = false;\n\n this.axisCamera.SetFromCameraMatrix(this.perspectiveCamera.matrix);\n\n this.renderer.render(this.scene, this.axisCamera);\n\n this.renderer.setViewport(restoreViewport);\n this.renderer.autoClear = true;\n\n this.scene.background = restoreBackground;\n });\n\n // add resize observer if autoResize is enabled\n if (this._settings.autoResize) {\n this.addResizeObserver();\n }\n\n // whene everything is done, start the renderer\n this.renderer.StartRenderer(this.scene, this.perspectiveCamera);\n }\n\n // methods\n public OnResize(width: number, height: number): void {\n // resize renderer\n this.renderer.OnResize(width, height);\n\n // resize camera\n this.perspectiveCamera.OnResize(width, height);\n }\n\n private addResizeObserver(): void {\n this._resizeObserverId = this.renderer.AddPreRenderCallback(() => {\n // check if the canvas is mounted\n const canvasWrapper = this.renderer.domElement.parentElement;\n if (!canvasWrapper) return;\n\n const { clientWidth, clientHeight } = canvasWrapper;\n if (clientWidth === this._width && clientHeight === this._height) return;\n\n this.OnResize(clientWidth, clientHeight);\n\n this._width = clientWidth;\n this._height = clientHeight;\n });\n }\n\n private removeResizeObserver(): void {\n this.renderer.RemovePreRenderCallback(this._resizeObserverId);\n }\n}\n\nexport type {\n Actions,\n COMPov,\n COMLight,\n COMModel,\n COMEntity,\n};\n\nexport {\n DIVE,\n DIVECommunication,\n DIVEMath,\n}","import { Camera, MathUtils, NoToneMapping, PCFSoftShadowMap, Scene, ShadowMapType, ToneMapping, WebGLRenderer } from \"three\";\n\nexport type DIVERendererSettings = {\n antialias: boolean;\n alpha: boolean;\n stencil: boolean;\n shadowMapEnabled: boolean;\n shadowMapType: ShadowMapType;\n toneMapping: ToneMapping;\n}\n\nexport const DIVERendererDefaultSettings: DIVERendererSettings = {\n antialias: true,\n alpha: true,\n stencil: false,\n shadowMapEnabled: true,\n shadowMapType: PCFSoftShadowMap,\n toneMapping: NoToneMapping,\n}\n\n/**\n * A changed version of the WebGLRenderer.\n *\n * Has to be started manually by calling StartRenderer().\n *\n * @module\n */\n\nexport default class DIVERenderer extends WebGLRenderer {\n // basic functionality members\n private paused: boolean = false;\n private running: boolean = false;\n private force: boolean = false;\n\n // pre- and post-render callbacks\n private preRenderCallbacks: Map<string, () => void> = new Map<string, () => void>();\n private postRenderCallbacks: Map<string, () => void> = new Map<string, () => void>();\n\n constructor(rendererSettings: DIVERendererSettings = DIVERendererDefaultSettings) {\n super({\n antialias: rendererSettings.antialias,\n alpha: rendererSettings.alpha,\n preserveDrawingBuffer: true\n });\n this.setPixelRatio(window.devicePixelRatio);\n\n this.shadowMap.enabled = rendererSettings.shadowMapEnabled;\n this.shadowMap.type = rendererSettings.shadowMapType;\n\n this.toneMapping = rendererSettings.toneMapping;\n\n this.debug.checkShaderErrors = false;\n }\n\n // Starts the renderer with the given scene and camera.\n public StartRenderer(scene: Scene, cam: Camera): void {\n this.setAnimationLoop(() => { this.internal_render(scene, cam) });\n this.running = true;\n }\n\n // Pauses the renderer.\n public PauseRenderer(): void {\n this.paused = true;\n }\n\n // Resumes the renderer after pausing.\n public ResumeRenderer(): void {\n this.paused = false;\n }\n\n // Stops the renderer completely. Has to be started again with StartRenderer().\n public StopRenderer(): void {\n this.setAnimationLoop(null);\n this.running = false;\n }\n\n // Resizes the renderer to the given width and height.\n public OnResize(width: number, height: number): void {\n this.setSize(width, height);\n }\n\n /**\n * Adds a callback to the render loop before actual render call.\n * @param callback Executed before rendering.\n * @returns uuid to remove the callback.\n */\n public AddPreRenderCallback(callback: () => void): string {\n // add callback to renderloop\n const newUUID = MathUtils.generateUUID();\n this.preRenderCallbacks.set(newUUID, callback);\n\n return newUUID;\n }\n\n /**\n * Removes a callback from the render loop before actual render call.\n * @param uuid of callback to remove.\n * @returns if removing was successful.\n */\n public RemovePreRenderCallback(uuid: string): boolean {\n // check if callback exists\n if (!this.preRenderCallbacks.has(uuid)) return false;\n\n // remove callback from renderloop\n this.preRenderCallbacks.delete(uuid);\n\n return true;\n }\n\n /**\n * Adds a callback to the render loop after actual render call.\n * @param callback Executed after rendering.\n * @returns uuid to remove the callback.\n */\n public AddPostRenderCallback(callback: () => void): string {\n // add callback to renderloop\n const newUUID = MathUtils.generateUUID();\n this.postRenderCallbacks.set(newUUID, callback);\n\n return newUUID;\n }\n\n /**\n * Removes a callback from the render loop after actual render call.\n * @param uuid of callback to remove.\n * @returns if removing was successful.\n */\n public RemovePostRenderCallback(uuid: string): boolean {\n // check if callback exists\n if (!this.postRenderCallbacks.has(uuid)) return false;\n\n // remove callback from renderloop\n this.postRenderCallbacks.delete(uuid);\n\n return true;\n }\n\n /**\n * Forces the renderer to render the next frame.\n */\n public ForceRendering(): void {\n this.force = true;\n }\n\n /**\n * Internal render loop.\n *\n * To control renderloop you can add callbacks via AddPreRenderCallback() and AddPostRenderCallback().\n * @param scene Scene to render.\n * @param cam Camera to render with.\n */\n private internal_render(scene: Scene, cam: Camera): void {\n // execute background render loop callbacks\n if ((this.paused || !this.running) && !this.force) return;\n\n // execute render loop callbacks\n this.preRenderCallbacks.forEach((callback) => { callback(); });\n\n this.render(scene, cam);\n\n this.postRenderCallbacks.forEach((callback) => { callback(); });\n\n this.force = false;\n }\n}","import { Color, ColorRepresentation, Object3D, Scene } from 'three';\nimport { COMModel, COMEntity } from '../com/types';\nimport DIVERoot from './root/Root';\n\n/**\n * A basic scene class.\n *\n * Comes with a root object that contains all the scene objects.\n *\n * @module\n */\n\nexport default class DIVEScene extends Scene {\n private root: DIVERoot;\n public get Root(): DIVERoot {\n return this.root;\n }\n\n constructor() {\n super();\n\n this.root = new DIVERoot();\n this.add(this.root);\n }\n\n public SetBackground(color: ColorRepresentation): void {\n this.background = new Color(color);\n }\n\n public GetSceneObject(object: Partial<COMEntity>): Object3D | undefined {\n return this.Root.GetSceneObject(object);\n }\n\n public AddSceneObject(object: COMEntity): void {\n this.Root.UpdateSceneObject(object);\n }\n\n public UpdateSceneObject(object: Partial<COMEntity>): void {\n this.Root.UpdateSceneObject(object);\n }\n\n public DeleteSceneObject(object: Partial<COMEntity>): void {\n this.Root.DeleteSceneObject(object);\n }\n\n public PlaceOnFloor(object: Partial<COMModel>): void {\n this.Root.PlaceOnFloor(object);\n }\n}\n","import { Object3D } from \"three\";\nimport DIVELightRoot from \"./lightroot/LightRoot.ts\";\nimport DIVEModelRoot from \"./modelroot/ModelRoot.ts\";\nimport { COMLight, COMModel, COMEntity } from \"../../com/types.ts\";\nimport DIVEFloor from \"../../primitive/floor/Floor.ts\";\nimport DIVEGrid from \"../../grid/Grid.ts\";\n\n/**\n * A basic scene node to hold grid, floor and all lower level roots.\n *\n * @module\n */\n\nexport default class DIVERoot extends Object3D {\n private lightRoot: DIVELightRoot;\n private modelRoot: DIVEModelRoot;\n private floor: DIVEFloor;\n private grid: DIVEGrid;\n\n public get Floor(): DIVEFloor {\n return this.floor;\n }\n\n public get Grid(): DIVEGrid {\n return this.grid;\n }\n\n constructor() {\n super();\n this.name = \"Root\";\n\n this.lightRoot = new DIVELightRoot();\n this.add(this.lightRoot);\n this.modelRoot = new DIVEModelRoot();\n this.add(this.modelRoot);\n this.floor = new DIVEFloor();\n this.add(this.floor);\n this.grid = new DIVEGrid();\n this.add(this.grid);\n }\n\n public GetSceneObject(object: Partial<COMEntity>): Object3D | undefined {\n switch (object.entityType) {\n case \"pov\": {\n return undefined;\n }\n case \"light\": {\n return this.lightRoot.GetLight(object as COMLight);\n }\n case \"model\": {\n return this.modelRoot.GetModel(object as COMModel);\n }\n }\n }\n\n public AddSceneObject(object: COMEntity): void {\n switch (object.entityType) {\n case \"pov\": {\n break;\n }\n case \"light\": {\n this.lightRoot.UpdateLight(object as COMLight);\n break;\n }\n case \"model\": {\n this.modelRoot.UpdateModel(object as COMModel);\n break;\n }\n }\n }\n\n public UpdateSceneObject(object: Partial<COMEntity>): void {\n switch (object.entityType) {\n case \"pov\": {\n break;\n }\n case \"light\": {\n this.lightRoot.UpdateLight(object as COMLight);\n break;\n }\n case \"model\": {\n this.modelRoot.UpdateModel(object as COMModel);\n break;\n }\n }\n }\n\n public DeleteSceneObject(object: Partial<COMEntity>): void {\n switch (object.entityType) {\n case \"pov\": {\n break;\n }\n case \"light\": {\n this.lightRoot.DeleteLight(object as COMLight);\n break;\n }\n case \"model\": {\n this.modelRoot.DeleteModel(object as COMModel);\n break;\n }\n }\n }\n\n public PlaceOnFloor(object: Partial<COMModel>): void {\n this.modelRoot.PlaceOnFloor(object);\n }\n}\n","import { Color, Object3D } from \"three\";\nimport { type COMLight } from \"../../../com/types.ts\";\nimport DIVEAmbientLight from \"../../../light/AmbientLight.ts\";\nimport DIVEPointLight from \"../../../light/PointLight.ts\";\nimport type { DIVEMoveable } from \"../../../interface/Moveable.ts\";\nimport DIVESceneLight from \"../../../light/SceneLight.ts\";\n\n/**\n * A basic scene node to hold all lights.\n *\n * @module\n */\n\nexport default class DIVELightRoot extends Object3D {\n constructor() {\n super();\n this.name = \"LightRoot\";\n }\n\n public GetLight(object: Partial<COMLight>): Object3D | undefined {\n if (object.id === undefined) {\n console.warn('LightRoot.GetLight: object.id is undefined')\n return undefined;\n }\n return this.children.find(object3D => object3D.userData.id === object.id);\n }\n\n public UpdateLight(light: Partial<COMLight>): void {\n // update scene here for light\n if (light.id === undefined) {\n console.warn(`LightRoot.UpdateLight: light.id is undefined`)\n return;\n }\n\n let sceneObject = this.children.find(object3D => object3D.userData.id === light.id);\n if (!sceneObject) {\n switch (light.type) {\n case 'scene': {\n sceneObject = new DIVESceneLight();\n break;\n }\n case 'ambient': {\n sceneObject = new DIVEAmbientLight();\n break;\n }\n case 'point': {\n sceneObject = new DIVEPointLight();\n break;\n }\n default: {\n console.warn(`LightRoot.UpdateLight: Unknown light type: ${light.type}`);\n return;\n }\n }\n sceneObject.userData.id = light.id;\n this.add(sceneObject);\n }\n\n if (light.name !== undefined && light.name !== null) sceneObject.name = light.name;\n if (light.position !== undefined && light.position !== null) sceneObject.position.set(light.position.x, light.position.y, light.position.z);\n if (light.intensity !== undefined && light.intensity !== null) (sceneObject as (DIVEAmbientLight | DIVEPointLight)).SetIntensity(light.intensity);\n if (light.enabled !== undefined && light.enabled !== null) (sceneObject as (DIVEAmbientLight | DIVEPointLight)).SetEnabled(light.enabled);\n if (light.color !== undefined && light.color !== null) (sceneObject as (DIVEAmbientLight | DIVEPointLight)).SetColor(new Color(light.color));\n }\n\n public DeleteLight(light: Partial<COMLight>): void {\n if (light.id === undefined) {\n console.warn('LightRoot.DeleteLight: light.id is undefined')\n return;\n }\n\n const sceneObject = this.children.find(object3D => object3D.userData.id === light.id);\n if (!sceneObject) {\n console.warn(`LightRoot.DeleteLight: Light with id ${light.id} not found`);\n return;\n }\n\n if ('isMoveable' in sceneObject) {\n (sceneObject as unknown as DIVEMoveable).gizmo?.detach();\n }\n\n this.remove(sceneObject);\n }\n}\n","import { AmbientLight, Color } from 'three';\nimport { PRODUCT_LAYER_MASK } from '../constant/VisibilityLayerMask';\n\n/**\n * A basic ambient light.\n *\n * Can change the color, intensity, and visibility of the light.\n *\n * @module\n */\n\nexport default class DIVEAmbientLight extends AmbientLight {\n constructor() {\n super(0xffffff, 1);\n this.layers.mask = PRODUCT_LAYER_MASK;\n }\n\n public SetColor(color: Color): void {\n this.color = color;\n }\n\n public SetIntensity(intensity: number): void {\n this.intensity = intensity;\n }\n\n public SetEnabled(enabled: boolean): void {\n this.visible = enabled;\n }\n}\n","export const DEFAULT_LAYER_MASK = 0b00000001; // 1\nexport const COORDINATE_LAYER_MASK = 0b00000010; // 2\nexport const UI_LAYER_MASK = 0b00000100; // 4\nexport const HELPER_LAYER_MASK = 0b00001000; // 8\nexport const PRODUCT_LAYER_MASK = 0b00010000; // 16\n","import { PointLight, Color, SphereGeometry, MeshBasicMaterial, Mesh, FrontSide } from 'three';\nimport DIVECommunication from '../com/Communication';\nimport { HELPER_LAYER_MASK, PRODUCT_LAYER_MASK } from '../constant/VisibilityLayerMask';\nimport { DIVEMoveable } from '../interface/Moveable';\nimport { DIVESelectable } from '../interface/Selectable';\nimport type { TransformControls } from 'three/examples/jsm/Addons.js';\n\n/**\n * A basic point light.\n *\n * Can change the color, intensity, and visibility of the light.\n *\n * Can be moved and selected.\n *\n * @module\n */\n\nexport default class DIVEPointLight extends PointLight implements DIVESelectable, DIVEMoveable {\n public isMoveable: true = true;\n public isSelectable: true = true;\n public gizmo: TransformControls | null = null;\n\n constructor() {\n super(0xffffff, 1);\n\n this.layers.mask = PRODUCT_LAYER_MASK;\n\n this.castShadow = true;\n this.shadow.mapSize.width = 512;\n this.shadow.mapSize.height = 512;\n\n const geoSize = 0.1;\n\n const geometry = new SphereGeometry(geoSize, geoSize * 320, geoSize * 320);\n\n const material = new MeshBasicMaterial({ color: this.color, transparent: true, opacity: 0.8, side: FrontSide });\n\n const mesh = new Mesh(geometry, material);\n mesh.layers.mask = HELPER_LAYER_MASK;\n\n this.add(mesh);\n }\n\n public SetColor(color: Color): void {\n this.color = color;\n\n ((this.children[0] as Mesh).material as MeshBasicMaterial).color = color;\n }\n\n public SetIntensity(intensity: number): void {\n this.intensity = intensity;\n\n ((this.children[0] as Mesh).material as MeshBasicMaterial).opacity = intensity > 0.8 ? 0.8 : intensity * 0.8;\n }\n\n public SetEnabled(enabled: boolean): void {\n this.visible = enabled;\n }\n\n public onMove(): void {\n DIVECommunication.get(this.userData.id)?.PerformAction('UPDATE_OBJECT', { id: this.userData.id, position: this.position });\n }\n}\n","import { Color, MeshStandardMaterial, MathUtils } from \"three\";\nimport DIVEScene from \"../scene/Scene.ts\";\nimport { Actions } from \"./actions/index.ts\";\nimport { COMLight, COMModel, COMEntity, COMPov } from \"./types.ts\";\nimport DIVEToolbox from \"../toolbox/Toolbox.ts\";\nimport DIVEMediaCreator from \"../mediacreator/MediaCreator.ts\";\nimport DIVEOrbitControls from \"../controls/OrbitControls.ts\";\nimport { DIVESelectable } from \"../interface/Selectable.ts\";\nimport DIVESelectTool from \"../toolbox/select/SelectTool.ts\";\n\ntype EventListener<Action extends keyof Actions> = (payload: Actions[Action]['PAYLOAD']) => void;\n\ntype Unsubscribe = () => boolean;\n\n/**\n * Main class for communicating with DIVE.\n *\n * You can subscribe to actions and perform them from outside and inside DIVE.\n *\n * ```ts\n * import { DIVE } from \"@shopware-ag/dive\";\n *\n * const dive = new DIVE();\n *\n * dive.Communication.Subscribe('GET_ALL_SCENE_DATA', () => {\n * // do something\n * }));\n *\n * dive.Communication.PerformAction('GET_ALL_SCENE_DATA', {});\n * ```\n *\n * @module\n */\n\nexport default class DIVECommunication {\n private static __instances: DIVECommunication[] = [];\n\n public static get(id: string): DIVECommunication | undefined {\n return this.__instances.find((instance) => Array.from(instance.registered.values()).find((object) => object.id === id));\n }\n\n private id: string;\n private scene: DIVEScene;\n private controller: DIVEOrbitControls;\n private toolbox: DIVEToolbox;\n private mediaGenerator: DIVEMediaCreator;\n\n private registered: Map<string, COMEntity> = new Map();\n\n // private listeners: { [key: string]: EventListener[] } = {};\n private listeners: Map<keyof Actions, EventListener<keyof Actions>[]> = new Map();\n\n constructor(scene: DIVEScene, controls: DIVEOrbitControls, toolbox: DIVEToolbox, mediaGenerator: DIVEMediaCreator) {\n this.id = MathUtils.generateUUID();\n this.scene = scene;\n this.controller = controls;\n this.toolbox = toolbox;\n this.mediaGenerator = mediaGenerator;\n\n DIVECommunication.__instances.push(this);\n }\n\n public DestroyInstance(): boolean {\n const existingIndex = DIVECommunication.__instances.findIndex((entry) => entry.id === this.id);\n if (existingIndex === -1) return false;\n DIVECommunication.__instances.splice(existingIndex, 1);\n return true;\n }\n\n public PerformAction<Action extends keyof Actions>(action: Action, payload: Actions[Action]['PAYLOAD']): Actions[Action]['RETURN'] {\n let returnValue: Actions[Action]['RETURN'] = false;\n\n switch (action) {\n case 'GET_ALL_SCENE_DATA': {\n returnValue = this.getAllSceneData(payload as Actions['GET_ALL_SCENE_DATA']['PAYLOAD']);\n break;\n }\n case 'GET_ALL_OBJECTS': {\n returnValue = this.getAllObjects(payload as Actions['GET_ALL_OBJECTS']['PAYLOAD']);\n break;\n }\n case 'GET_OBJECTS': {\n returnValue = this.getObjects(payload as Actions['GET_OBJECTS']['PAYLOAD']);\n break;\n }\n case 'ADD_OBJECT': {\n returnValue = this.addObject(payload as Actions['ADD_OBJECT']['PAYLOAD']);\n break;\n }\n case 'UPDATE_OBJECT': {\n returnValue = this.updateObject(payload as Actions['UPDATE_OBJECT']['PAYLOAD']);\n break;\n }\n case 'DELETE_OBJECT': {\n returnValue = this.deleteObject(payload as Actions['DELETE_OBJECT']['PAYLOAD']);\n break;\n }\n case 'SELECT_OBJECT': {\n returnValue = this.selectObject(payload as Actions['SELECT_OBJECT']['PAYLOAD']);\n break;\n }\n case 'SET_BACKGROUND': {\n returnValue = this.setBackground(payload as Actions['SET_BACKGROUND']['PAYLOAD']);\n break;\n }\n case 'PLACE_ON_FLOOR': {\n returnValue = this.placeOnFloor(payload as Actions['PLACE_ON_FLOOR']['PAYLOAD']);\n break;\n }\n case 'SET_CAMERA_TRANSFORM': {\n returnValue = this.setCameraTransform(payload as Actions['SET_CAMERA_TRANSFORM']['PAYLOAD']);\n break;\n }\n case 'GET_CAMERA_TRANSFORM': {\n returnValue = this.getCameraTransform(payload as Actions['GET_CAMERA_TRANSFORM']['PAYLOAD']);\n break;\n }\n case 'MOVE_CAMERA': {\n returnValue = this.moveCamera(payload as Actions['MOVE_CAMERA']['PAYLOAD']);\n break;\n }\n case 'RESET_CAMERA': {\n returnValue = this.resetCamera(payload as Actions['RESET_CAMERA']['PAYLOAD']);\n break;\n }\n case 'SET_CAMERA_LAYER': {\n returnValue = this.setCameraLayer(payload as Actions['SET_CAMERA_LAYER']['PAYLOAD']);\n break;\n }\n case 'ZOOM_CAMERA': {\n returnValue = this.zoomCamera(payload as Actions['ZOOM_CAMERA']['PAYLOAD']);\n break;\n }\n case 'SET_GIZMO_MODE': {\n returnValue = this.setGizmoMode(payload as Actions['SET_GIZMO_MODE']['PAYLOAD']);\n break;\n }\n case 'MODEL_LOADED': {\n returnValue = this.modelLoaded(payload as Actions['MODEL_LOADED']['PAYLOAD']);\n break;\n }\n case 'UPDATE_SCENE': {\n returnValue = this.updateScene(payload as Actions['UPDATE_SCENE']['PAYLOAD']);\n break;\n }\n case 'GENERATE_MEDIA': {\n returnValue = this.generateMedia(payload as Actions['GENERATE_MEDIA']['PAYLOAD']);\n break;\n }\n }\n\n this.dispatch(action, payload);\n\n return returnValue;\n }\n\n public Subscribe<Action extends keyof Actions>(type: Action, listener: EventListener<Action>): Unsubscribe {\n if (!this.listeners.get(type)) this.listeners.set(type, []);\n\n // casting to any because of typescript not finding between Action and typeof Actions being equal in this case\n this.listeners.get(type)!.push(listener as EventListener<keyof Actions>);\n\n return () => {\n const listenerArray = this.listeners.get(type);\n if (!listenerArray) return false;\n\n const existingIndex = listenerArray.findIndex((entry) => entry === listener);\n if (existingIndex === -1) return false;\n\n listenerArray.splice(existingIndex, 1);\n return true;\n };\n }\n\n private dispatch<Action extends keyof Actions>(type: Action, payload: Actions[Action]['PAYLOAD']): void {\n const listenerArray = this.listeners.get(type);\n if (!listenerArray) return;\n\n listenerArray.forEach((listener) => listener(payload))\n }\n\n private getAllSceneData(payload: Actions['GET_ALL_SCENE_DATA']['PAYLOAD']): Actions['GET_ALL_SCENE_DATA']['RETURN'] {\n const sceneData = {\n name: this.scene.name,\n mediaItem: null,\n backgroundColor: '#' + (this.scene.background as Color).getHexString(),\n floorEnabled: this.scene.Root.Floor.visible,\n floorColor: '#' + (this.scene.Root.Floor.material as MeshStandardMaterial).color.getHexString(),\n userCamera: {\n position: this.controller.object.position.clone(),\n target: this.controller.target.clone(),\n },\n spotmarks: [],\n lights: Array.from(this.registered.values()).filter((object) => object.entityType === 'light') as COMLight[],\n objects: Array.from(this.registered.values()).filter((object) => object.entityType === 'model') as COMModel[],\n cameras: Array.from(this.registered.values()).filter((object) => object.entityType === 'pov') as COMPov[],\n };\n Object.assign(payload, sceneData);\n return sceneData;\n }\n\n private getAllObjects(payload: Actions['GET_ALL_OBJECTS']['PAYLOAD']): Actions['GET_ALL_OBJECTS']['RETURN'] {\n Object.assign(payload, this.registered);\n return this.registered;\n }\n\n private getObjects(payload: Actions['GET_OBJECTS']['PAYLOAD']): Actions['GET_OBJECTS']['RETURN'] {\n this.registered.forEach((object) => {\n if (payload.ids && payload.ids.length > 0 && !payload.ids.includes(object.id)) return;\n payload.map.set(object.id, object);\n });\n\n return payload.map;\n }\n\n private addObject(payload: Actions['ADD_OBJECT']['PAYLOAD']): Actions['ADD_OBJECT']['RETURN'] {\n if (this.registered.get(payload.id)) return false;\n\n this.registered.set(payload.id, payload);\n\n this.scene.AddSceneObject(payload);\n\n return true;\n }\n\n private updateObject(payload: Actions['UPDATE_OBJECT']['PAYLOAD']): Actions['UPDATE_OBJECT']['RETURN'] {\n const objectToUpdate = this.registered.get(payload.id);\n if (!objectToUpdate) return false;\n\n this.registered.set(payload.id, { ...objectToUpdate, ...payload });\n\n const updatedObject = this.registered.get(payload.id)!;\n this.scene.UpdateSceneObject(updatedObject);\n\n Object.assign(payload, updatedObject);\n\n return true;\n }\n\n private deleteObject(payload: Actions['DELETE_OBJECT']['PAYLOAD']): Actions['DELETE_OBJECT']['RETURN'] {\n const deletedObject = this.registered.get(payload.id);\n if (!deletedObject) return false;\n\n // copy object to payload to use later\n Object.assign(payload, deletedObject);\n\n this.registered.delete(payload.id);\n\n this.scene.DeleteSceneObject(deletedObject);\n\n return true;\n }\n\n private selectObject(payload: Actions['SELECT_OBJECT']['PAYLOAD']): Actions['SELECT_OBJECT']['RETURN'] {\n const object = this.registered.get(payload.id);\n if (!object) return false;\n\n const sceneObject = this.scene.GetSceneObject(object);\n if (!sceneObject) return false;\n\n if (!('isSelectable' in sceneObject)) return false;\n\n this.toolbox.UseTool('select');\n (this.toolbox.GetActiveTool() as DIVESelectTool).Select(sceneObject as DIVESelectable);\n\n // copy object to payload to use later\n Object.assign(payload, object);\n\n return true;\n }\n\n private setBackground(payload: Actions['SET_BACKGROUND']['PAYLOAD']): Actions['SET_BACKGROUND']['RETURN'] {\n this.scene.SetBackground(payload.color);\n\n return true;\n }\n\n private placeOnFloor(payload: Actions['PLACE_ON_FLOOR']['PAYLOAD']): Actions['PLACE_ON_FLOOR']['RETURN'] {\n if (!this.registered.get(payload.id)) return false;\n\n this.scene.PlaceOnFloor(payload);\n\n return true;\n }\n\n private setCameraTransform(payload: Actions['SET_CAMERA_TRANSFORM']['PAYLOAD']): Actions['SET_CAMERA_TRANSFORM']['RETURN'] {\n this.controller.object.position.copy(payload.position);\n this.controller.target.copy(payload.target);\n this.controller.update();\n\n return true;\n }\n\n private getCameraTransform(payload: Actions['GET_CAMERA_TRANSFORM']['PAYLOAD']): Actions['GET_CAMERA_TRANSFORM']['RETURN'] {\n const transform = {\n position: this.controller.object.position.clone(),\n target: this.controller.target.clone()\n };\n Object.assign(payload, transform);\n\n return transform;\n }\n\n private moveCamera(payload: Actions['MOVE_CAMERA']['PAYLOAD']): Actions['MOVE_CAMERA']['RETURN'] {\n let position = { x: 0, y: 0, z: 0 };\n let target = { x: 0, y: 0, z: 0 };\n if ('id' in payload) {\n position = (this.registered.get(payload.id) as COMPov).position;\n target = (this.registered.get(payload.id) as COMPov).target;\n } else {\n position = payload.position;\n target = payload.target;\n }\n this.controller.MoveTo(position, target, payload.duration, payload.locked);\n\n return true;\n }\n\n private setCameraLayer(payload: Actions['SET_CAMERA_LAYER']['PAYLOAD']): Actions['SET_CAMERA_LAYER']['RETURN'] {\n this.controller.object.SetCameraLayer(payload.layer);\n\n return true;\n }\n\n private resetCamera(payload: Actions['RESET_CAMERA']['PAYLOAD']): Actions['RESET_CAMERA']['RETURN'] {\n this.controller.RevertLast(payload.duration);\n\n return true;\n }\n\n private zoomCamera(payload: Actions['ZOOM_CAMERA']['PAYLOAD']): Actions['ZOOM_CAMERA']['RETURN'] {\n if (payload.direction === 'IN') this.controller.ZoomIn(payload.by);\n if (payload.direction === 'OUT') this.controller.ZoomOut(payload.by);\n\n return true;\n }\n\n private setGizmoMode(payload: Actions['SET_GIZMO_MODE']['PAYLOAD']): Actions['SET_GIZMO_MODE']['RETURN'] {\n this.toolbox.SetGizmoMode(payload.mode);\n return true;\n }\n\n private modelLoaded(payload: Actions['MODEL_LOADED']['PAYLOAD']): Actions['MODEL_LOADED']['RETURN'] {\n (this.registered.get(payload.id) as COMModel).loaded = true;\n return true;\n }\n\n private updateScene(payload: Actions['UPDATE_SCENE']['PAYLOAD']): Actions['UPDATE_SCENE']['RETURN'] {\n if (payload.name !== undefined) this.scene.name = payload.name;\n if (payload.backgroundColor !== undefined) this.scene.SetBackground(payload.backgroundColor);\n\n if (payload.floorEnabled !== undefined) this.scene.Root.Floor.SetVisibility(payload.floorEnabled);\n if (payload.floorColor !== undefined) this.scene.Root.Floor.SetColor(payload.floorColor);\n\n\n // fill payload with current values\n // TODO optmize this\n payload.name = this.scene.name;\n payload.backgroundColor = '#' + (this.scene.background as Color).getHexString();\n payload.floorEnabled = this.scene.Root.Floor.visible;\n payload.floorColor = '#' + (this.scene.Root.Floor.material as MeshStandardMaterial).color.getHexString();\n\n return true;\n }\n\n private generateMedia(payload: Actions['GENERATE_MEDIA']['PAYLOAD']): Actions['GENERATE_MEDIA']['RETURN'] {\n let position = { x: 0, y: 0, z: 0 };\n let target = { x: 0, y: 0, z: 0 };\n if ('id' in payload) {\n position = (this.registered.get(payload.id) as COMPov).position;\n target = (this.registered.get(payload.id) as COMPov).target;\n } else {\n position = payload.position;\n target = payload.target;\n }\n\n payload.dataUri = this.mediaGenerator.GenerateMedia(position, target, payload.width, payload.height);\n\n return true;\n }\n}\n\n","import { PRODUCT_LAYER_MASK } from \"../constant/VisibilityLayerMask.ts\";\nimport { Color, DirectionalLight, HemisphereLight, Object3D } from \"three\";\n\n/**\n * A complex scene light.\n *\n * Can change the color, intensity, and visibility of the light.\n *\n * @module\n */\n\nexport default class DIVESceneLight extends Object3D {\n\n private hemiLight: HemisphereLight;\n private dirLight: DirectionalLight;\n\n constructor() {\n super();\n\n this.name = \"SceneLight\";\n\n this.hemiLight = new HemisphereLight(0xffffff, 0xffffff, 2);\n this.hemiLight.layers.mask = PRODUCT_LAYER_MASK;\n this.hemiLight.position.set(0, 50, 0);\n this.add(this.hemiLight);\n\n this.dirLight = new DirectionalLight(0xffffff, 3);\n this.dirLight.layers.mask = PRODUCT_LAYER_MASK;\n this.dirLight.position.set(1, 1.75, 1);\n this.dirLight.position.multiplyScalar(30);\n this.dirLight.castShadow = true;\n\n this.dirLight.shadow.mapSize.width = 2048;\n this.dirLight.shadow.mapSize.height = 2048;\n\n const d = 5;\n\n this.dirLight.shadow.camera.left = - d;\n this.dirLight.shadow.camera.right = d;\n this.dirLight.shadow.camera.top = d;\n this.dirLight.shadow.camera.bottom = - d;\n\n this.dirLight.shadow.camera.far = 3500;\n this.add(this.dirLight);\n }\n\n public SetColor(color: Color): void {\n this.hemiLight.color = color;\n this.dirLight.color = color;\n }\n\n public SetIntensity(intensity: number): void {\n this.hemiLight.intensity = intensity * 2;\n this.dirLight.intensity = intensity * 3;\n }\n\n public SetEnabled(enabled: boolean): void {\n this.visible = enabled;\n }\n}","import { Object3D } from \"three\";\nimport { COMModel } from \"../../../com/types.ts\";\nimport Model from \"../../../model/Model.ts\";\nimport DIVELoadingManager from \"../../../loadingmanager/LoadingManager.ts\";\nimport DIVECommunication from \"../../../com/Communication.ts\";\nimport type { DIVEMoveable } from \"../../../interface/Moveable.ts\";\n\n/**\n * A basic scene node to hold all models.\n *\n * @module\n */\nexport default class DIVEModelRoot extends Object3D {\n private loadingManager: DIVELoadingManager;\n\n constructor() {\n super();\n this.name = \"ModelRoot\";\n\n this.loadingManager = new DIVELoadingManager();\n }\n\n public GetModel(object: Partial<COMModel>): Object3D | undefined {\n if (object.id === undefined) {\n console.warn('ModelRoot.GetModel: object.id is undefined')\n return undefined;\n }\n return this.children.find(object3D => object3D.userData.id === object.id);\n }\n\n public UpdateModel(object: Partial<COMModel>): void {\n if (object.id === undefined) {\n console.warn('ModelRoot.UpdateModel: object.id is undefined')\n return;\n }\n\n let sceneObject = this.children.find(object3D => object3D.userData.id === object.id);\n if (!sceneObject && object.uri !== undefined) {\n const model = new Model();\n sceneObject = model;\n sceneObject.userData.id = object.id;\n this.add(sceneObject);\n\n this.loadingManager.LoadGLTF(object.uri).then((gltf) => {\n model.SetModel(gltf);\n DIVECommunication.get(object.id!)?.PerformAction('MODEL_LOADED', { id: object.id! });\n });\n }\n\n if (object.position !== undefined) (sceneObject as Model).SetPosition(object.position);\n if (object.rotation !== undefined) (sceneObject as Model).SetRotation(object.rotation);\n if (object.scale !== undefined) (sceneObject as Model).SetScale(object.scale);\n }\n\n public DeleteModel(object: Partial<COMModel>): void {\n if (object.id === undefined) {\n console.warn(`ModelRoot.DeleteModel: object.id is undefined`)\n return;\n }\n\n const sceneObject = this.children.find(object3D => object3D.userData.id === object.id);\n if (!sceneObject) {\n console.warn(`ModelRoot.DeleteModel: Model with id ${object.id} not found`);\n return;\n }\n\n if ('isMoveable' in sceneObject) {\n (sceneObject as unknown as DIVEMoveable).gizmo?.detach();\n }\n\n this.remove(sceneObject);\n }\n\n public PlaceOnFloor(object: Partial<COMModel>): void {\n if (object.id === undefined) console.warn('ModelRoot.PlaceOnFloor: object.id is undefined');\n\n const sceneObject = this.children.find(object3D => object3D.userData.id === object.id);\n if (!sceneObject) return;\n\n (sceneObject as Model).PlaceOnFloor();\n }\n}","import { Box3, Object3D, Vector3, Vector3Like } from 'three';\nimport { DIVESelectable } from '../interface/Selectable';\nimport { PRODUCT_LAYER_MASK } from '../constant/VisibilityLayerMask';\nimport { DIVEMoveable } from '../interface/Moveable';\nimport DIVECommunication from '../com/Communication';\nimport type { GLTF, TransformControls } from 'three/examples/jsm/Addons.js';\n\n/**\n * A basic model class.\n *\n * It does calculate it's own bounding box which is used for positioning on the floor.\n *\n * Can be moved and selected.\n *\n * @module\n */\n\nexport default class DIVEModel extends Object3D implements DIVESelectable, DIVEMoveable {\n public isSelectable: true = true;\n public isMoveable: true = true;\n public gizmo: TransformControls | null = null;\n\n private boundingBox: Box3;\n\n constructor() {\n super();\n\n this.layers.mask = PRODUCT_LAYER_MASK;\n\n this.boundingBox = new Box3();\n }\n\n public SetModel(gltf: GLTF): void {\n this.clear();\n\n gltf.scene.traverse((child) => {\n child.castShadow = true;\n child.receiveShadow = true;\n\n child.layers.mask = this.layers.mask;\n this.boundingBox.expandByObject(child);\n });\n\n this.add(gltf.scene);\n }\n\n public SetPosition(position: Vector3Like): void {\n this.position.set(position.x, position.y, position.z);\n }\n\n public SetRotation(rotation: Vector3Like): void {\n this.rotation.setFromVector3(new Vector3(rotation.x, rotation.y, rotation.z));\n }\n\n public SetScale(scale: Vector3Like): void {\n this.scale.set(scale.x, scale.y, scale.z);\n }\n\n public SetToWorldOrigin(): void {\n this.position.set(0, 0, 0);\n DIVECommunication.get(this.userData.id)?.PerformAction('UPDATE_OBJECT', { id: this.userData.id, position: this.position, rotation: this.rotation, scale: this.scale });\n }\n\n public PlaceOnFloor(): void {\n this.position.y = -this.boundingBox.min.y * this.scale.y;\n DIVECommunication.get(this.userData.id)?.PerformAction('UPDATE_OBJECT', { id: this.userData.id, position: this.position, rotation: this.rotation, scale: this.scale });\n }\n\n public onMove(): void {\n DIVECommunication.get(this.userData.id)?.PerformAction('UPDATE_OBJECT', { id: this.userData.id, position: this.position, rotation: this.rotation, scale: this.scale });\n }\n}\n","import { DRACOLoader, GLTF, GLTFLoader } from \"three/examples/jsm/Addons.js\";\n\n/**\n * A basic loading manager.\n *\n * @module\n */\n\nexport default class DIVELoadingManager {\n private gltfloader: GLTFLoader;\n private dracoloader: DRACOLoader;\n // ... maybe extend with other loaders later\n\n constructor() {\n this.gltfloader = new GLTFLoader();\n this.dracoloader = new DRACOLoader();\n this.dracoloader.setDecoderPath('https://www.gstatic.com/draco/v1/decoders/');\n this.gltfloader.setDRACOLoader(this.dracoloader);\n }\n\n private progress: Map<string, number> = new Map<string, number>();\n\n public async LoadGLTF(uri: string): Promise<GLTF> {\n const progEvent = (p: ProgressEvent<EventTarget>): void => {\n this.progress.set(uri, p.loaded / p.total);\n }\n\n this.progress.set(uri, 0);\n\n return new Promise<GLTF>((resolve, reject) => {\n this.gltfloader.loadAsync(uri, progEvent).then(resolve).catch(reject);\n })\n }\n\n public PollProgress(): number {\n let total = 0;\n this.progress.forEach((progress: number) => {\n total += progress;\n });\n\n if (this.progress.size === 0) return 1;\n return total / this.progress.size;\n }\n}","import { Color, ColorRepresentation, Mesh, MeshStandardMaterial, PlaneGeometry } from \"three\";\nimport { PRODUCT_LAYER_MASK } from \"../../constant/VisibilityLayerMask.ts\";\n\n/**\n * A basic floor geometry.\n *\n * Can change the color and visibility of the floor.\n *\n * @module\n */\n\nexport default class DIVEFloor extends Mesh {\n public isFloor: true = true;\n\n constructor() {\n super(new PlaneGeometry(10000, 10000), new MeshStandardMaterial({ color: new Color(150 / 255, 150 / 255, 150 / 255) }));\n\n this.name = 'Floor';\n\n this.layers.mask = PRODUCT_LAYER_MASK;\n\n this.receiveShadow = true;\n\n this.rotateX(-Math.PI / 2);\n }\n\n public SetVisibility(visible: boolean): void {\n this.visible = visible;\n }\n\n public SetColor(color: ColorRepresentation): void {\n (this.material as MeshStandardMaterial).color = new Color(color);\n }\n}\n","export const GRID_CENTER_LINE_COLOR = '#888888';\nexport const GRID_SIDE_LINE_COLOR = '#dddddd';","import { GRID_SIDE_LINE_COLOR, GRID_CENTER_LINE_COLOR } from \"../constant/GridColors.ts\";\nimport { HELPER_LAYER_MASK } from \"../constant/VisibilityLayerMask.ts\";\nimport { GridHelper, Object3D } from \"three\";\n\n/**\n * A basic grid for the scene.\n *\n * @module\n */\n\nexport default class DIVEGrid extends Object3D {\n constructor() {\n super();\n this.name = 'Grid';\n\n const grid = new GridHelper(100, 100, GRID_CENTER_LINE_COLOR, GRID_SIDE_LINE_COLOR);\n grid.material.depthTest = false;\n grid.layers.mask = HELPER_LAYER_MASK;\n\n this.add(grid);\n }\n}","import { PerspectiveCamera } from \"three\";\nimport { DEFAULT_LAYER_MASK, HELPER_LAYER_MASK, PRODUCT_LAYER_MASK, UI_LAYER_MASK } from \"../constant/VisibilityLayerMask.ts\";\n\nexport type DIVEPerspectiveCameraSettings = {\n fov: number;\n near: number;\n far: number;\n}\n\nexport const DIVEPerspectiveCameraDefaultSettings: DIVEPerspectiveCameraSettings = {\n fov: 80,\n near: 0.1,\n far: 1000,\n}\n\n/**\n * A Perspective camera. Can change the layer mask to show different objects.\n *\n * @module\n */\n\nexport default class DIVEPerspectiveCamera extends PerspectiveCamera {\n public static readonly EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;\n public static readonly LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;\n\n public onSetCameraLayer: (mask: number) => void = () => { };\n\n constructor(settings: DIVEPerspectiveCameraSettings = DIVEPerspectiveCameraDefaultSettings) {\n super(settings.fov, 1, settings.near, settings.far);\n\n this.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;\n }\n\n public OnResize(width: number, height: number): void {\n this.aspect = width / height;\n this.updateProjectionMatrix();\n }\n\n public SetCameraLayer(layer: 'LIVE' | 'EDITOR'): void {\n this.layers.mask = layer === 'LIVE' ? DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;\n this.onSetCameraLayer(this.layers.mask);\n }\n}\n","import { OrbitControls } from \"three/examples/jsm/Addons.js\";\nimport DIVEPerspectiveCamera from \"../camera/PerspectiveCamera.ts\";\nimport DIVERenderer from \"../renderer/Renderer.ts\";\nimport { MathUtils, Vector3Like } from \"three\";\nimport { Easing, Tween } from \"@tweenjs/tween.js\";\n\nexport type DIVEOrbitControlsSettings = {\n enableDamping: boolean;\n dampingFactor: number;\n}\n\nexport const DIVEOrbitControlsDefaultSettings: DIVEOrbitControlsSettings = {\n enableDamping: true,\n dampingFactor: 0.04,\n}\n\n/**\n * Orbit Controls. Basic functionality to orbit around a given target point in the scene.\n *\n * @module\n */\n\nexport default class DIVEOrbitControls extends OrbitControls {\n public static readonly DEFAULT_ZOOM_FACTOR = 1;\n\n private last: { pos: Vector3Like, target: Vector3Like } | null = null;\n\n private animating: boolean = false;\n private locked: boolean = false;\n\n private stopMoveTo: () => void = () => { };\n private stopRevertLast: () => void = () => { };\n\n public object: DIVEPerspectiveCamera;\n public domElement: HTMLCanvasElement;\n\n constructor(camera: DIVEPerspectiveCamera, renderer: DIVERenderer, settings: DIVEOrbitControlsSettings = DIVEOrbitControlsDefaultSettings) {\n super(camera, renderer.domElement);\n\n this.domElement = renderer.domElement;\n\n this.object = camera;\n\n renderer.AddPreRenderCallback(() => {\n this.preRenderCallback();\n });\n\n this.addEventListener('change', () => {\n window.dispatchEvent(new CustomEvent('dive:orbitcontrols:change', { detail: { object: this.object } }));\n });\n\n this.enableDamping = settings.enableDamping;\n this.dampingFactor = settings.dampingFactor;\n }\n\n public ZoomIn(by?: number): void {\n const zoomBy = by || DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;\n const { minDistance, maxDistance } = this;\n this.minDistance = this.maxDistance = MathUtils.clamp(this.getDistance() - zoomBy, minDistance + zoomBy, maxDistance - zoomBy);\n this.update();\n this.minDistance = minDistance;\n this.maxDistance = maxDistance;\n }\n\n public ZoomOut(by?: number): void {\n const zoomBy = by || DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;\n const { minDistance, maxDistance } = this;\n this.minDistance = this.maxDistance = MathUtils.clamp(this.getDistance() + zoomBy, minDistance + zoomBy, maxDistance - zoomBy);\n this.update();\n this.minDistance = minDistance;\n this.maxDistance = maxDistance;\n }\n\n public MoveTo(pos: Vector3Like | undefined, target: Vector3Like | undefined, duration: number, lock: boolean): void {\n if (this.animating) return;\n\n const toPosition = pos || this.object.position.clone();\n const toTarget = target || this.target.clone();\n\n this.stopRevertLast();\n\n if (!this.locked) this.last = { pos: this.object.position.clone(), target: this.target.clone() };\n\n this.animating = duration > 0;\n this.locked = lock;\n this.enabled = false;\n\n const tweenPos = new Tween(this.object.position)\n .to(toPosition, duration)\n .easing(Easing.Quadratic.Out)\n .start();\n\n const tweenQuat = new Tween(this.target)\n .to(toTarget, duration)\n .easing(Easing.Quadratic.Out)\n .onUpdate(() => {\n this.object.lookAt(this.target);\n })\n .onComplete(() => {\n this.animating = false;\n this.enabled = !lock;\n })\n .start();\n\n this.stopMoveTo = () => {\n tweenPos.stop();\n tweenQuat.stop();\n }\n }\n\n public RevertLast(duration: number): void {\n if (this.animating || !this.locked) return;\n\n this.stopMoveTo();\n\n this.animating = duration > 0;\n this.enabled = false;\n\n const { pos, target } = this.last!;\n\n const tweenPos = new Tween(this.object.position)\n .to(pos, duration)\n .easing(Easing.Quadratic.Out)\n .start();\n\n const tweenQuat = new Tween(this.target)\n .to(target, duration)\n .easing(Easing.Quadratic.Out)\n .onUpdate(() => {\n this.object.lookAt(this.target);\n })\n .onComplete(() => {\n this.animating = false;\n this.locked = false;\n this.enabled = true;\n })\n .start();\n\n this.stopRevertLast = () => {\n tweenPos.stop();\n tweenQuat.stop();\n }\n }\n\n private preRenderCallback = (): void => {\n if (this.locked) return;\n this.update();\n }\n}","import DIVEPerspectiveCamera from \"../camera/PerspectiveCamera.ts\";\nimport DIVEScene from \"../scene/Scene.ts\";\nimport DIVERenderer from \"../renderer/Renderer.ts\";\nimport DIVEOrbitControls from \"../controls/OrbitControls.ts\";\nimport { Vector3Like } from \"three\";\n\n/**\n * Creates renderings of the current scene\n *\n * @module\n */\n\nexport default class DIVEMediaCreator {\n private renderer: DIVERenderer;\n private scene: DIVEScene;\n private controller: DIVEOrbitControls;\n\n constructor(renderer: DIVERenderer, scene: DIVEScene, controller: DIVEOrbitControls) {\n this.renderer = renderer;\n this.scene = scene;\n this.controller = controller;\n }\n\n public GenerateMedia(position: Vector3Like, target: Vector3Like, width: number, height: number): string {\n const resetPosition = this.controller.object.position.clone();\n const resetRotation = this.controller.object.quaternion.clone();\n\n this.renderer.OnResize(width, height);\n this.controller.object.OnResize(width, height);\n\n this.controller.object.position.copy(position);\n this.controller.target.copy(target);\n this.controller.update();\n\n\n const dataUri = this.DrawCanvas().toDataURL();\n\n this.controller.object.position.copy(resetPosition);\n this.controller.object.quaternion.copy(resetRotation);\n\n return dataUri;\n }\n\n public DrawCanvas(canvasElement?: HTMLCanvasElement): HTMLCanvasElement {\n // save current canvas\n const restore = this.renderer.domElement;\n if (canvasElement) {\n this.renderer.domElement = canvasElement;\n }\n\n // draw canvas\n this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;\n this.renderer.render(this.scene, this.controller.object);\n this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;\n\n const returnCanvas = this.renderer.domElement;\n\n // restore canvas\n if (canvasElement) {\n this.renderer.domElement = restore;\n }\n\n return returnCanvas;\n }\n}\n","import { Intersection, Object3D, Raycaster, Vector2 } from \"three\";\nimport { TransformControls } from \"three/examples/jsm/Addons.js\";\nimport DIVEBaseTool from \"../BaseTool.ts\";\nimport { DIVESelectable } from \"../../interface/Selectable.ts\";\nimport DIVEScene from \"../../scene/Scene.ts\";\nimport { HELPER_LAYER_MASK, PRODUCT_LAYER_MASK, UI_LAYER_MASK } from \"../../constant/VisibilityLayerMask.ts\";\nimport { DIVEMoveable } from \"../../interface/Moveable.ts\";\nimport DIVEOrbitControls from \"../../controls/OrbitControls.ts\";\n\nexport interface DIVEObjectEventMap {\n select: object\n}\n\n/**\n * A Tool to select and move objects in the scene.\n *\n * Objects have to implement the DIVESelectable interface to be selectable and DIVEMoveable to be moveable.\n *\n * @module\n */\n\nexport default class DIVESelectTool extends DIVEBaseTool {\n private canvas: HTMLElement;\n private scene: DIVEScene;\n private controller: DIVEOrbitControls;\n private raycaster: Raycaster;\n private gizmo: TransformControls;\n\n\n constructor(scene: DIVEScene, controller: DIVEOrbitControls) {\n super();\n this.name = \"SelectTool\";\n\n this.canvas = controller.domElement;\n this.scene = scene;\n this.controller = controller;\n this.raycaster = new Raycaster();\n this.raycaster.layers.mask = PRODUCT_LAYER_MASK | HELPER_LAYER_MASK;\n\n this.gizmo = new TransformControls(this.controller.object, this.canvas);\n\n this.gizmo.layers.mask = UI_LAYER_MASK;\n this.gizmo.getRaycaster().layers.mask = UI_LAYER_MASK & this.controller.object.layers.mask;\n this.gizmo.traverse((child) => {\n child.layers.mask = UI_LAYER_MASK;\n });\n this.gizmo.addEventListener('objectChange', () => {\n if (!this.gizmo.object) return;\n if (!('onMove' in this.gizmo.object)) return;\n if (typeof this.gizmo.object.onMove !== 'function') return;\n this.gizmo.object.onMove();\n });\n\n this.controller.object.onSetCameraLayer = (mask: number) => {\n this.gizmo.getRaycaster().layers.mask = UI_LAYER_MASK & mask;\n };\n\n this.gizmo.addEventListener('dragging-changed', function (event) {\n controller.enabled = !event.value;\n });\n\n this.scene.add(this.gizmo);\n }\n\n public Activate(): void { }\n\n public SetGizmoMode(mode: 'translate' | 'rotate' | 'scale'): void {\n this.gizmo.setMode(mode);\n }\n\n public Select(selectable: DIVESelectable): void {\n if (selectable.onSelect) selectable.onSelect();\n\n if ('isMoveable' in selectable) {\n const movable = selectable as (Object3D & DIVESelectable & DIVEMoveable);\n movable.gizmo = this.gizmo;\n this.gizmo.attach(movable);\n }\n }\n\n public Deselect(selectable: DIVESelectable): void {\n if (selectable.onDeselect) selectable.onDeselect();\n if (('isMoveable' in selectable)) (selectable as unknown as DIVEMoveable).gizmo = null;\n this.gizmo.detach();\n }\n\n public onPointerUp(e: PointerEvent): void {\n const pointerPos: Vector2 = new Vector2(e.offsetX / this.canvas.clientWidth * 2 - 1, e.offsetY / this.canvas.clientHeight * -2 + 1);\n this.raycaster.setFromCamera(pointerPos, this.controller.object);\n\n const first = this.raycastFirst();\n const selectable = this.findSelectableInterface(first?.object);\n if (!first || !selectable) {\n if (this.gizmo.object) this.Deselect(this.gizmo.object as (Object3D & DIVESelectable));\n return;\n }\n\n this.Select(selectable);\n }\n\n private findSelectableInterface(child: Object3D): (Object3D & DIVESelectable) | undefined {\n if (child === undefined) return undefined;\n\n if (child.parent === null) {\n // in this case it is the scene itself\n return undefined;\n }\n\n if ('isSelectable' in child) {\n return child as (Object3D & DIVESelectable);\n }\n\n return this.findSelectableInterface(child.parent);\n }\n\n private raycastFirst(): Intersection {\n return this.raycastAll()[0];\n }\n\n private raycastAll(): Intersection[] {\n return this.raycaster.intersectObjects(this.scene.Root.children, true);\n }\n}","/* eslint-disable @typescript-eslint/no-unused-vars */\nexport default abstract class DIVEBaseTool {\n protected name: string;\n\n protected constructor() {\n this.name = \"BaseTool\";\n }\n\n public Activate(): void { }\n\n public Deactivate(): void { }\n\n public onPointerDown(e: PointerEvent): void { }\n\n public onPointerUp(e: PointerEvent): void { }\n\n public onWheel(e: WheelEvent): void { }\n}","import DIVEOrbitControls from \"../controls/OrbitControls.ts\";\nimport DIVEScene from \"../scene/Scene.ts\";\nimport DIVEBaseTool from \"./BaseTool.ts\";\nimport DIVESelectTool from \"./select/SelectTool.ts\";\n\n/**\n * A Toolbox to activate and deactivate tools to use with the pointer.\n *\n * @module\n */\n\nexport default class DIVEToolbox {\n public static readonly DefaultTool = 'select';\n\n private activeTool: DIVEBaseTool;\n\n private selectTool: DIVESelectTool;\n\n private removeListenersCallback: () => void = () => { };\n\n constructor(scene: DIVEScene, controller: DIVEOrbitControls) {\n this.selectTool = new DIVESelectTool(scene, controller);\n\n controller.domElement.addEventListener('pointerdown', this.onPointerDown.bind(this));\n controller.domElement.addEventListener('pointerup', this.onPointerUp.bind(this));\n controller.domElement.addEventListener('wheel', this.onWheel.bind(this));\n\n this.removeListenersCallback = () => {\n controller.domElement.removeEventListener('pointerdown', this.onPointerDown.bind(this));\n controller.domElement.removeEventListener('pointerup', this.onPointerUp.bind(this));\n controller.domElement.removeEventListener('wheel', this.onWheel.bind(this));\n };\n\n // default tool\n this.activeTool = this.selectTool;\n this.activeTool.Activate();\n }\n\n public dispose(): void {\n this.removeListenersCallback();\n }\n\n public GetActiveTool(): DIVEBaseTool {\n return this.activeTool;\n }\n\n public UseTool(tool: string): void {\n this.activeTool.Deactivate();\n switch (tool) {\n case \"select\": {\n this.selectTool.Activate();\n this.activeTool = this.selectTool;\n break;\n }\n default: {\n throw new Error(`ToolBox.UseTool: Unknown tool: ${tool}`);\n }\n }\n }\n\n public SetGizmoMode(mode: 'translate' | 'rotate' | 'scale'): void {\n this.selectTool.SetGizmoMode(mode);\n }\n\n public onPointerDown(e: PointerEvent): void {\n this.activeTool.onPointerDown(e);\n }\n\n public onPointerUp(e: PointerEvent): void {\n this.activeTool.onPointerUp(e);\n }\n\n public onWheel(e: WheelEvent): void {\n this.activeTool.onWheel(e);\n }\n}","import { update as updateTween } from \"@tweenjs/tween.js\";\n\n/**\n * Updates all animations.\n * DIVE uses Tween.js to handle animations.\n *\n * @module\n */\n\nexport default class DIVEAnimationSystem {\n public update(): void {\n updateTween();\n }\n}","import { AxesHelper, Color, Material, Matrix4, OrthographicCamera } from \"three\";\nimport SpriteText from \"three-spritetext\";\nimport { COORDINATE_LAYER_MASK } from \"../constant/VisibilityLayerMask.ts\";\nimport { AxesColorRed, AxesColorGreen, AxesColorBlue, AxesColorRedLetter, AxesColorGreenLetter, AxesColorBlueLetter } from \"../constant/AxisHelperColors.ts\";\n\n/**\n * Shows the scene axes in the bottom left corner of the screen.\n *\n * @module\n */\n\nexport default class DIVEAxisCamera extends OrthographicCamera {\n private axesHelper: AxesHelper;\n\n constructor() {\n super(-1, 1, 1, -1, 0.1, 100);\n\n this.layers.mask = COORDINATE_LAYER_MASK;\n\n this.axesHelper = new AxesHelper(0.5);\n this.axesHelper.layers.mask = COORDINATE_LAYER_MASK;\n (this.axesHelper.material as Material).depthTest = false; // always draw\n this.axesHelper.position.set(0, 0, -1);\n\n this.axesHelper.setColors(\n new Color(AxesColorRed),\n new Color(AxesColorGreen),\n new Color(AxesColorBlue)\n );\n\n const x = new SpriteText('X', 0.2, AxesColorRedLetter);\n const y = new SpriteText('Y', 0.2, AxesColorGreenLetter);\n const z = new SpriteText('Z', 0.2, AxesColorBlueLetter);\n x.layers.mask = COORDINATE_LAYER_MASK;\n y.layers.mask = COORDINATE_LAYER_MASK;\n z.layers.mask = COORDINATE_LAYER_MASK;\n x.position.set(0.7, 0, 0);\n y.position.set(0, 0.7, 0);\n z.position.set(0, 0, 0.7);\n this.axesHelper.add(x);\n this.axesHelper.add(y);\n this.axesHelper.add(z);\n\n this.add(this.axesHelper);\n }\n\n public SetFromCameraMatrix(matrix: Matrix4): void {\n this.axesHelper.rotation.setFromRotationMatrix(new Matrix4().extractRotation(matrix).invert());\n }\n}","export const AxesColorRedLetter = '#c20017';\nexport const AxesColorGreenLetter = '#00ab26';\nexport const AxesColorBlueLetter = '#0081d4';\n\nexport const AxesColorRed = AxesColorRedLetter;\nexport const AxesColorGreen = AxesColorGreenLetter;\nexport const AxesColorBlue = AxesColorBlueLetter;","/**\n * Find the difference between two objects.\n */\n\nexport const getObjectDelta = <T extends object>(a: T, b: Partial<T>): Partial<T> => {\n\n // if a and b have no entries we have no delta\n if (Object.keys(a).length === 0 && Object.keys(b).length === 0) {\n return {};\n }\n\n // if a or b is not an object we have a delta\n if (typeof a !== 'object' || typeof b !== 'object') {\n return b;\n }\n\n let delta = {};\n\n Object.keys(b).forEach((key) => {\n\n // if key is not in a we have a delta\n if (!Object.keys(a).includes(key)) {\n delta = { ...delta, [key]: b[key as keyof object] };\n return;\n }\n\n // assumption: b[key] is an array\n if (Array.isArray(b[key as keyof object])) {\n\n // if a[key] is not an array we have a delta\n if (!Array.isArray(a[key as keyof object])) {\n delta = { ...delta, [key]: b[key as keyof object] };\n return;\n }\n\n // create arrays (for TS types to be correct)\n const aArray = a[key as keyof object] as [];\n const bArray = b[key as keyof object] as [];\n\n // if both arrays are empty we have no delta\n if (aArray.length === 0 && bArray.length === 0) {\n delta = { ...delta };\n return;\n }\n\n // if array length is different we have a delta\n if (aArray.length !== bArray.length) {\n delta = { ...delta, [key]: b[key as keyof object] };\n return;\n }\n\n // create array for deltas\n const arrayDeltas: [] = [];\n\n bArray.forEach((entry, index) => {\n // getObjectDelta in array\n const inArrayDelta = getObjectDelta(aArray[index], bArray[index]);\n\n // if inArrayDelta has more then 0 entries we have a delta\n if (Object.keys(inArrayDelta).length) {\n arrayDeltas.push(bArray[index]);\n }\n });\n\n // if arrayDeltas has more than 0 entries we have a delta\n if (Object.keys(arrayDeltas).length) {\n delta = { ...delta, [key]: arrayDeltas };\n return;\n }\n\n\n return;\n }\n\n // assumption: b[key] is an object\n if (typeof b[key as keyof object] === 'object') {\n\n // if a[key] is not an object we have a delta\n if (typeof a[key as keyof object] !== 'object') {\n delta = { ...delta, [key]: b[key as keyof object] };\n return;\n }\n\n // recursive: find objectDelta in a and b\n const objectDelta = getObjectDelta(a[key as keyof object], b[key as keyof object]);\n\n // if objectDelta has more than 0 entries we have a delta\n if (Object.keys(objectDelta).length) {\n delta = { ...delta, [key]: objectDelta };\n return;\n }\n }\n\n // if a[key] is not equal to b[key] we have a delta\n if (a[key as keyof object] !== b[key as keyof object]) {\n delta = { ...delta, [key]: b[key as keyof object] };\n }\n });\n\n return delta;\n}","export default function shift(value: number, exponent: number): number {\n const subvalues = (value + 'e').split('e');\n return +(subvalues[0] + 'e' + (+subvalues[1] + (exponent || 0)));\n}","import shift from \"../helper/shift.ts\";\n\nexport default function ceilExp(number: number, decimals: number = 0): number {\n const n = shift(number, +decimals);\n return shift(Math.ceil(n), -decimals);\n}","import shift from \"../helper/shift.ts\";\n\nexport default function floorExp(number: number, decimals: number = 0): number {\n const n = shift(number, +decimals);\n return shift(Math.floor(n), -decimals);\n}","import shift from \"../helper/shift.ts\";\n\nexport default function roundExponential(number: number, decimals: number = 0): number {\n if (number < 0) return -roundExponential(-number, decimals);\n const n = shift(number, +decimals);\n return shift(Math.round(n), -decimals);\n};","import shift from \"../helper/shift.ts\";\n\nexport default function toFixedExp(number: number, decimals: number = 0): string {\n const n = shift(number, +decimals);\n return shift(Math.round(n), -decimals).toFixed(decimals);\n}","import shift from \"../helper/shift.ts\";\n\nexport default function truncateExp(number: number, decimals: number = 0): number {\n const n = shift(number, +decimals);\n return shift(Math.trunc(n), -decimals);\n}","import ceilExp from \"./ceil/ceilExp.ts\";\nimport floorExp from \"./floor/floorExp.ts\";\nimport roundExp from \"./round/roundExp.ts\";\nimport toFixedExp from \"./toFixed/toFixedExp.ts\";\nimport truncateExp from \"./truncate/truncateExp.ts\";\n\nexport const DIVEMath: {\n ceilExp: typeof ceilExp;\n floorExp: typeof floorExp;\n roundExp: typeof roundExp;\n toFixedExp: typeof toFixedExp;\n truncateExp: typeof truncateExp;\n} = {\n ceilExp,\n floorExp,\n roundExp,\n toFixedExp,\n truncateExp,\n}"],"mappings":"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","names":["import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_three","import_Addons","import_three","import_three","import_Addons","import_tween","updateTween","import_three","SpriteText"]}