From 1a394336ff74051bc29e086b7e12f797d9c4ffb6 Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Fri, 22 Aug 2025 23:53:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MultiViewportMode/ClickCallback/index.js | 578 ++++++++++++++++++ src/Global/MultiViewportMode/index.js | 13 + src/Global/mouseRightMenu/index.js | 3 - src/In/index.js | 4 +- src/Obj/Base/AssembleObject/index.js | 2 +- src/Obj/Base/AttackArrowObject/index.js | 2 +- .../Base/BaseSource/BaseModel/Model/index.js | 2 +- .../Base/BaseSource/BaseModel/Model2/index.js | 2 +- src/Obj/Base/CircleObject/index.js | 2 +- src/Obj/Base/CurvelineObject/index.js | 2 +- src/Obj/Base/EllipseObject/index.js | 2 +- src/Obj/Base/GroundSvg/index.js | 73 ++- src/Obj/Base/PincerArrowObject/index.js | 2 +- src/Obj/Base/PolygonObject/index.js | 2 +- src/Obj/Base/PolyhedronObject/index.js | 2 +- src/Obj/Base/PolylineObject/index.js | 2 +- src/Obj/Base/RadarScanStereoscopic/index.js | 2 +- src/Obj/Base/SectorObject/index.js | 2 +- src/Obj/Base/StraightArrowObject/index.js | 2 +- src/Obj/Base/WallRealStereoscopic/index.js | 2 +- src/Obj/Base/WallStereoscopic/index.js | 2 +- src/Obj/Base/index.js | 24 +- src/YJEarth/index.js | 6 +- 23 files changed, 690 insertions(+), 43 deletions(-) create mode 100644 src/Global/MultiViewportMode/ClickCallback/index.js diff --git a/src/Global/MultiViewportMode/ClickCallback/index.js b/src/Global/MultiViewportMode/ClickCallback/index.js new file mode 100644 index 0000000..cc940af --- /dev/null +++ b/src/Global/MultiViewportMode/ClickCallback/index.js @@ -0,0 +1,578 @@ +/** + * @name: click + * @author: Administrator + * @date: 2023-05-28 11:05 + * @description:click + * @update: 2023-05-28 11:05 + */ +let leftClickHandler = null +let rightClickHandler = null +let MoveHandler = null +let leftClickCallbackMap = new Map() +let rightClickCallbackMap = new Map() +let MoveCallbackMap = new Map() +let selectedFeature; + + +function cartesian3Towgs84(cartesian, viewer) { + var ellipsoid = viewer.scene.globe.ellipsoid + var cartesian3 = new Cesium.Cartesian3( + cartesian.x, + cartesian.y, + cartesian.z + ) + var cartographic = ellipsoid.cartesianToCartographic(cartesian3) + var lat = Cesium.Math.toDegrees(cartographic.latitude) + var lng = Cesium.Math.toDegrees(cartographic.longitude) + var alt = cartographic.height < 0 ? 0 : cartographic.height + return { + lng: lng, + lat: lat, + alt: alt, + } +} + +function getcartesian(sdk, movement) { + if (movement.endPosition) { + movement.endPosition.y -= 2 + } + let position = movement.position || movement.endPosition + // 获取世界坐标系地表坐标,考虑地形,不包括模型,倾斜摄影模型表面; + let cartesian = sdk.viewer.scene.pickPosition(position) + if (!cartesian) { + const ray = sdk.viewer.camera.getPickRay(position); //相交的射线 + cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene); + } + return cartesian +} + +function openLeftClick(sdk, cb) { + if (!sdk || !sdk.viewer) { + return + } + let click = true + leftClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas) + leftClickHandler.setInputAction((movement) => { + let cartesian = sdk.viewer.scene.pickPosition(movement.position) + if (!cartesian) { + const ray = sdk.viewer.camera.getPickRay(movement.position); //相交的射线 + cartesian = sdk.viewer.scene.globe.pick(ray, sdk.viewer.scene); + } + if (!cartesian) { + return + } + + let pos84 = cartesian3Towgs84(cartesian, sdk.viewer) + + cb && cb(pos84) + + if (click) { + click = false + setTimeout(() => { + click = true + }, 600); + if (!YJ.Measure.GetMeasureStatus() && cartesian) { + let flag = false + for (let i = leftClickCallbackMap.size - 1; i >= 0; i--) { + let key = Array.from(leftClickCallbackMap.keys())[i] + let obj = leftClickCallbackMap.get(key) + if (obj) { + + if (obj.that) { + // 是否为多边形 + if (obj.that.type === 'PolygonObject') { + // 是否可点击y + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < obj.that.options.positions.length; i++) { + polyPos.push([ + obj.that.options.positions[i].lng, + obj.that.options.positions[i].lat + ]) + } + polyPos.push([ + obj.that.options.positions[0].lng, + obj.that.options.positions[0].lat + ]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + } + } + // 聚集地 + else if (obj.that.type === 'AssembleObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let positions = obj.that.computeAssemble(obj.that.options.positions, true) + let pt = turf.point([pos84.lng, pos84.lat]); + let polyPos = [] + for (let i = 0; i < positions.length; i += 2) { + polyPos.push([ + positions[i], + positions[i + 1] + ]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + } + } + // 单箭头 + else if (obj.that.type === 'AttackArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 3) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computeAttackArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + } + } + // 双箭头 + else if (obj.that.type === 'PincerArrowObject') { + if (obj.that.picking) { + if (obj.that.options.positions && obj.that.options.positions.length >= 5) { + let pt = turf.point([pos84.lng, pos84.lat]); + let positions = obj.that.computePincerArrow(obj.that.options.positions) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + let pos84 = cartesian3Towgs84(positions[m], sdk.viewer) + polyPos.push([pos84.lng, pos84.lat]) + } + let pos84_0 = cartesian3Towgs84(positions[0], sdk.viewer) + polyPos.push([pos84_0.lng, pos84_0.lat]) + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + } + } + // 圆 + else if (obj.that.type === 'CircleObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius) { + let center = [obj.that.options.center.lng, obj.that.options.center.lat]; + let radius = obj.that.options.radius / 1000; + let options = { steps: 360, units: 'kilometers' }; + let circle = turf.circle(center, radius, options); + let contain = turf.booleanPointInPolygon(pt, circle); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + + } + } + // 扇形 + else if (obj.that.type === 'SectorObject') { + if (obj.that.picking) { + let pt = turf.point([pos84.lng, pos84.lat]); + if (obj.that.options.center && obj.that.options.radius && obj.that.options.startAngle && obj.that.options.endAngle) { + let positions = obj.that.calSector(obj.that.options.center, obj.that.options.radius, obj.that.options.startAngle, obj.that.options.endAngle, undefined, true) + let polyPos = [] + for (let m = 0; m < positions.length; m++) { + polyPos.push([positions[m].lng, positions[m].lat]) + } + let poly = turf.polygon([polyPos]); + let contain = turf.booleanPointInPolygon(pt, poly); + if (contain) { + obj.callback( + movement, + obj.that.options.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + flag = true + break + } + } + + } + } + } + } + } + if (!flag) { + const pick = sdk.viewer.scene.pick(movement.position) + if (pick) { + if (pick.id) { + let entityId + // 矢量 + if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { + let obj = leftClickCallbackMap.get(pick.id.parentId) + if (obj.that.picking && obj.that.geojson) { + for (let i = 0; i < obj.that.geojson.features.length; i++) { + if (obj.that.geojson.features[i].id === pick.id._id) { + obj.callback( + movement, + obj.that.geojson.features[i].id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + else if (typeof pick.id.id == 'string') { + let array = pick.id.id.split('-') + array.splice(array.length - 1, 1) + entityId = array.join('-') + } + + if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) { + let obj = leftClickCallbackMap.get(pick.id.properties.id._value) + if (obj.that.picking) { + obj.callback( + movement, + pick.id.properties.id._value, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else if (leftClickCallbackMap.has(pick.id.id)) { + let obj = leftClickCallbackMap.get(pick.id.id) + if (obj.that.picking) { + obj.callback( + movement, + pick.id.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else if (entityId && leftClickCallbackMap.has(entityId)) { + let obj = leftClickCallbackMap.get(entityId) + if (obj.that.picking) { + obj.callback( + movement, + entityId, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else if (pick.primitive) { + if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) { + let obj = leftClickCallbackMap.get(pick.id) + obj.callback( + movement, + pick.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + else { + if (pick.primitive && pick.primitive.id) { + if (leftClickCallbackMap.has(pick.primitive.id)) { + let obj = leftClickCallbackMap.get(pick.primitive.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.primitive, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.primitive.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } + if (pick.content && (!pick.primitive || !pick.primitive.id)) { + if (leftClickCallbackMap.has(pick.content.tileset.id)) { + let obj = leftClickCallbackMap.get(pick.content.tileset.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + obj.callback( + movement, + pick.content.tileset, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + else { + obj.callback( + movement, + pick.content.tileset.id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + } + } + } + } + + + // if (click) { + // click = false + // setTimeout(() => { + // click = true + // }, 300); + // if (!YJ.Measure.GetMeasureStatus()) { + + // } + // } + }, Cesium.ScreenSpaceEventType.LEFT_CLICK) + + // leftClickHandler.setInputAction(function (movement) { + // const feature = sdk.viewer.scene.pick(movement.endPosition); + // // unselectFeature(selectedFeature); + // if (selectedFeature) { + // selectedFeature.color = Cesium.Color.WHITE; + // } + // selectedFeature = feature + // if (feature) { + // feature.color = Cesium.Color.YELLOW; + // } + // }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + // } + +} + +function closeLeftClick(sdk) { + leftClickHandler.destroy() //关闭事件句柄 + leftClickHandler = null + // } +} + +function openRightClick(sdk) { + if (!sdk || !sdk.viewer) { + return + } + rightClickHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas) + rightClickHandler.setInputAction((movement) => { + if (!YJ.Measure.GetMeasureStatus()) { + const pick = sdk.viewer.scene.pick(movement.position) + if (pick && pick.id) { + let id + if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) { + let obj = rightClickCallbackMap.get(pick.id.parentId) + if (obj.that.picking && obj.that.geojson) { + for (let i = 0; i < obj.that.geojson.features.length; i++) { + if (obj.that.geojson.features[i].id === pick.id._id) { + obj.callback( + movement, + obj.that.geojson.features[i].id, + cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that) + } + } + } + } + else { + if (typeof pick.id === 'string') { + id = pick.id + } + else { + id = pick.id.id + } + if (rightClickCallbackMap.has(id)) { + let obj = rightClickCallbackMap.get(id) + if (obj.that.picking) { + let cartesian = getcartesian(sdk, movement) + if (!cartesian) { + return + } + obj.callback( + movement, + id, + cartesian3Towgs84(cartesian, sdk.viewer), obj.that) + } + } + } + } + if (pick && pick.content) { + if (rightClickCallbackMap.has(pick.content.tileset.id)) { + let obj = rightClickCallbackMap.get(pick.content.tileset.id) + if (obj.that.picking) { + if (obj.that.type === 'bim') { + if (YJ.Global.getBimPickStatus(sdk)) { + let cartesian = getcartesian(sdk, movement) + if (!cartesian) { + return + } + obj.callback( + movement, + pick.getProperty('id'), + cartesian3Towgs84(cartesian, sdk.viewer), obj.that) + } + } + else { + let cartesian = getcartesian(sdk, movement) + if (!cartesian) { + return + } + obj.callback( + movement, + pick.content.tileset.id, + cartesian3Towgs84(cartesian, sdk.viewer), obj.that) + } + } + } + } + } + }, Cesium.ScreenSpaceEventType.RIGHT_CLICK) +} + +function closeRightClick() { + if (rightClickHandler) { + rightClickHandler.destroy() //关闭事件句柄 + rightClickHandler = null + } +} + +function openMove(sdk) { + MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas) + MoveHandler.setInputAction(function (movement) { + const pick = sdk.viewer.scene.pick(movement.endPosition); + // unselectFeature(selectedFeature); + // if (selectedFeature) { + // let color = '#fff' + // let state = selectedFeature.getProperty('state') + // switch (state) { + // case '0': + // color = '#fff' + // break; + // case '1': + // color = '#f00' + // break; + // case '2': + // color = '#0f0' + // break; + // case '3': + // color = '#00f' + // break; + // default: + // } + // selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency) + // } + // if (pick && pick.id) { } + // if (pick && pick.content) { + // if (MoveCallbackMap.has(pick.content.tileset.id)) { + // let obj = MoveCallbackMap.get(pick.content.tileset.id) + // if (obj.that.picking) { + // if (obj.that.type === 'bim') { + // if (YJ.Global.getBimPickStatus(sdk)) { + // selectedFeature = pick + // pick.color = Cesium.Color.YELLOW; + // } + // else { + // selectedFeature = null + // } + // } + // else { + // selectedFeature = pick + // pick.color = Cesium.Color.YELLOW; + // } + // } + // else { + // selectedFeature = null + // } + // } + // } + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); +} + +function closeMove() { + if (MoveHandler) { + MoveHandler.destroy() //关闭事件句柄 + MoveHandler = null + } +} + +/*注册左键回调*/ +function regLeftClickCallback(id, callback, that) { + + leftClickCallbackMap.set(id, { callback, that }) +}/*取消左键回调*/ +function unRegLeftClickCallback(id,) { + leftClickCallbackMap.delete(id,) +} + +/*注册右键回调*/ +function regRightClickCallback(id, callback, that) { + rightClickCallbackMap.set(id, { callback, that }) +}/*取消右键回调*/ +function unRegRightClickCallback(id,) { + rightClickCallbackMap.delete(id,) +} + +/*注册左键回调*/ +function regMoveCallback(id, callback, that) { + MoveCallbackMap.set(id, { callback, that }) +}/*取消左键回调*/ +function unregMoveCallback(id,) { + MoveCallbackMap.delete(id,) +} + +function getLeftClickState() { + if (leftClickHandler) { + return true + } + else { + false + } +} + +function getRightClickState() { + if (rightClickHandler) { + return true + } + else { + false + } +} + +function getMoveState() { + if (MoveHandler) { + return true + } + else { + false + } +} + + +export { openLeftClick, closeLeftClick, regLeftClickCallback, unRegLeftClickCallback, openRightClick, closeRightClick, regRightClickCallback, unRegRightClickCallback, openMove, closeMove, regMoveCallback, unregMoveCallback, getLeftClickState, getRightClickState, getMoveState } diff --git a/src/Global/MultiViewportMode/index.js b/src/Global/MultiViewportMode/index.js index 9e61089..d9c616d 100644 --- a/src/Global/MultiViewportMode/index.js +++ b/src/Global/MultiViewportMode/index.js @@ -7,6 +7,9 @@ import { CesiumContainer } from '../global' import { off as offSplitScreen } from "../SplitScreen"; import { FlwStatusSwitch, JwwStatusSwitch, getFlwStatus, getJwwStatus } from "../global" import { SheetIndexStatusSwitch, getStatus } from '../SheetIndex' +import { getLeftClickState, getRightClickState, getMoveState } from "../../Global/ClickCallback" +import { openLeftClick, openRightClick, openMove } from "./ClickCallback" + let sdk2D let sdk3D @@ -32,6 +35,16 @@ async function init(sdk) { }) sdk2.viewer.scene.mode = Cesium.SceneMode.SCENE2D sdk2D = await sdk2 + if(getLeftClickState()) { + openLeftClick(sdk2D) + } + if(getRightClickState()) { + openRightClick(sdk2D) + } + if(getMoveState()) { + openMove(sdk2D) + } + // window.sdk2D = sdk2D solveBug() syncObject = { sdks: [sdk, sdk2], tools } diff --git a/src/Global/mouseRightMenu/index.js b/src/Global/mouseRightMenu/index.js index 413b556..8ca3f03 100644 --- a/src/Global/mouseRightMenu/index.js +++ b/src/Global/mouseRightMenu/index.js @@ -121,9 +121,6 @@ function MouseRightMenu(sdk, status, callBack) { - ${addedMenu} ` _element.appendChild(menuElm) diff --git a/src/In/index.js b/src/In/index.js index ebfff60..ac158cb 100644 --- a/src/In/index.js +++ b/src/In/index.js @@ -187,7 +187,7 @@ import DrawTakeOff from '../Obj/AirLine/DrawTakeOff' import FlowLine from '../Obj/Base/FlowLine' import Sunshine from '../Global/efflect/Sunshine' // import Road2 from '../Obj/Base/RoadObject' -import TextBox from '../Obj/Base/TextBox' +// import TextBox from '../Obj/Base/TextBox' import BatchModel from '../Obj/Base/BatchModel' const YJEarthismeasuring = Symbol('测量状态') @@ -262,7 +262,7 @@ if (!window.YJ) { Dialog, FlowLine, // Road2, - TextBox, + // TextBox, BatchModel }, YJEarth, diff --git a/src/Obj/Base/AssembleObject/index.js b/src/Obj/Base/AssembleObject/index.js index 3ee6ba0..f682f25 100644 --- a/src/Obj/Base/AssembleObject/index.js +++ b/src/Obj/Base/AssembleObject/index.js @@ -319,7 +319,7 @@ class AssembleObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/AttackArrowObject/index.js b/src/Obj/Base/AttackArrowObject/index.js index ec83033..f1ca715 100644 --- a/src/Obj/Base/AttackArrowObject/index.js +++ b/src/Obj/Base/AttackArrowObject/index.js @@ -324,7 +324,7 @@ class AttackArrowObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show &&!this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/BaseSource/BaseModel/Model/index.js b/src/Obj/Base/BaseSource/BaseModel/Model/index.js index d4bd9b0..6b24f46 100644 --- a/src/Obj/Base/BaseSource/BaseModel/Model/index.js +++ b/src/Obj/Base/BaseSource/BaseModel/Model/index.js @@ -637,7 +637,7 @@ class Model extends BaseModel { set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label && (this.label.show = v) } else { diff --git a/src/Obj/Base/BaseSource/BaseModel/Model2/index.js b/src/Obj/Base/BaseSource/BaseModel/Model2/index.js index 7a3f5cd..ae16232 100644 --- a/src/Obj/Base/BaseSource/BaseModel/Model2/index.js +++ b/src/Obj/Base/BaseSource/BaseModel/Model2/index.js @@ -550,7 +550,7 @@ class Model2 extends BaseModel { set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/CircleObject/index.js b/src/Obj/Base/CircleObject/index.js index d85022b..2145097 100644 --- a/src/Obj/Base/CircleObject/index.js +++ b/src/Obj/Base/CircleObject/index.js @@ -333,7 +333,7 @@ class CircleObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show && (!this.showView || this.showView == 3)) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/CurvelineObject/index.js b/src/Obj/Base/CurvelineObject/index.js index 0f632a0..f6ea05f 100644 --- a/src/Obj/Base/CurvelineObject/index.js +++ b/src/Obj/Base/CurvelineObject/index.js @@ -666,7 +666,7 @@ class CurvelineObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v setTimeout(() => { this.label.position = [ diff --git a/src/Obj/Base/EllipseObject/index.js b/src/Obj/Base/EllipseObject/index.js index 7b4631c..db05474 100644 --- a/src/Obj/Base/EllipseObject/index.js +++ b/src/Obj/Base/EllipseObject/index.js @@ -347,7 +347,7 @@ class EllipseObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/GroundSvg/index.js b/src/Obj/Base/GroundSvg/index.js index 5e175aa..629a86a 100644 --- a/src/Obj/Base/GroundSvg/index.js +++ b/src/Obj/Base/GroundSvg/index.js @@ -1,7 +1,7 @@ import Dialog from '../../Element/Dialog'; import { html } from "./_element"; import EventBinding from '../../Element/Dialog/eventBinding'; -import { syncData } from '../../../Global/MultiViewportMode' +import { syncData, getSdk } from '../../../Global/MultiViewportMode' import LabelObject from '../LabelObject' import DrawPoint from '../../../Draw/drawPoint.js' import richText from '../../Element/richText' @@ -19,6 +19,7 @@ import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/S class GroundSvg extends Base { #_textPosPickDrawEvent = null + #_destroyed = false /** * @constructor * @param sdk @@ -97,7 +98,7 @@ class GroundSvg extends Base { } this.options.offset = options.offset || { x: 0.5, y: 1 } - this.options.mode = this.options.mode ? 1 : 0 + this.options.mode = this.options.mode || this.options.mode == undefined || this.options.mode == null ? 1 : 0 this.options.billboard = options.billboard || {} this.options.billboard.scale = this.options.billboard.scale || 1 this.options.billboard.near = this.options.billboard.near || this.options.billboard.near === 0 ? this.options.billboard.near : 2000 @@ -1324,6 +1325,19 @@ class GroundSvg extends Base { let _this = this let heightMode let font = getFontFamily(this.labelFontFamily) || 'Helvetica' + let { sdkP, sdkD } = getSdk() + let show = true + if (this.sdk === sdkP) { + if (this.showView == 2) { + show = false + } + } + else if (this.sdk === sdkD) { + if (this.showView == 3) { + show = false + } + } + if (this.entity) { this.sdk.viewer.entities.remove(this.entity) this.text && this.text.remove() @@ -1389,7 +1403,7 @@ class GroundSvg extends Base { ) _this.entity = new Cesium.Entity({ - show: _this.options.show, + show: show ? _this.options.show : false, id: _this.options.id, position: new Cesium.CallbackProperty(() => { return Cesium.Cartesian3.fromDegrees( @@ -1454,6 +1468,7 @@ class GroundSvg extends Base { } else { this.entity = new Cesium.EntityCollection() + this.entity.show = show ? this.options.show : false let perPositionHeight = false if (this.sdk.viewer._element.className === 'cesium-viewer 2d') { perPositionHeight = true @@ -1462,7 +1477,6 @@ class GroundSvg extends Base { for (let m = 0; m < this.hierarchys[i].length; m++) { let entity = this.sdk.viewer.entities.add({ id: this.options.id + `-${i}_${m}`, - show: this.options.show, polygon: { hierarchy: new Cesium.CallbackProperty(() => { let hierarchy = this.hierarchys[i][m] @@ -1838,15 +1852,44 @@ class GroundSvg extends Base { } }) labelOffsetXElm.addEventListener('input', (e) => { - this.labelOffset = { - x: Number(e.target.value), - y: this.labelOffset.y + let value = e.target.value + value = Number(value) + if (e.data != '-' || e.target.value) { + if ((e.target.max) && value > Number(e.target.max)) { + value = Number(e.target.max) + } + if ((e.target.min) && value < Number(e.target.min)) { + value = Number(e.target.min) + } + if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { + value = Number(e.target.dataset.min) + } + this.labelOffset = { + x: value, + y: this.labelOffset.y + } } + }) labelOffsetYElm.addEventListener('input', (e) => { - this.labelOffset = { - x: this.labelOffset.x, - y: Number(e.target.value) + if (e.target.value || e.target.value === 0) { + let value = e.target.value + value = Number(value) + if (e.data != '-' || e.target.value) { + if ((e.target.max) && value > Number(e.target.max)) { + value = Number(e.target.max) + } + if ((e.target.min) && value < Number(e.target.min)) { + value = Number(e.target.min) + } + if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { + value = Number(e.target.dataset.min) + } + this.labelOffset = { + x: this.labelOffset.x, + y: Number(value) + } + } } }) @@ -1890,8 +1933,6 @@ class GroundSvg extends Base { } } - - this.attributeLink = this.options.attribute.link.content let tagData = this.attributeSelect let attributeElm = this._DialogObject._element.content.getElementsByClassName( @@ -2274,9 +2315,10 @@ class GroundSvg extends Base { * 重置 */ reset() { - if (!this.#loaded) { + if (!this.#loaded || this.#_destroyed) { return } + this.options = this.deepCopyObj(this.originalOptions) this.position = this.originalOptions.position this.name = this.originalOptions.name @@ -2303,7 +2345,7 @@ class GroundSvg extends Base { * @param {boolean} status=false 状态 */ drag(status, cd) { - if (!this.#loaded || !this.sdk || !this.sdk.viewer) { + if (!this.#loaded || !this.sdk || !this.sdk.viewer || !this.entity || !this.entity.values || this.entity.values.length == 0) { return } let greenImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA+0lEQVR4AZSTPQ7CMAyFk0jAFYCRCbgEbHAKBqRyKCoYOAVs5RLAQseKKxQkwntWVCltJdzK+bO/59ZW6kztGX6mi/F7dhiV0ydWzxH2B8ZquIkSAN47bzNAW2vtBKtY2G8ZIyPOMFUJxuX8DF+C8c+SwAonCSSr9SvxaCawogHrQl2aNwOPLKHWoa5N5O5woNZ575cdNBFKrQsdjgLaA7XSRK2gjWMJeVtA40MJOUvgxdHwDQYlZO5r/akRUTqoda/e4wo+xehqKbXSxKJ/3xlvL+oMYEUDgSTAaorBbY1V8yVpYIGb+G9kVtTFi3Vkh4XAFPZHxsjAVdkPAAD//0PYov0AAAAGSURBVAMA5pZjby819WUAAAAASUVORK5CYII=' @@ -3277,6 +3319,7 @@ class GroundSvg extends Base { this.sdk.viewer.entities.remove(this.entity.values[i]) } } + this.#_destroyed = true if (this._DialogObject && !this._DialogObject.isDestroy) { this._DialogObject.close() this._DialogObject = null @@ -3467,7 +3510,7 @@ class GroundSvg extends Base { 128 * this.billboardScale * (0.5 - this.options.offset.x) + this.options.label.offset.x, -billboardH * this.billboardScale - this.options.label.fontSize / 2 - - 5 + this.options.label.offset.y + 5 + this.options.label.offset.y + ((1 - this.options.offset.y) * 128 * this.billboardScale) ) this.entity.label.pixelOffset = lablePixelOffset } diff --git a/src/Obj/Base/PincerArrowObject/index.js b/src/Obj/Base/PincerArrowObject/index.js index 5788789..6c5850c 100644 --- a/src/Obj/Base/PincerArrowObject/index.js +++ b/src/Obj/Base/PincerArrowObject/index.js @@ -334,7 +334,7 @@ class PincerArrowObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/PolygonObject/index.js b/src/Obj/Base/PolygonObject/index.js index ca87983..6d51972 100644 --- a/src/Obj/Base/PolygonObject/index.js +++ b/src/Obj/Base/PolygonObject/index.js @@ -355,7 +355,7 @@ class PolygonObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { this.label.show = false diff --git a/src/Obj/Base/PolyhedronObject/index.js b/src/Obj/Base/PolyhedronObject/index.js index 17d9934..1687d93 100644 --- a/src/Obj/Base/PolyhedronObject/index.js +++ b/src/Obj/Base/PolyhedronObject/index.js @@ -517,7 +517,7 @@ class PolyhedronObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/PolylineObject/index.js b/src/Obj/Base/PolylineObject/index.js index 300c41c..35273d8 100644 --- a/src/Obj/Base/PolylineObject/index.js +++ b/src/Obj/Base/PolylineObject/index.js @@ -701,7 +701,7 @@ class PolylineObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v setTimeout(() => { this.label.position = [ diff --git a/src/Obj/Base/RadarScanStereoscopic/index.js b/src/Obj/Base/RadarScanStereoscopic/index.js index aef9c62..4c07dec 100644 --- a/src/Obj/Base/RadarScanStereoscopic/index.js +++ b/src/Obj/Base/RadarScanStereoscopic/index.js @@ -424,7 +424,7 @@ class RadarScanStereoscopic extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/SectorObject/index.js b/src/Obj/Base/SectorObject/index.js index 66e9c1e..60d8366 100644 --- a/src/Obj/Base/SectorObject/index.js +++ b/src/Obj/Base/SectorObject/index.js @@ -344,7 +344,7 @@ class SectorObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/StraightArrowObject/index.js b/src/Obj/Base/StraightArrowObject/index.js index f4037ef..8ab636c 100644 --- a/src/Obj/Base/StraightArrowObject/index.js +++ b/src/Obj/Base/StraightArrowObject/index.js @@ -321,7 +321,7 @@ class StraightArrowObject extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/WallRealStereoscopic/index.js b/src/Obj/Base/WallRealStereoscopic/index.js index 340eaaa..6ae0a9f 100644 --- a/src/Obj/Base/WallRealStereoscopic/index.js +++ b/src/Obj/Base/WallRealStereoscopic/index.js @@ -253,7 +253,7 @@ class WallRealStereoscopic extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/WallStereoscopic/index.js b/src/Obj/Base/WallStereoscopic/index.js index 49a0edf..1b37194 100644 --- a/src/Obj/Base/WallStereoscopic/index.js +++ b/src/Obj/Base/WallStereoscopic/index.js @@ -195,7 +195,7 @@ class WallStereoscopic extends Base { } set labelShow(v) { this.options.label.show = v - if (this.show) { + if (this.show && !this.showView || this.showView == 3) { this.label.show = v } else { diff --git a/src/Obj/Base/index.js b/src/Obj/Base/index.js index fedb92a..86f8d5f 100644 --- a/src/Obj/Base/index.js +++ b/src/Obj/Base/index.js @@ -9,6 +9,7 @@ import Tools from "../../Tools"; import { getHost, getToken } from "../../on"; import { regLeftClickCallback, regRightClickCallback, regMoveCallback } from "../../Global/ClickCallback"; import { regLeftClickCallback as regLeftClickCallback2, regRightClickCallback as regRightClickCallback2, regMoveCallback as regMoveCallback2 } from "../../Global/SplitScreen/ClickCallback"; +import { regLeftClickCallback as regLeftClickCallback3, regRightClickCallback as regRightClickCallback3, regMoveCallback as regMoveCallback3 } from "../../Global/MultiViewportMode/ClickCallback"; import { setSplitDirection, syncSplitData, getSdk } from "../../Global/SplitScreen"; import { syncData, getSdk as get2DSdk } from '../../Global/MultiViewportMode' import { setActiveViewer, closeRotateAround, closeViewFollow } from '../../Global/global' @@ -68,7 +69,7 @@ class Base extends Tools { let sdk2D = get2DSdk().sdkD if (!sdk2D) { this.#_showView = v - if(this.entity) { + if (this.entity) { this.entity._showView = v } return @@ -361,12 +362,17 @@ class Base extends Tools { console.error('val:', val, '不是一个function') } else { let sdkD = getSdk().sdkD + let sdk2D = get2DSdk().sdkD if (sdkD && this.sdk === sdkD) { if (this.clickCallBack == null && this.options && this.options.id) { regLeftClickCallback2(this.options.id, this.leftClickCB, this) } } - else { + else if (sdk2D && this.sdk === sdk2D) { + if (this.clickCallBack == null && this.options && this.options.id) { + regLeftClickCallback3(this.options.id, this.leftClickCB, this) + } + } else { if (this.clickCallBack == null && this.options && this.options.id) { regLeftClickCallback(this.options.id, this.leftClickCB, this) } @@ -384,12 +390,17 @@ class Base extends Tools { console.error('val:', val, '不是一个function') } else { let sdkD = getSdk().sdkD + let sdk2D = get2DSdk().sdkD if (sdkD && this.sdk === sdkD) { if (this.rightClickCallBack == null && this.entity && this.entity.id) { regRightClickCallback2(this.entity.id, this.rightClickCB, this) } } - else { + else if (sdk2D && this.sdk === sdk2D) { + if (this.clickCallBack == null && this.options && this.options.id) { + regRightClickCallback3(this.options.id, this.leftClickCB, this) + } + } else { if (this.rightClickCallBack == null && this.entity && this.entity.id) { regRightClickCallback(this.entity.id, this.rightClickCB, this) } @@ -407,12 +418,17 @@ class Base extends Tools { console.error('val:', val, '不是一个function') } else { let sdkD = getSdk().sdkD + let sdk2D = get2DSdk().sdkD if (sdkD && this.sdk === sdkD) { if (this.mouseMoveCallBack == null && this.entity && this.entity.id) { regMoveCallback2(this.entity.id, this.mouseMoveCB, this) } } - else { + else if (sdk2D && this.sdk === sdk2D) { + if (this.clickCallBack == null && this.options && this.options.id) { + regMoveCallback3(this.options.id, this.leftClickCB, this) + } + } else { if (this.mouseMoveCallBack == null && this.entity && this.entity.id) { regMoveCallback(this.entity.id, this.mouseMoveCB, this) } diff --git a/src/YJEarth/index.js b/src/YJEarth/index.js index 0f5df67..6fc9060 100644 --- a/src/YJEarth/index.js +++ b/src/YJEarth/index.js @@ -62,9 +62,9 @@ class YJEarth { removeIncetance(id) { this.entityMap.delete(id) - unRegLeftClickCallback(id) - unRegRightClickCallback(id) - unregMoveCallback(id) + unRegLeftClickCallback(this,id) + unRegRightClickCallback(this,id) + unregMoveCallback(this,id) syncSplitData(this, id) }