{"ast":null,"code":"import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Matrix, Quaternion } from \"../../Maths/math.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Mesh } from \"../../Meshes/mesh.js\";\nimport { VertexBuffer } from \"../../Buffers/buffer.js\";\nimport { Logger } from \"../../Misc/logger.js\";\nlet meshIdProvider = 0;\n/**\n * The mesh detector is used to detect meshes in the real world when in AR\n */\nexport class WebXRMeshDetector extends WebXRAbstractFeature {\n constructor(_xrSessionManager, _options = {}) {\n super(_xrSessionManager);\n this._options = _options;\n this._detectedMeshes = new Map();\n /**\n * Observers registered here will be executed when a new mesh was added to the session\n */\n this.onMeshAddedObservable = new Observable();\n /**\n * Observers registered here will be executed when a mesh is no longer detected in the session\n */\n this.onMeshRemovedObservable = new Observable();\n /**\n * Observers registered here will be executed when an existing mesh updates\n */\n this.onMeshUpdatedObservable = new Observable();\n this.xrNativeFeatureName = \"mesh-detection\";\n if (this._options.generateMeshes) {\n this._options.convertCoordinateSystems = true;\n }\n if (this._xrSessionManager.session) {\n this._init();\n } else {\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\n this._init();\n });\n }\n }\n detach() {\n if (!super.detach()) {\n return false;\n }\n // Only supported by BabylonNative\n if (!!this._xrSessionManager.isNative && !!this._xrSessionManager.session.trySetMeshDetectorEnabled) {\n this._xrSessionManager.session.trySetMeshDetectorEnabled(false);\n }\n if (!this._options.doNotRemoveMeshesOnSessionEnded) {\n this._detectedMeshes.forEach(mesh => {\n this.onMeshRemovedObservable.notifyObservers(mesh);\n });\n this._detectedMeshes.clear();\n }\n return true;\n }\n dispose() {\n super.dispose();\n this.onMeshAddedObservable.clear();\n this.onMeshRemovedObservable.clear();\n this.onMeshUpdatedObservable.clear();\n }\n _onXRFrame(frame) {\n // TODO remove try catch\n try {\n var _frame$worldInformati;\n if (!this.attached || !frame) {\n return;\n }\n // babylon native XR and webxr support\n const detectedMeshes = frame.detectedMeshes || ((_frame$worldInformati = frame.worldInformation) === null || _frame$worldInformati === void 0 ? void 0 : _frame$worldInformati.detectedMeshes);\n if (detectedMeshes) {\n const toRemove = new Set();\n this._detectedMeshes.forEach((vertexData, xrMesh) => {\n if (!detectedMeshes.has(xrMesh)) {\n toRemove.add(xrMesh);\n }\n });\n toRemove.forEach(xrMesh => {\n const vertexData = this._detectedMeshes.get(xrMesh);\n if (vertexData) {\n this.onMeshRemovedObservable.notifyObservers(vertexData);\n this._detectedMeshes.delete(xrMesh);\n }\n });\n // now check for new ones\n detectedMeshes.forEach(xrMesh => {\n if (!this._detectedMeshes.has(xrMesh)) {\n const partialVertexData = {\n id: meshIdProvider++,\n xrMesh: xrMesh\n };\n const vertexData = this._updateVertexDataWithXRMesh(xrMesh, partialVertexData, frame);\n this._detectedMeshes.set(xrMesh, vertexData);\n this.onMeshAddedObservable.notifyObservers(vertexData);\n } else {\n // updated?\n if (xrMesh.lastChangedTime === this._xrSessionManager.currentTimestamp) {\n const vertexData = this._detectedMeshes.get(xrMesh);\n if (vertexData) {\n this._updateVertexDataWithXRMesh(xrMesh, vertexData, frame);\n this.onMeshUpdatedObservable.notifyObservers(vertexData);\n }\n }\n }\n });\n }\n } catch (error) {\n Logger.Log(error.stack);\n }\n }\n _init() {\n // Only supported by BabylonNative\n if (this._xrSessionManager.isNative) {\n if (this._xrSessionManager.session.trySetMeshDetectorEnabled) {\n this._xrSessionManager.session.trySetMeshDetectorEnabled(true);\n }\n if (!!this._options.preferredDetectorOptions && !!this._xrSessionManager.session.trySetPreferredMeshDetectorOptions) {\n this._xrSessionManager.session.trySetPreferredMeshDetectorOptions(this._options.preferredDetectorOptions);\n }\n }\n }\n _updateVertexDataWithXRMesh(xrMesh, mesh, xrFrame) {\n mesh.xrMesh = xrMesh;\n mesh.worldParentNode = this._options.worldParentNode;\n const positions = xrMesh.vertices || xrMesh.positions;\n if (this._options.convertCoordinateSystems) {\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n mesh.positions = new Float32Array(positions.length);\n for (let i = 0; i < positions.length; i += 3) {\n mesh.positions[i] = positions[i];\n mesh.positions[i + 1] = positions[i + 1];\n mesh.positions[i + 2] = -1 * positions[i + 2];\n }\n if (xrMesh.normals) {\n mesh.normals = new Float32Array(xrMesh.normals.length);\n for (let i = 0; i < xrMesh.normals.length; i += 3) {\n mesh.normals[i] = xrMesh.normals[i];\n mesh.normals[i + 1] = xrMesh.normals[i + 1];\n mesh.normals[i + 2] = -1 * xrMesh.normals[i + 2];\n }\n }\n } else {\n mesh.positions = positions;\n mesh.normals = xrMesh.normals;\n }\n // WebXR should provide indices in a counterclockwise winding order regardless of coordinate system handedness\n mesh.indices = xrMesh.indices;\n // matrix\n const pose = xrFrame.getPose(xrMesh.meshSpace, this._xrSessionManager.referenceSpace);\n if (pose) {\n const mat = mesh.transformationMatrix || new Matrix();\n Matrix.FromArrayToRef(pose.transform.matrix, 0, mat);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n mat.toggleModelMatrixHandInPlace();\n }\n mesh.transformationMatrix = mat;\n if (this._options.worldParentNode) {\n mat.multiplyToRef(this._options.worldParentNode.getWorldMatrix(), mat);\n }\n }\n if (this._options.generateMeshes) {\n var _mesh$transformationM;\n if (!mesh.mesh) {\n const generatedMesh = new Mesh(\"xr mesh \" + mesh.id, this._xrSessionManager.scene);\n generatedMesh.rotationQuaternion = new Quaternion();\n generatedMesh.setVerticesData(VertexBuffer.PositionKind, mesh.positions);\n if (mesh.normals) {\n generatedMesh.setVerticesData(VertexBuffer.NormalKind, mesh.normals);\n } else {\n generatedMesh.createNormals(true);\n }\n generatedMesh.setIndices(mesh.indices, undefined, true);\n mesh.mesh = generatedMesh;\n } else {\n const generatedMesh = mesh.mesh;\n generatedMesh.updateVerticesData(VertexBuffer.PositionKind, mesh.positions);\n if (mesh.normals) {\n generatedMesh.updateVerticesData(VertexBuffer.NormalKind, mesh.normals);\n } else {\n generatedMesh.createNormals(true);\n }\n generatedMesh.updateIndices(mesh.indices);\n }\n (_mesh$transformationM = mesh.transformationMatrix) === null || _mesh$transformationM === void 0 || _mesh$transformationM.decompose(mesh.mesh.scaling, mesh.mesh.rotationQuaternion, mesh.mesh.position);\n }\n }\n return mesh;\n }\n}\n/**\n * The module's name\n */\nWebXRMeshDetector.Name = WebXRFeatureName.MESH_DETECTION;\n/**\n * The (Babylon) version of this module.\n * This is an integer representing the implementation version.\n * This number does not correspond to the WebXR specs version\n */\nWebXRMeshDetector.Version = 1;\nWebXRFeaturesManager.AddWebXRFeature(WebXRMeshDetector.Name, (xrSessionManager, options) => {\n return () => new WebXRMeshDetector(xrSessionManager, options);\n}, WebXRMeshDetector.Version, false);","map":{"version":3,"names":["WebXRFeaturesManager","WebXRFeatureName","WebXRAbstractFeature","Matrix","Quaternion","Observable","Mesh","VertexBuffer","Logger","meshIdProvider","WebXRMeshDetector","constructor","_xrSessionManager","_options","_detectedMeshes","Map","onMeshAddedObservable","onMeshRemovedObservable","onMeshUpdatedObservable","xrNativeFeatureName","generateMeshes","convertCoordinateSystems","session","_init","onXRSessionInit","addOnce","detach","isNative","trySetMeshDetectorEnabled","doNotRemoveMeshesOnSessionEnded","forEach","mesh","notifyObservers","clear","dispose","_onXRFrame","frame","_frame$worldInformati","attached","detectedMeshes","worldInformation","toRemove","Set","vertexData","xrMesh","has","add","get","delete","partialVertexData","id","_updateVertexDataWithXRMesh","set","lastChangedTime","currentTimestamp","error","Log","stack","preferredDetectorOptions","trySetPreferredMeshDetectorOptions","xrFrame","worldParentNode","positions","vertices","scene","useRightHandedSystem","Float32Array","length","i","normals","indices","pose","getPose","meshSpace","referenceSpace","mat","transformationMatrix","FromArrayToRef","transform","matrix","toggleModelMatrixHandInPlace","multiplyToRef","getWorldMatrix","_mesh$transformationM","generatedMesh","rotationQuaternion","setVerticesData","PositionKind","NormalKind","createNormals","setIndices","undefined","updateVerticesData","updateIndices","decompose","scaling","position","Name","MESH_DETECTION","Version","AddWebXRFeature","xrSessionManager","options"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/XR/features/WebXRMeshDetector.js"],"sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Matrix, Quaternion } from \"../../Maths/math.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Mesh } from \"../../Meshes/mesh.js\";\nimport { VertexBuffer } from \"../../Buffers/buffer.js\";\nimport { Logger } from \"../../Misc/logger.js\";\nlet meshIdProvider = 0;\n/**\n * The mesh detector is used to detect meshes in the real world when in AR\n */\nexport class WebXRMeshDetector extends WebXRAbstractFeature {\n constructor(_xrSessionManager, _options = {}) {\n super(_xrSessionManager);\n this._options = _options;\n this._detectedMeshes = new Map();\n /**\n * Observers registered here will be executed when a new mesh was added to the session\n */\n this.onMeshAddedObservable = new Observable();\n /**\n * Observers registered here will be executed when a mesh is no longer detected in the session\n */\n this.onMeshRemovedObservable = new Observable();\n /**\n * Observers registered here will be executed when an existing mesh updates\n */\n this.onMeshUpdatedObservable = new Observable();\n this.xrNativeFeatureName = \"mesh-detection\";\n if (this._options.generateMeshes) {\n this._options.convertCoordinateSystems = true;\n }\n if (this._xrSessionManager.session) {\n this._init();\n }\n else {\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\n this._init();\n });\n }\n }\n detach() {\n if (!super.detach()) {\n return false;\n }\n // Only supported by BabylonNative\n if (!!this._xrSessionManager.isNative && !!this._xrSessionManager.session.trySetMeshDetectorEnabled) {\n this._xrSessionManager.session.trySetMeshDetectorEnabled(false);\n }\n if (!this._options.doNotRemoveMeshesOnSessionEnded) {\n this._detectedMeshes.forEach((mesh) => {\n this.onMeshRemovedObservable.notifyObservers(mesh);\n });\n this._detectedMeshes.clear();\n }\n return true;\n }\n dispose() {\n super.dispose();\n this.onMeshAddedObservable.clear();\n this.onMeshRemovedObservable.clear();\n this.onMeshUpdatedObservable.clear();\n }\n _onXRFrame(frame) {\n // TODO remove try catch\n try {\n if (!this.attached || !frame) {\n return;\n }\n // babylon native XR and webxr support\n const detectedMeshes = frame.detectedMeshes || frame.worldInformation?.detectedMeshes;\n if (detectedMeshes) {\n const toRemove = new Set();\n this._detectedMeshes.forEach((vertexData, xrMesh) => {\n if (!detectedMeshes.has(xrMesh)) {\n toRemove.add(xrMesh);\n }\n });\n toRemove.forEach((xrMesh) => {\n const vertexData = this._detectedMeshes.get(xrMesh);\n if (vertexData) {\n this.onMeshRemovedObservable.notifyObservers(vertexData);\n this._detectedMeshes.delete(xrMesh);\n }\n });\n // now check for new ones\n detectedMeshes.forEach((xrMesh) => {\n if (!this._detectedMeshes.has(xrMesh)) {\n const partialVertexData = {\n id: meshIdProvider++,\n xrMesh: xrMesh,\n };\n const vertexData = this._updateVertexDataWithXRMesh(xrMesh, partialVertexData, frame);\n this._detectedMeshes.set(xrMesh, vertexData);\n this.onMeshAddedObservable.notifyObservers(vertexData);\n }\n else {\n // updated?\n if (xrMesh.lastChangedTime === this._xrSessionManager.currentTimestamp) {\n const vertexData = this._detectedMeshes.get(xrMesh);\n if (vertexData) {\n this._updateVertexDataWithXRMesh(xrMesh, vertexData, frame);\n this.onMeshUpdatedObservable.notifyObservers(vertexData);\n }\n }\n }\n });\n }\n }\n catch (error) {\n Logger.Log(error.stack);\n }\n }\n _init() {\n // Only supported by BabylonNative\n if (this._xrSessionManager.isNative) {\n if (this._xrSessionManager.session.trySetMeshDetectorEnabled) {\n this._xrSessionManager.session.trySetMeshDetectorEnabled(true);\n }\n if (!!this._options.preferredDetectorOptions && !!this._xrSessionManager.session.trySetPreferredMeshDetectorOptions) {\n this._xrSessionManager.session.trySetPreferredMeshDetectorOptions(this._options.preferredDetectorOptions);\n }\n }\n }\n _updateVertexDataWithXRMesh(xrMesh, mesh, xrFrame) {\n mesh.xrMesh = xrMesh;\n mesh.worldParentNode = this._options.worldParentNode;\n const positions = xrMesh.vertices || xrMesh.positions;\n if (this._options.convertCoordinateSystems) {\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n mesh.positions = new Float32Array(positions.length);\n for (let i = 0; i < positions.length; i += 3) {\n mesh.positions[i] = positions[i];\n mesh.positions[i + 1] = positions[i + 1];\n mesh.positions[i + 2] = -1 * positions[i + 2];\n }\n if (xrMesh.normals) {\n mesh.normals = new Float32Array(xrMesh.normals.length);\n for (let i = 0; i < xrMesh.normals.length; i += 3) {\n mesh.normals[i] = xrMesh.normals[i];\n mesh.normals[i + 1] = xrMesh.normals[i + 1];\n mesh.normals[i + 2] = -1 * xrMesh.normals[i + 2];\n }\n }\n }\n else {\n mesh.positions = positions;\n mesh.normals = xrMesh.normals;\n }\n // WebXR should provide indices in a counterclockwise winding order regardless of coordinate system handedness\n mesh.indices = xrMesh.indices;\n // matrix\n const pose = xrFrame.getPose(xrMesh.meshSpace, this._xrSessionManager.referenceSpace);\n if (pose) {\n const mat = mesh.transformationMatrix || new Matrix();\n Matrix.FromArrayToRef(pose.transform.matrix, 0, mat);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n mat.toggleModelMatrixHandInPlace();\n }\n mesh.transformationMatrix = mat;\n if (this._options.worldParentNode) {\n mat.multiplyToRef(this._options.worldParentNode.getWorldMatrix(), mat);\n }\n }\n if (this._options.generateMeshes) {\n if (!mesh.mesh) {\n const generatedMesh = new Mesh(\"xr mesh \" + mesh.id, this._xrSessionManager.scene);\n generatedMesh.rotationQuaternion = new Quaternion();\n generatedMesh.setVerticesData(VertexBuffer.PositionKind, mesh.positions);\n if (mesh.normals) {\n generatedMesh.setVerticesData(VertexBuffer.NormalKind, mesh.normals);\n }\n else {\n generatedMesh.createNormals(true);\n }\n generatedMesh.setIndices(mesh.indices, undefined, true);\n mesh.mesh = generatedMesh;\n }\n else {\n const generatedMesh = mesh.mesh;\n generatedMesh.updateVerticesData(VertexBuffer.PositionKind, mesh.positions);\n if (mesh.normals) {\n generatedMesh.updateVerticesData(VertexBuffer.NormalKind, mesh.normals);\n }\n else {\n generatedMesh.createNormals(true);\n }\n generatedMesh.updateIndices(mesh.indices);\n }\n mesh.transformationMatrix?.decompose(mesh.mesh.scaling, mesh.mesh.rotationQuaternion, mesh.mesh.position);\n }\n }\n return mesh;\n }\n}\n/**\n * The module's name\n */\nWebXRMeshDetector.Name = WebXRFeatureName.MESH_DETECTION;\n/**\n * The (Babylon) version of this module.\n * This is an integer representing the implementation version.\n * This number does not correspond to the WebXR specs version\n */\nWebXRMeshDetector.Version = 1;\nWebXRFeaturesManager.AddWebXRFeature(WebXRMeshDetector.Name, (xrSessionManager, options) => {\n return () => new WebXRMeshDetector(xrSessionManager, options);\n}, WebXRMeshDetector.Version, false);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}