From 7be9a6a41da6058d042c48f6c39fe7dc50c86169 Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Fri, 15 Aug 2025 16:18:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=8C=E4=B8=89=E7=BB=B4?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8BMouseCoordinate=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Global/MouseCoordinate/index.js | 83 +++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 11 deletions(-) diff --git a/src/Global/MouseCoordinate/index.js b/src/Global/MouseCoordinate/index.js index 0189c67..147f96a 100644 --- a/src/Global/MouseCoordinate/index.js +++ b/src/Global/MouseCoordinate/index.js @@ -4,18 +4,38 @@ import Tools from "../../Tools"; import { getCoordinateSystem } from "../../Global/global"; import MouseEvent from '../../Event/index' +import { getSdk as get2DSdk } from '../../Global/MultiViewportMode' +import { getSdk as getSplitScreenSdk } from "../../Global/SplitScreen"; let event +let event2 let MouseCoordinateElm let requestAnimationFrameEventId +let tmovement +let targetSdk +let sdkD const MouseCoordinate = (sdk, status) => { + if (!sdk || !sdk.viewer) { + return + } + targetSdk = sdk + sdkD = get2DSdk().sdkD + if(!sdkD) { + sdkD = getSplitScreenSdk().sdkD + } + let tools = new Tools(sdk) if (status) { if (event) { event.destroy() } + if (event2) { + event2.destroy() + event2 = undefined + } event = new MouseEvent(sdk) + tmovement = null let position = { x: '', y: '', @@ -40,22 +60,60 @@ const MouseCoordinate = (sdk, status) => { contentElm.style['background-size'] = `200% 200%`; MouseCoordinateElm = contentElm } - sdk.viewer._element.appendChild(contentElm) - let tmovement + sdk.viewer.container.appendChild(contentElm) + event.mouse_move((movement, cartesian) => { - tmovement = { ...movement } + targetSdk = sdk + tmovement = { ...movement.endPosition } }) const getPosition = () => { - if(!tmovement) { + if (!targetSdk) { return } let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0] - let left = tmovement.endPosition.x; - let top = tmovement.endPosition.y; - let cartesian = event.getcartesian(tmovement) - contentElm.style['background-position-x'] = `${-canvas.width + left + 4}px`; - contentElm.style['background-position-y'] = `${-canvas.height + top - 2}px`; + sdkD = get2DSdk().sdkD + if(!sdkD) { + sdkD = getSplitScreenSdk().sdkD + } + if (!event2 && sdkD) { + event2 = new MouseEvent(sdkD) + event2.mouse_move((movement, cartesian) => { + targetSdk = sdkD + tmovement = { x: movement.endPosition.x, y: movement.endPosition.y } + }) + } + if (!tmovement) { + return + } + let left = tmovement.x; + let top = tmovement.y; + let cartesian + if (targetSdk.viewer.scene.mode === 2) { + left = left + canvas.width + cartesian = targetSdk.viewer.camera.pickEllipsoid(tmovement, targetSdk.viewer.scene.globe.ellipsoid) + } + else { + cartesian = targetSdk.viewer.scene.pickPosition(tmovement) + if (!cartesian) { + const ray = targetSdk.viewer.camera.getPickRay(position); //相交的射线 + let pickedObjects = targetSdk.viewer.scene.drillPickFromRay(ray, 10); + let result = {} + for (let i = 0; i < pickedObjects.length; i++) { + if (pickedObjects[i].position) { + result = pickedObjects[i] + break + } + } + cartesian = result.position + if (!cartesian) { + cartesian = targetSdk.viewer.scene.globe.pick(ray, targetSdk.viewer.scene); + } + } + } + contentElm.style['background-position-x'] = `${-sdk.viewer.container.clientWidth + left + 4}px`; + + contentElm.style['background-position-y'] = `${-sdk.viewer.container.clientHeight + top - 2}px`; // this.entity.position = cartesian if (cartesian) { let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer) @@ -97,10 +155,13 @@ const MouseCoordinate = (sdk, status) => { else { if (event) { event.destroy() - event = undefined + } + if (event2) { + event2.destroy() + event2 = undefined } if (MouseCoordinateElm) { - sdk.viewer._element.removeChild(MouseCoordinateElm) + sdk.viewer.container.removeChild(MouseCoordinateElm) MouseCoordinateElm = undefined } if (requestAnimationFrameEventId) {