解决二三维模式下MouseCoordinate功能异常的问题
This commit is contained in:
@ -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) {
|
||||||
|
Reference in New Issue
Block a user