diff --git a/src/Draw/drawAttackArrow.js b/src/Draw/drawAttackArrow.js
index 0cd20a4..c9208e2 100644
--- a/src/Draw/drawAttackArrow.js
+++ b/src/Draw/drawAttackArrow.js
@@ -59,12 +59,17 @@ export default class DrawAttackArrow extends Draw {
return
}
into = '3D'
+ let pos84 = this.cartesian3Towgs84(cartesian, this.viewer)
+ let lastPos84 = cache_positions[cache_positions.length - 1]
+ if(lastPos84 && (lastPos84.lng === pos84.lng && lastPos84.lat === pos84.lat)) {
+ return
+ }
if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this)
this.points_ids.push(polyline_id)
}
this.points_ids.push(this.create_point(cartesian))
- cache_positions.push(this.cartesian3Towgs84(cartesian, this.viewer))
+ cache_positions.push(pos84)
isMove = false
})
this.event.mouse_right((movement, cartesian) => {
diff --git a/src/Global/MapX/index.js b/src/Global/MapX/index.js
index a96b34f..d16f0cd 100644
--- a/src/Global/MapX/index.js
+++ b/src/Global/MapX/index.js
@@ -124,7 +124,7 @@ function syncViewer() {
if (height > 9000000) {
height = 9000000
}
- if (height < 100000) {
+ if (height < 400000) {
this.entity.billboard.show = true
this.entity.rectangle.show = false
}
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) {
diff --git a/src/Global/MultiViewportMode/index.js b/src/Global/MultiViewportMode/index.js
index 5d3c600..53ec9c0 100644
--- a/src/Global/MultiViewportMode/index.js
+++ b/src/Global/MultiViewportMode/index.js
@@ -50,6 +50,11 @@ async function init(sdk) {
for (let i = 0; i < imageryLayers.length; i++) {
let entity = sdk2D.viewer.imageryLayers.addImageryProvider(imageryLayers[i].imageryProvider, imageryLayers[i]._layerIndex)
entity.show = imageryLayers[i].show
+ if (imageryLayers[i]._objectState) {
+ if (imageryLayers[i]._showView == 3) {
+ entity.show = false
+ }
+ }
}
// sdk.viewer.entities.collectionChanged.addEventListener(syncEntities)
// sdk.viewer.dataSources.dataSourceAdded.addEventListener(syncDataSources)
@@ -61,6 +66,12 @@ async function init(sdk) {
JwwStatusSwitch(sdk2, true)
}
+ sdk.entityMap.forEach((item, key) => {
+ if (item.showView == 2) {
+ item.showView = 2
+ }
+ })
+
}
async function on(sdk) {
if (sdk2D) {
@@ -95,9 +106,10 @@ function off(sdk) {
syncObject = {}
}
sdk.entityMap.forEach((item, key) => {
- item.showView = undefined
+ if (item.showView) {
+ item.show = item.show
+ }
})
-
}
async function syncData2(sdk, id, entityId) {
@@ -123,10 +135,10 @@ async function syncData2(sdk, id, entityId) {
options.heightMode = 0
options.height = 0
}
-
+
if (!that.type || (that.type !== 'tileset' && that.type !== 'bim' && that.type !== 'glb' && that.type !== 'layer')) {
- if(that.showView==3) {
- options.show=false
+ if (that.showView == 3) {
+ options.show = false
}
let newObject = await new that.constructor(sdk2D, options)
newObject.onClick = that.onClick
@@ -216,7 +228,14 @@ async function syncData2(sdk, id, entityId) {
}
let options = syncObject.tools.deepCopyObj(obj.options)
if (!obj.type || (obj.type !== 'tileset' && obj.type !== 'bim' && obj.type !== 'glb' && obj.type !== 'layer')) {
- let target = await new obj.constructor(sdk2D, options)
+ if (obj.showView == 3) {
+ options.show = false
+ }
+ let target = await sdk2D.entityMap.get(options.id)
+ if(target) {
+ await target.remove()
+ }
+ target = await new obj.constructor(sdk2D, options)
target.onClick = obj.onClick
target.onRightClick = obj.onRightClick
target.onMouseMove = obj.onMouseMove
@@ -409,11 +428,25 @@ function syncImageryLayerRemoved(layer, index) {
sdk2D.viewer.imageryLayers.remove(layer2d)
}
function syncImageryLayerShownOrHidden(layer, index, state) {
+ return
let layer2d = sdk2D.viewer.imageryLayers._layers[index]
+ let layer3d = sdk3D.viewer.imageryLayers._layers[index]
+ console.log('layer2d', layer2d, sdk2D, layer3d)
+
if (!layer2d) {
return
}
- layer2d.show = state
+ if (layer3d._objectState) {
+ if (!layer3d._showView || layer3d._showView == 2) {
+ layer2d.show = true
+ }
+ if (layer3d._showView == 3) {
+ layer2d.show = false
+ }
+ }
+ else {
+ layer2d.show = state
+ }
}
async function syncPrimitives(primitive) {
@@ -543,6 +576,7 @@ function syncViewer() {
}
+
function get2DView() {
return sdk2D
}
diff --git a/src/Global/mouseRightMenu/index.js b/src/Global/mouseRightMenu/index.js
index 0fd350e..8b9a223 100644
--- a/src/Global/mouseRightMenu/index.js
+++ b/src/Global/mouseRightMenu/index.js
@@ -121,6 +121,9 @@ function MouseRightMenu(sdk, status, callBack) {
文字内容
-
+