Compare commits

...

4 Commits

5 changed files with 178 additions and 36 deletions

View File

@ -59,12 +59,17 @@ export default class DrawAttackArrow extends Draw {
return return
} }
into = '3D' 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) { if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this) let polyline_id = DrawAttackArrow.create_arrow_polygon(this)
this.points_ids.push(polyline_id) this.points_ids.push(polyline_id)
} }
this.points_ids.push(this.create_point(cartesian)) this.points_ids.push(this.create_point(cartesian))
cache_positions.push(this.cartesian3Towgs84(cartesian, this.viewer)) cache_positions.push(pos84)
isMove = false isMove = false
}) })
this.event.mouse_right((movement, cartesian) => { this.event.mouse_right((movement, cartesian) => {

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) {

View File

@ -100,14 +100,14 @@ function MouseRightMenu(sdk, status, callBack) {
that = sdk.entityMap.get(entityId) that = sdk.entityMap.get(entityId)
} }
// if (that && that.picking) { if (that && that.picking) {
// addedMenu = ` addedMenu = `
// <span class="divider" style="display: block;border-top: 1px solid #ddd;margin: 5px;"></span> <span class="divider" style="display: block;border-top: 1px solid #ddd;margin: 5px;"></span>
// <ul class="added" style="list-style: none;padding: 0;margin: 0;font-size: 12px;"> <ul class="added" style="list-style: none;padding: 0;margin: 0;font-size: 12px;">
// <li style="padding: 3px 10px;cursor: pointer;">属性</li> <li style="padding: 3px 10px;cursor: pointer;">属性</li>
// </ul> </ul>
// ` `
// } }
let position = tools.cartesian3Towgs84(cartesian, sdk.viewer) let position = tools.cartesian3Towgs84(cartesian, sdk.viewer)
menuElm = document.createElement('div') menuElm = document.createElement('div')
menuElm.id = 'custom-menu' menuElm.id = 'custom-menu'

View File

@ -433,11 +433,11 @@ class BillboardObject extends Base {
value: '链接', value: '链接',
key: 'link' key: 'link'
}, },
// { {
// name: 'IP摄像头', name: 'IP摄像头',
// value: 'IP摄像头', value: 'IP摄像头',
// key: 'camera' key: 'camera'
// }, },
// { // {
// name: 'ISC摄像头', // name: 'ISC摄像头',
// value: 'ISC摄像头', // value: 'ISC摄像头',
@ -448,16 +448,16 @@ class BillboardObject extends Base {
// value: '传感器', // value: '传感器',
// key: 'sensor' // key: 'sensor'
// }, // },
// { {
// name: '全景图', name: '全景图',
// value: '全景图', value: '全景图',
// key: 'vr' key: 'vr'
// }, },
// { {
// name: '物资', name: '物资',
// value: '物资', value: '物资',
// key: 'goods' key: 'goods'
// } }
] ]
} }

View File

@ -1279,6 +1279,9 @@ class GroundSvg extends Base {
// 中心点到鼠标的距离 // 中心点到鼠标的距离
let distance = turf.rhumbDistance(pointC, point2, options); let distance = turf.rhumbDistance(pointC, point2, options);
let flag = false
let flag2 = false
switch (this.pickPoint.id) { switch (this.pickPoint.id) {
case 'svg-control-points_0': case 'svg-control-points_0':
angle = bearing2_0 - bearing1 angle = bearing2_0 - bearing1
@ -1290,12 +1293,39 @@ class GroundSvg extends Base {
bearingH = (((turf.rhumbBearing(pointC, turf.point(controlPoints[2])) + 360) - this.angle) % 360) bearingH = (((turf.rhumbBearing(pointC, turf.point(controlPoints[2])) + 360) - this.angle) % 360)
angleW = bearing2 - bearingW angleW = bearing2 - bearingW
angleH = bearing2 - bearingH angleH = bearing2 - bearingH
if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) { if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) {
angleW = angleW + 180 angleW = angleW + 180
flag=true
} }
if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) { if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) {
angleH = angleH + 180 angleH = angleH + 180
flag2=true
}
if(flag && flag2) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#ff0000')
}
else {
if(flag) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
else if(flag2) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
else {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
} }
radiansW = (Math.PI / 180) * angleW radiansW = (Math.PI / 180) * angleW
@ -1314,6 +1344,12 @@ class GroundSvg extends Base {
if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) { if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) {
angleH = angleH + 180 angleH = angleH + 180
this.pointEntityCollection.values[2].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[8].point.color = Cesium.Color.fromCssColorString('#ff0000')
}
else {
this.pointEntityCollection.values[2].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[8].point.color = Cesium.Color.fromCssColorString('#00ff0a')
} }
radiansH = (Math.PI / 180) * angleH radiansH = (Math.PI / 180) * angleH
@ -1331,9 +1367,37 @@ class GroundSvg extends Base {
if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) { if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) {
angleW = angleW + 180 angleW = angleW + 180
flag=true
} }
if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) { if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) {
angleH = angleH + 180 angleH = angleH + 180
flag2=true
}
if(flag && flag2) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
else {
if(flag) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
else if(flag2) {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#ff0000')
}
else {
this.pointEntityCollection.values[1].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[3].point.color = Cesium.Color.fromCssColorString('#ff0000')
this.pointEntityCollection.values[7].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[9].point.color = Cesium.Color.fromCssColorString('#00ff0a')
}
} }
radiansW = (Math.PI / 180) * angleW radiansW = (Math.PI / 180) * angleW
@ -1351,6 +1415,12 @@ class GroundSvg extends Base {
if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) { if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) {
angleW = angleW + 180 angleW = angleW + 180
this.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#ff0000')
}
else {
this.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#ff0000')
} }
radiansW = (Math.PI / 180) * angleW radiansW = (Math.PI / 180) * angleW
@ -1381,6 +1451,12 @@ class GroundSvg extends Base {
if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) { if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) {
angleW = angleW + 180 angleW = angleW + 180
this.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#ff0000')
}
else {
this.pointEntityCollection.values[4].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[6].point.color = Cesium.Color.fromCssColorString('#ff0000')
} }
radiansW = (Math.PI / 180) * angleW radiansW = (Math.PI / 180) * angleW