解决二三维模式下MouseCoordinate功能异常的问题

This commit is contained in:
zh
2025-08-15 16:18:27 +08:00
parent 08bdd515a9
commit 7be9a6a41d

View File

@ -4,18 +4,38 @@
import Tools from "../../Tools"; import Tools from "../../Tools";
import { getCoordinateSystem } from "../../Global/global"; import { getCoordinateSystem } from "../../Global/global";
import MouseEvent from '../../Event/index' import MouseEvent from '../../Event/index'
import { getSdk as get2DSdk } from '../../Global/MultiViewportMode'
import { getSdk as getSplitScreenSdk } from "../../Global/SplitScreen";
let event let event
let event2
let MouseCoordinateElm let MouseCoordinateElm
let requestAnimationFrameEventId let requestAnimationFrameEventId
let tmovement
let targetSdk
let sdkD
const MouseCoordinate = (sdk, status) => { const MouseCoordinate = (sdk, status) => {
if (!sdk || !sdk.viewer) {
return
}
targetSdk = sdk
sdkD = get2DSdk().sdkD
if(!sdkD) {
sdkD = getSplitScreenSdk().sdkD
}
let tools = new Tools(sdk) let tools = new Tools(sdk)
if (status) { if (status) {
if (event) { if (event) {
event.destroy() event.destroy()
} }
if (event2) {
event2.destroy()
event2 = undefined
}
event = new MouseEvent(sdk) event = new MouseEvent(sdk)
tmovement = null
let position = { let position = {
x: '', x: '',
y: '', y: '',
@ -40,22 +60,60 @@ const MouseCoordinate = (sdk, status) => {
contentElm.style['background-size'] = `200% 200%`; contentElm.style['background-size'] = `200% 200%`;
MouseCoordinateElm = contentElm MouseCoordinateElm = contentElm
} }
sdk.viewer._element.appendChild(contentElm) sdk.viewer.container.appendChild(contentElm)
let tmovement
event.mouse_move((movement, cartesian) => { event.mouse_move((movement, cartesian) => {
tmovement = { ...movement } targetSdk = sdk
tmovement = { ...movement.endPosition }
}) })
const getPosition = () => { const getPosition = () => {
if(!tmovement) { if (!targetSdk) {
return return
} }
let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0] let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0]
let left = tmovement.endPosition.x; sdkD = get2DSdk().sdkD
let top = tmovement.endPosition.y; if(!sdkD) {
let cartesian = event.getcartesian(tmovement) sdkD = getSplitScreenSdk().sdkD
contentElm.style['background-position-x'] = `${-canvas.width + left + 4}px`; }
contentElm.style['background-position-y'] = `${-canvas.height + top - 2}px`; 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 // this.entity.position = cartesian
if (cartesian) { if (cartesian) {
let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer) let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer)
@ -97,10 +155,13 @@ const MouseCoordinate = (sdk, status) => {
else { else {
if (event) { if (event) {
event.destroy() event.destroy()
event = undefined }
if (event2) {
event2.destroy()
event2 = undefined
} }
if (MouseCoordinateElm) { if (MouseCoordinateElm) {
sdk.viewer._element.removeChild(MouseCoordinateElm) sdk.viewer.container.removeChild(MouseCoordinateElm)
MouseCoordinateElm = undefined MouseCoordinateElm = undefined
} }
if (requestAnimationFrameEventId) { if (requestAnimationFrameEventId) {