@onerjs/core 8.25.1 → 8.25.3
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.
- package/Bones/bone.js +14 -54
- package/Bones/bone.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Native/nativeShaderProcessors.js +3 -0
- package/Engines/Native/nativeShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +3 -0
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/abstractEngine.d.ts +1 -1
- package/Engines/abstractEngine.functions.d.ts +2 -2
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +8 -0
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +16 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +16 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +40 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +3 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +10 -7
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +2 -2
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +4 -0
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/cameraGizmo.js +11 -13
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +21 -13
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Loading/sceneLoader.d.ts +3 -1
- package/Loading/sceneLoader.js +3 -2
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +3 -14
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +5 -0
- package/Materials/Textures/renderTargetTexture.js +9 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/material.d.ts +17 -1
- package/Materials/material.js +38 -7
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +1 -0
- package/Materials/materialDefines.js +1 -0
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +3 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +3 -10
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Misc/assetsManager.d.ts +81 -25
- package/Misc/assetsManager.js +70 -32
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/fileTools.d.ts +2 -2
- package/Misc/fileTools.js +3 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +6 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +4 -0
- package/Particles/gpuParticleSystem.js +4 -0
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +14 -0
- package/Particles/thinParticleSystem.js +19 -0
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +1 -1
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +5 -3
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +22 -9
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +3 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +18 -2
- package/Rendering/objectRenderer.js +69 -29
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +4 -0
- package/Rendering/outlineRenderer.js +10 -0
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -5
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/ssao2.fragment.js +14 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/ssao2.fragment.js +14 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +6 -2
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -0
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cameraGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/cameraGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../Maths/math.color\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { Matrix } from \"../Maths/math\";\r\nimport { CreateLines } from \"../Meshes/Builders/linesBuilder\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Interface for camera gizmo\r\n */\r\nexport interface ICameraGizmo extends IGizmo {\r\n /** Event that fires each time the gizmo is clicked */\r\n onClickedObservable: Observable<Camera>;\r\n /** A boolean indicating if frustum lines must be rendered */\r\n displayFrustum: boolean;\r\n /** The camera that the gizmo is attached to */\r\n camera: Nullable<Camera>;\r\n /** The material used to render the camera gizmo */\r\n readonly material: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Gizmo that enables viewing a camera\r\n */\r\nexport class CameraGizmo extends Gizmo implements ICameraGizmo {\r\n protected _cameraMesh: Mesh;\r\n protected _cameraLinesMesh: Mesh;\r\n protected _material: StandardMaterial;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n private _frustumLinesColor?: Color3;\r\n\r\n /**\r\n * Event that fires each time the gizmo is clicked\r\n */\r\n public onClickedObservable = new Observable<Camera>();\r\n\r\n /**\r\n * Creates a CameraGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param gizmoColor Camera mesh color. Default is Gray\r\n * @param frustumLinesColor Frustum lines color. Default is White\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, gizmoColor?: Color3, frustumLinesColor?: Color3) {\r\n super(gizmoLayer);\r\n\r\n this._material = new StandardMaterial(\"cameraGizmoMaterial\", this.gizmoLayer.utilityLayerScene);\r\n this._frustumLinesColor = frustumLinesColor;\r\n\r\n this._material.diffuseColor = gizmoColor ?? new Color3(0.5, 0.5, 0.5);\r\n this._material.specularColor = new Color3(0.1, 0.1, 0.1);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n this._isHovered = !!(pointerInfo.pickInfo && this._rootMesh.getChildMeshes().indexOf(<Mesh>pointerInfo.pickInfo.pickedMesh) != -1);\r\n if (this._isHovered && pointerInfo.type === PointerEventTypes.POINTERDOWN && pointerInfo.event.button === 0) {\r\n this.onClickedObservable.notifyObservers(this._camera);\r\n }\r\n });\r\n }\r\n protected _camera: Nullable<Camera> = null;\r\n\r\n /** Gets or sets a boolean indicating if frustum lines must be rendered (true by default)) */\r\n public get displayFrustum() {\r\n return this._cameraLinesMesh.isEnabled();\r\n }\r\n public set displayFrustum(value) {\r\n this._cameraLinesMesh.setEnabled(value);\r\n }\r\n\r\n /**\r\n * The camera that the gizmo is attached to\r\n */\r\n public set camera(camera: Nullable<Camera>) {\r\n this._camera = camera;\r\n this.attachedNode = camera;\r\n if (camera) {\r\n // Create the mesh for the given camera\r\n if (!this._customMeshSet) {\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n this._cameraMesh = CameraGizmo._CreateCameraMesh(this.gizmoLayer.utilityLayerScene);\r\n\r\n const childMeshes = this._cameraMesh.getChildMeshes(false);\r\n for (const m of childMeshes) {\r\n m.material = this._material;\r\n }\r\n this._cameraMesh.parent = this._rootMesh;\r\n }\r\n\r\n if (this._cameraLinesMesh) {\r\n this._cameraLinesMesh.dispose();\r\n }\r\n const linesColor = this._frustumLinesColor?.toColor4(1) ?? new Color4(1, 1, 1, 1);\r\n this._cameraLinesMesh = CameraGizmo._CreateCameraFrustum(this.gizmoLayer.utilityLayerScene, linesColor);\r\n this._cameraLinesMesh.parent = this._rootMesh;\r\n\r\n if (\r\n this.gizmoLayer.utilityLayerScene.activeCamera &&\r\n this.gizmoLayer.utilityLayerScene.activeCamera != camera &&\r\n this.gizmoLayer.utilityLayerScene.activeCamera.maxZ < camera.maxZ\r\n ) {\r\n this.gizmoLayer.utilityLayerScene.activeCamera.maxZ = camera.maxZ;\r\n }\r\n\r\n if (!this.attachedNode!.reservedDataStore) {\r\n this.attachedNode!.reservedDataStore = {};\r\n }\r\n this.attachedNode!.reservedDataStore.cameraGizmo = this;\r\n\r\n // Add lighting to the camera gizmo\r\n const gizmoLight = this.gizmoLayer._getSharedGizmoLight();\r\n gizmoLight.includedOnlyMeshes = gizmoLight.includedOnlyMeshes.concat(this._cameraMesh.getChildMeshes(false));\r\n\r\n this._update();\r\n }\r\n }\r\n\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n /**\r\n * Gets the material used to render the camera gizmo\r\n */\r\n public get material() {\r\n return this._material;\r\n }\r\n /**\r\n * @internal\r\n * Updates the gizmo to match the attached mesh's position/rotation\r\n */\r\n\r\n protected override _update() {\r\n super._update();\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n // frustum matrix\r\n this._camera.getProjectionMatrix().invertToRef(this._invProjection);\r\n this._cameraLinesMesh.setPivotMatrix(this._invProjection, false);\r\n\r\n this._cameraLinesMesh.scaling.x = 1 / this._rootMesh.scaling.x;\r\n this._cameraLinesMesh.scaling.y = 1 / this._rootMesh.scaling.y;\r\n this._cameraLinesMesh.scaling.z = 1 / this._rootMesh.scaling.z;\r\n\r\n // take care of coordinate system in camera scene to properly display the mesh with the good Y axis orientation in this scene\r\n this._cameraMesh.parent = null;\r\n this._cameraMesh.rotation.y = Math.PI * 0.5 * (this._camera.getScene().useRightHandedSystem ? 1 : -1);\r\n this._cameraMesh.parent = this._rootMesh;\r\n }\r\n\r\n // Static helper methods\r\n private static _Scale = 0.05;\r\n private _invProjection = new Matrix();\r\n\r\n /**\r\n * Disposes and replaces the current camera mesh in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the camera gizmo\r\n */\r\n public override setCustomMesh(mesh: Mesh) {\r\n if (mesh.getScene() != this.gizmoLayer.utilityLayerScene) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"When setting a custom mesh on a gizmo, the custom meshes scene must be the same as the gizmos (eg. gizmo.gizmoLayer.utilityLayerScene)\";\r\n }\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n this._cameraMesh = mesh;\r\n this._cameraMesh.parent = this._rootMesh;\r\n this._customMeshSet = true;\r\n }\r\n\r\n /**\r\n * Disposes of the camera gizmo\r\n */\r\n public override dispose() {\r\n this.onClickedObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n if (this._cameraLinesMesh) {\r\n this._cameraLinesMesh.dispose();\r\n }\r\n this._material.dispose();\r\n super.dispose();\r\n }\r\n\r\n private static _CreateCameraMesh(scene: Scene) {\r\n const root = new Mesh(\"rootCameraGizmo\", scene);\r\n\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n\r\n const box = CreateBox(root.name, { width: 1.0, height: 0.8, depth: 0.5 }, scene);\r\n box.parent = mesh;\r\n\r\n const cyl1 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.8, diameterBottom: 0.8 }, scene);\r\n cyl1.parent = mesh;\r\n cyl1.position.y = 0.3;\r\n cyl1.position.x = -0.6;\r\n cyl1.rotation.x = Math.PI * 0.5;\r\n\r\n const cyl2 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.6, diameterBottom: 0.6 }, scene);\r\n cyl2.parent = mesh;\r\n cyl2.position.y = 0.5;\r\n cyl2.position.x = 0.4;\r\n cyl2.rotation.x = Math.PI * 0.5;\r\n\r\n const cyl3 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.5, diameterBottom: 0.5 }, scene);\r\n cyl3.parent = mesh;\r\n cyl3.position.y = 0.0;\r\n cyl3.position.x = 0.6;\r\n cyl3.rotation.z = Math.PI * 0.5;\r\n\r\n root.scaling.scaleInPlace(CameraGizmo._Scale);\r\n mesh.position.x = -0.9;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateCameraFrustum(scene: Scene, linesColor: Color4) {\r\n const root = new Mesh(\"rootCameraGizmo\", scene);\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n\r\n for (let y = 0; y < 4; y += 2) {\r\n for (let x = 0; x < 4; x += 2) {\r\n let line = CreateLines(\"lines\", { points: [new Vector3(-1 + x, -1 + y, -1), new Vector3(-1 + x, -1 + y, 1)], colors: [linesColor, linesColor] }, scene);\r\n line.parent = mesh;\r\n line.alwaysSelectAsActiveMesh = true;\r\n line.isPickable = false;\r\n line = CreateLines(\"lines\", { points: [new Vector3(-1, -1 + x, -1 + y), new Vector3(1, -1 + x, -1 + y)], colors: [linesColor, linesColor] }, scene);\r\n line.parent = mesh;\r\n line.alwaysSelectAsActiveMesh = true;\r\n line.isPickable = false;\r\n line = CreateLines(\"lines\", { points: [new Vector3(-1 + x, -1, -1 + y), new Vector3(-1 + x, 1, -1 + y)], colors: [linesColor, linesColor] }, scene);\r\n line.parent = mesh;\r\n line.alwaysSelectAsActiveMesh = true;\r\n line.isPickable = false;\r\n }\r\n }\r\n\r\n return root;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"cameraGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/cameraGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../Maths/math.color\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { Matrix } from \"../Maths/math\";\r\nimport { CreateLineSystem } from \"../Meshes/Builders/linesBuilder\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Interface for camera gizmo\r\n */\r\nexport interface ICameraGizmo extends IGizmo {\r\n /** Event that fires each time the gizmo is clicked */\r\n onClickedObservable: Observable<Camera>;\r\n /** A boolean indicating if frustum lines must be rendered */\r\n displayFrustum: boolean;\r\n /** The camera that the gizmo is attached to */\r\n camera: Nullable<Camera>;\r\n /** The material used to render the camera gizmo */\r\n readonly material: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Gizmo that enables viewing a camera\r\n */\r\nexport class CameraGizmo extends Gizmo implements ICameraGizmo {\r\n protected _cameraMesh: Mesh;\r\n protected _cameraLinesMesh: Mesh;\r\n protected _material: StandardMaterial;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n private _frustumLinesColor?: Color3;\r\n\r\n /**\r\n * Event that fires each time the gizmo is clicked\r\n */\r\n public onClickedObservable = new Observable<Camera>();\r\n\r\n /**\r\n * Creates a CameraGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param gizmoColor Camera mesh color. Default is Gray\r\n * @param frustumLinesColor Frustum lines color. Default is White\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, gizmoColor?: Color3, frustumLinesColor?: Color3) {\r\n super(gizmoLayer);\r\n\r\n this._material = new StandardMaterial(\"cameraGizmoMaterial\", this.gizmoLayer.utilityLayerScene);\r\n this._frustumLinesColor = frustumLinesColor;\r\n\r\n this._material.diffuseColor = gizmoColor ?? new Color3(0.5, 0.5, 0.5);\r\n this._material.specularColor = new Color3(0.1, 0.1, 0.1);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n this._isHovered = !!(pointerInfo.pickInfo && this._rootMesh.getChildMeshes().indexOf(<Mesh>pointerInfo.pickInfo.pickedMesh) != -1);\r\n if (this._isHovered && pointerInfo.type === PointerEventTypes.POINTERDOWN && pointerInfo.event.button === 0) {\r\n this.onClickedObservable.notifyObservers(this._camera);\r\n }\r\n });\r\n }\r\n protected _camera: Nullable<Camera> = null;\r\n\r\n /** Gets or sets a boolean indicating if frustum lines must be rendered (true by default)) */\r\n public get displayFrustum() {\r\n return this._cameraLinesMesh.isEnabled();\r\n }\r\n public set displayFrustum(value) {\r\n this._cameraLinesMesh.setEnabled(value);\r\n }\r\n\r\n /**\r\n * The camera that the gizmo is attached to\r\n */\r\n public set camera(camera: Nullable<Camera>) {\r\n this._camera = camera;\r\n this.attachedNode = camera;\r\n if (camera) {\r\n // Create the mesh for the given camera\r\n if (!this._customMeshSet) {\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n this._cameraMesh = CameraGizmo._CreateCameraMesh(this.gizmoLayer.utilityLayerScene);\r\n\r\n const childMeshes = this._cameraMesh.getChildMeshes(false);\r\n for (const m of childMeshes) {\r\n m.material = this._material;\r\n }\r\n this._cameraMesh.parent = this._rootMesh;\r\n }\r\n\r\n if (this._cameraLinesMesh) {\r\n this._cameraLinesMesh.dispose();\r\n }\r\n const linesColor = this._frustumLinesColor?.toColor4(1) ?? new Color4(1, 1, 1, 1);\r\n this._cameraLinesMesh = CameraGizmo._CreateCameraFrustum(this.gizmoLayer.utilityLayerScene, linesColor);\r\n this._cameraLinesMesh.parent = this._rootMesh;\r\n\r\n if (\r\n this.gizmoLayer.utilityLayerScene.activeCamera &&\r\n this.gizmoLayer.utilityLayerScene.activeCamera != camera &&\r\n this.gizmoLayer.utilityLayerScene.activeCamera.maxZ < camera.maxZ\r\n ) {\r\n this.gizmoLayer.utilityLayerScene.activeCamera.maxZ = camera.maxZ;\r\n }\r\n\r\n if (!this.attachedNode!.reservedDataStore) {\r\n this.attachedNode!.reservedDataStore = {};\r\n }\r\n this.attachedNode!.reservedDataStore.cameraGizmo = this;\r\n\r\n // Add lighting to the camera gizmo\r\n const gizmoLight = this.gizmoLayer._getSharedGizmoLight();\r\n gizmoLight.includedOnlyMeshes = gizmoLight.includedOnlyMeshes.concat(this._cameraMesh.getChildMeshes(false));\r\n\r\n this._update();\r\n }\r\n }\r\n\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n /**\r\n * Gets the material used to render the camera gizmo\r\n */\r\n public get material() {\r\n return this._material;\r\n }\r\n /**\r\n * @internal\r\n * Updates the gizmo to match the attached mesh's position/rotation\r\n */\r\n\r\n protected override _update() {\r\n super._update();\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n // frustum matrix\r\n this._camera.getProjectionMatrix().invertToRef(this._invProjection);\r\n this._cameraLinesMesh.setPivotMatrix(this._invProjection, false);\r\n\r\n this._cameraLinesMesh.scaling.x = 1 / this._rootMesh.scaling.x;\r\n this._cameraLinesMesh.scaling.y = 1 / this._rootMesh.scaling.y;\r\n this._cameraLinesMesh.scaling.z = 1 / this._rootMesh.scaling.z;\r\n\r\n // take care of coordinate system in camera scene to properly display the mesh with the good Y axis orientation in this scene\r\n this._cameraMesh.parent = null;\r\n this._cameraMesh.rotation.y = Math.PI * 0.5 * (this._camera.getScene().useRightHandedSystem ? 1 : -1);\r\n this._cameraMesh.parent = this._rootMesh;\r\n }\r\n\r\n // Static helper methods\r\n private static _Scale = 0.05;\r\n private _invProjection = new Matrix();\r\n\r\n /**\r\n * Disposes and replaces the current camera mesh in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the camera gizmo\r\n */\r\n public override setCustomMesh(mesh: Mesh) {\r\n if (mesh.getScene() != this.gizmoLayer.utilityLayerScene) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"When setting a custom mesh on a gizmo, the custom meshes scene must be the same as the gizmos (eg. gizmo.gizmoLayer.utilityLayerScene)\";\r\n }\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n this._cameraMesh = mesh;\r\n this._cameraMesh.parent = this._rootMesh;\r\n this._customMeshSet = true;\r\n }\r\n\r\n /**\r\n * Disposes of the camera gizmo\r\n */\r\n public override dispose() {\r\n this.onClickedObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n if (this._cameraMesh) {\r\n this._cameraMesh.dispose();\r\n }\r\n if (this._cameraLinesMesh) {\r\n this._cameraLinesMesh.dispose();\r\n }\r\n this._material.dispose();\r\n super.dispose();\r\n }\r\n\r\n private static _CreateCameraMesh(scene: Scene) {\r\n const root = new Mesh(\"rootCameraGizmo\", scene);\r\n\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n\r\n const box = CreateBox(root.name, { width: 1.0, height: 0.8, depth: 0.5 }, scene);\r\n box.parent = mesh;\r\n\r\n const cyl1 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.8, diameterBottom: 0.8 }, scene);\r\n cyl1.parent = mesh;\r\n cyl1.position.y = 0.3;\r\n cyl1.position.x = -0.6;\r\n cyl1.rotation.x = Math.PI * 0.5;\r\n\r\n const cyl2 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.6, diameterBottom: 0.6 }, scene);\r\n cyl2.parent = mesh;\r\n cyl2.position.y = 0.5;\r\n cyl2.position.x = 0.4;\r\n cyl2.rotation.x = Math.PI * 0.5;\r\n\r\n const cyl3 = CreateCylinder(root.name, { height: 0.5, diameterTop: 0.5, diameterBottom: 0.5 }, scene);\r\n cyl3.parent = mesh;\r\n cyl3.position.y = 0.0;\r\n cyl3.position.x = 0.6;\r\n cyl3.rotation.z = Math.PI * 0.5;\r\n\r\n root.scaling.scaleInPlace(CameraGizmo._Scale);\r\n mesh.position.x = -0.9;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateCameraFrustum(scene: Scene, linesColor: Color4) {\r\n const root = new Mesh(\"rootCameraGizmo\", scene);\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n\r\n const lines: Vector3[][] = [];\r\n const colors: Color4[][] = [];\r\n\r\n for (let y = 0; y < 4; y += 2) {\r\n for (let x = 0; x < 4; x += 2) {\r\n lines.push([new Vector3(-1 + x, -1 + y, -1), new Vector3(-1 + x, -1 + y, 1)]);\r\n\r\n lines.push([new Vector3(-1, -1 + x, -1 + y), new Vector3(1, -1 + x, -1 + y)]);\r\n\r\n lines.push([new Vector3(-1 + x, -1, -1 + y), new Vector3(-1 + x, 1, -1 + y)]);\r\n colors.push([linesColor, linesColor], [linesColor, linesColor], [linesColor, linesColor]);\r\n }\r\n }\r\n\r\n const line = CreateLineSystem(\"lines\", { lines, colors }, scene);\r\n\r\n line.parent = mesh;\r\n line.alwaysSelectAsActiveMesh = true;\r\n line.isPickable = false;\r\n\r\n return root;\r\n }\r\n}\r\n"]}
|
package/Gizmos/planeDragGizmo.js
CHANGED
|
@@ -73,8 +73,9 @@ export class PlaneDragGizmo extends Gizmo {
|
|
|
73
73
|
this._gizmoMesh.lookAt(this._rootMesh.position.add(dragPlaneNormal));
|
|
74
74
|
this._gizmoMesh.scaling.scaleInPlace(1 / 3);
|
|
75
75
|
this._gizmoMesh.parent = this._rootMesh;
|
|
76
|
-
|
|
76
|
+
const currentSnapDragDistance = new Vector3();
|
|
77
77
|
const tmpVector = new Vector3();
|
|
78
|
+
const tmpVector2 = new Vector3();
|
|
78
79
|
const tmpSnapEvent = { snapDistance: 0 };
|
|
79
80
|
// Add dragPlaneNormal drag behavior to handle events when the gizmo is dragged
|
|
80
81
|
this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: dragPlaneNormal });
|
|
@@ -94,20 +95,27 @@ export class PlaneDragGizmo extends Gizmo {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
else {
|
|
97
|
-
currentSnapDragDistance
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
this.onSnapObservable.notifyObservers(tmpSnapEvent);
|
|
98
|
+
currentSnapDragDistance.addInPlace(event.delta);
|
|
99
|
+
tmpVector2.set(0, 0, 0);
|
|
100
|
+
const currentSnapDragDistanceArray = currentSnapDragDistance.asArray();
|
|
101
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
102
|
+
const axisDistance = currentSnapDragDistanceArray[axis];
|
|
103
|
+
if (Math.abs(axisDistance) > this.snapDistance) {
|
|
104
|
+
const dragSteps = (axisDistance < 0 ? Math.ceil : Math.floor)(axisDistance / this.snapDistance);
|
|
105
|
+
currentSnapDragDistanceArray[axis] = currentSnapDragDistanceArray[axis] % this.snapDistance;
|
|
106
|
+
tmpVector.set(axis == 0 ? 1 : 0, axis == 1 ? 1 : 0, axis == 2 ? 1 : 0);
|
|
107
|
+
tmpVector.scaleInPlace(this.snapDistance * dragSteps);
|
|
108
|
+
tmpVector2.addInPlace(tmpVector);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
+
currentSnapDragDistance.fromArray(currentSnapDragDistanceArray);
|
|
112
|
+
this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[0]);
|
|
113
|
+
TmpVectors.Vector3[0].addToRef(tmpVector2, TmpVectors.Vector3[0]);
|
|
114
|
+
if (this.dragBehavior.validateDrag(TmpVectors.Vector3[0])) {
|
|
115
|
+
this.attachedNode.getWorldMatrix().addTranslationFromFloats(tmpVector2.x, tmpVector2.y, tmpVector2.z);
|
|
116
|
+
tmpSnapEvent.snapDistance = tmpVector2.length();
|
|
117
|
+
this.onSnapObservable.notifyObservers(tmpSnapEvent);
|
|
118
|
+
}
|
|
111
119
|
}
|
|
112
120
|
this._matrixChanged();
|
|
113
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planeDragGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/planeDragGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { TmpVectors, Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\n\r\n/**\r\n * Interface for plane drag gizmo\r\n */\r\nexport interface IPlaneDragGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse */\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey. */\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single plane drag gizmo\r\n */\r\nexport class PlaneDragGizmo extends Gizmo implements IPlaneDragGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n protected _gizmoMesh: TransformNode;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n\r\n protected _isEnabled: boolean = false;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n protected _dragging: boolean = false;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreatePlane(scene: Scene, material: StandardMaterial): TransformNode {\r\n const plane = new TransformNode(\"plane\", scene);\r\n\r\n //make sure plane is double sided\r\n const dragPlane = CreatePlane(\"dragPlane\", { width: 0.1375, height: 0.1375, sideOrientation: 2 }, scene);\r\n dragPlane.material = material;\r\n dragPlane.parent = plane;\r\n return plane;\r\n }\r\n\r\n /**\r\n * Creates a PlaneDragGizmo\r\n * @param dragPlaneNormal The axis normal to which the gizmo will be able to drag on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragPlaneNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build plane mesh on root node\r\n this._gizmoMesh = PlaneDragGizmo._CreatePlane(gizmoLayer.utilityLayerScene, this._coloredMaterial);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragPlaneNormal));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n let currentSnapDragDistance = 0;\r\n const tmpVector = new Vector3();\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add dragPlaneNormal drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: dragPlaneNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].addToRef(event.delta, TmpVectors.Vector3[0]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[0])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n }\r\n } else {\r\n currentSnapDragDistance += event.dragDistance;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n const dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n event.delta.normalizeToRef(tmpVector);\r\n tmpVector.scaleInPlace(this.snapDistance * dragSteps);\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].addToRef(tmpVector, TmpVectors.Vector3[0]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[0])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(tmpVector.x, tmpVector.y, tmpVector.z);\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n }\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: this._gizmoMesh.getChildMeshes(),\r\n colliderMeshes: this._gizmoMesh.getChildMeshes(),\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh as Mesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = cache.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n }\r\n\r\n protected override _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n super.dispose();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n const materials = [this._coloredMaterial, this._hoverMaterial, this._disableMaterial];\r\n for (const matl of materials) {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"planeDragGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/planeDragGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { TmpVectors, Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\n\r\n/**\r\n * Interface for plane drag gizmo\r\n */\r\nexport interface IPlaneDragGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse */\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey. */\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single plane drag gizmo\r\n */\r\nexport class PlaneDragGizmo extends Gizmo implements IPlaneDragGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n protected _gizmoMesh: TransformNode;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n\r\n protected _isEnabled: boolean = false;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n protected _dragging: boolean = false;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreatePlane(scene: Scene, material: StandardMaterial): TransformNode {\r\n const plane = new TransformNode(\"plane\", scene);\r\n\r\n //make sure plane is double sided\r\n const dragPlane = CreatePlane(\"dragPlane\", { width: 0.1375, height: 0.1375, sideOrientation: 2 }, scene);\r\n dragPlane.material = material;\r\n dragPlane.parent = plane;\r\n return plane;\r\n }\r\n\r\n /**\r\n * Creates a PlaneDragGizmo\r\n * @param dragPlaneNormal The axis normal to which the gizmo will be able to drag on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragPlaneNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build plane mesh on root node\r\n this._gizmoMesh = PlaneDragGizmo._CreatePlane(gizmoLayer.utilityLayerScene, this._coloredMaterial);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragPlaneNormal));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n const currentSnapDragDistance = new Vector3();\r\n const tmpVector = new Vector3();\r\n const tmpVector2 = new Vector3();\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add dragPlaneNormal drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: dragPlaneNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].addToRef(event.delta, TmpVectors.Vector3[0]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[0])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n }\r\n } else {\r\n currentSnapDragDistance.addInPlace(event.delta);\r\n tmpVector2.set(0, 0, 0);\r\n const currentSnapDragDistanceArray = currentSnapDragDistance.asArray();\r\n for (let axis = 0; axis < 3; axis++) {\r\n const axisDistance = currentSnapDragDistanceArray[axis];\r\n if (Math.abs(axisDistance) > this.snapDistance) {\r\n const dragSteps = (axisDistance < 0 ? Math.ceil : Math.floor)(axisDistance / this.snapDistance);\r\n currentSnapDragDistanceArray[axis] = currentSnapDragDistanceArray[axis] % this.snapDistance;\r\n tmpVector.set(axis == 0 ? 1 : 0, axis == 1 ? 1 : 0, axis == 2 ? 1 : 0);\r\n tmpVector.scaleInPlace(this.snapDistance * dragSteps);\r\n tmpVector2.addInPlace(tmpVector);\r\n }\r\n }\r\n currentSnapDragDistance.fromArray(currentSnapDragDistanceArray);\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].addToRef(tmpVector2, TmpVectors.Vector3[0]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[0])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(tmpVector2.x, tmpVector2.y, tmpVector2.z);\r\n tmpSnapEvent.snapDistance = tmpVector2.length();\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: this._gizmoMesh.getChildMeshes(),\r\n colliderMeshes: this._gizmoMesh.getChildMeshes(),\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh as Mesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = cache.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n }\r\n\r\n protected override _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n super.dispose();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n const materials = [this._coloredMaterial, this._hoverMaterial, this._disableMaterial];\r\n for (const matl of materials) {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
package/Loading/sceneLoader.d.ts
CHANGED
|
@@ -276,6 +276,7 @@ type DefaultPluginOptions<BasePluginOptions> = {
|
|
|
276
276
|
*/
|
|
277
277
|
enabled?: boolean;
|
|
278
278
|
} & BasePluginOptions;
|
|
279
|
+
export type PluginOptions = ISceneLoaderOptions["pluginOptions"];
|
|
279
280
|
type SceneSource = string | File | ArrayBufferView;
|
|
280
281
|
/**
|
|
281
282
|
* Defines common options for loading operations performed by SceneLoader.
|
|
@@ -530,9 +531,10 @@ export declare class SceneLoader {
|
|
|
530
531
|
* @param onError a callback with the scene, a message, and possibly an exception when import fails
|
|
531
532
|
* @param pluginExtension the extension used to determine the plugin
|
|
532
533
|
* @param name defines the name of the file, if the data is binary
|
|
534
|
+
* @param pluginOptions defines the options to use with the plugin
|
|
533
535
|
* @deprecated Please use the module level {@link ImportMeshAsync} instead
|
|
534
536
|
*/
|
|
535
|
-
static ImportMesh(meshNames: string | readonly string[] | null | undefined, rootUrl: string, sceneFilename?: SceneSource, scene?: Nullable<Scene>, onSuccess?: Nullable<SceneLoaderSuccessCallback>, onProgress?: Nullable<(event: ISceneLoaderProgressEvent) => void>, onError?: Nullable<(scene: Scene, message: string, exception?: any) => void>, pluginExtension?: Nullable<string>, name?: string): void;
|
|
537
|
+
static ImportMesh(meshNames: string | readonly string[] | null | undefined, rootUrl: string, sceneFilename?: SceneSource, scene?: Nullable<Scene>, onSuccess?: Nullable<SceneLoaderSuccessCallback>, onProgress?: Nullable<(event: ISceneLoaderProgressEvent) => void>, onError?: Nullable<(scene: Scene, message: string, exception?: any) => void>, pluginExtension?: Nullable<string>, name?: string, pluginOptions?: PluginOptions): void;
|
|
536
538
|
/**
|
|
537
539
|
* Import meshes into a scene
|
|
538
540
|
* @param meshNames an array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported
|
package/Loading/sceneLoader.js
CHANGED
|
@@ -929,11 +929,12 @@ export class SceneLoader {
|
|
|
929
929
|
* @param onError a callback with the scene, a message, and possibly an exception when import fails
|
|
930
930
|
* @param pluginExtension the extension used to determine the plugin
|
|
931
931
|
* @param name defines the name of the file, if the data is binary
|
|
932
|
+
* @param pluginOptions defines the options to use with the plugin
|
|
932
933
|
* @deprecated Please use the module level {@link ImportMeshAsync} instead
|
|
933
934
|
*/
|
|
934
|
-
static ImportMesh(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
935
|
+
static ImportMesh(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name, pluginOptions) {
|
|
935
936
|
// eslint-disable-next-line github/no-then
|
|
936
|
-
importMeshAsync(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name).catch((error) => onError?.(EngineStore.LastCreatedScene, error?.message, error));
|
|
937
|
+
importMeshAsync(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name, pluginOptions).catch((error) => onError?.(EngineStore.LastCreatedScene, error?.message, error));
|
|
937
938
|
}
|
|
938
939
|
/**
|
|
939
940
|
* Import meshes into a scene
|