From 623a220cbf912f1db7e77f273a01de77b3dc8518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A4=A7=E8=83=86?= <1101282782@qq.com> Date: Tue, 26 Aug 2025 18:03:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=9C=AC=E6=A1=86?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Obj/Base/TextBox/index.js | 38 +++++++++++++++++++++++++++++++---- src/YJEarth/index.js | 16 +++++++++++---- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/Obj/Base/TextBox/index.js b/src/Obj/Base/TextBox/index.js index 0597f38..082e9b3 100644 --- a/src/Obj/Base/TextBox/index.js +++ b/src/Obj/Base/TextBox/index.js @@ -30,6 +30,7 @@ class TextBox extends Base { this.textDom = undefined this.create(this) this.sdk.addIncetance(this.options.id, this) + this.callback = callback // syncData(this.sdk, this.options.id) @@ -46,6 +47,7 @@ class TextBox extends Base { let dom = document.createElement('span'); dom.id = that.options.id dom.className = 'popup-textarea' + dom.style.zIndex = 1 // 创建textarea元素 var textarea = document.createElement('textarea'); textarea.className = 'textarea' @@ -134,17 +136,45 @@ class TextBox extends Base { this.options.text = words this.callback(this.options) let { sdkP } = getSdk() - if(this.sdk === sdkP) { - console.log(3) + if (this.sdk === sdkP && sdkP) {//三维 syncData(this.sdk, this.options.id) } - else { - console.log(2) + else if (sdkP) {//二维 + sdkP.entityMap.get(this.options.id).text = words + sdkP.entityMap.get(this.options.id).twoToThree(this.options.position) + } else if (!sdkP) { + syncData(this.sdk, this.options.id) } } + async twoToThree(position) { + let that = this + that.sdk.viewer.scene.postRender.removeEventListener(that.handler); + let posi = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt) + + that.handler = function () { + const position = Cesium.SceneTransforms.wgs84ToWindowCoordinates( + that.sdk.viewer.scene, posi + ); + if (position) { + let width = that.textDom.clientWidth * 1 + let height = that.textDom.clientHeight * 1 + that.textDom.style.left = `${position.x - width / 2}px`; + that.textDom.style.top = `${position.y - height}px`; + } + } + that.sdk.viewer.scene.postRender.addEventListener(that.handler); + } async returnFun() { return this.handler } + get text() { + return this.options.text + } + set text(val) { + this.options.text = val + this.textDom.querySelector('textarea').value = val + this.callback(this.options) + } get onClick() { return this.clickCallBack } diff --git a/src/YJEarth/index.js b/src/YJEarth/index.js index f0e4003..c99b812 100644 --- a/src/YJEarth/index.js +++ b/src/YJEarth/index.js @@ -10,6 +10,7 @@ import AModelLoader from '../Obj/Base/LoadObjModel/AModelLoader' import { setSvg } from '../Obj/Element/svg' import Tools from '../Tools' import { Proj } from '../Tools/proj' +import { syncData, getSdk } from '../Global/MultiViewportMode' import { unRegLeftClickCallback, unRegRightClickCallback, @@ -432,6 +433,8 @@ class YJEarth { if (x > left && x < left + width && y > top && y < top + height) { if (_this.clickTextDom) { _this.clickTextDom.style['pointer-events'] = 'none' + _this.entityMap.get(_this.clickTextDom.id).getwords(_this.clickTextDom.getElementsByTagName('textarea')[0].value) + // _this.entityMap.get(_this.clickTextDom.id).isClick(movement.position, _this.clickTextDom.id) } _this.clickTextDom = textList[i] textList[i].style['pointer-events'] = 'all' @@ -468,6 +471,11 @@ class YJEarth { x: e.clientX - layerX + width / 2, y: e.clientY - layerY + height, } + let { sdkP } = getSdk() + if (_this != sdkP && sdkP) {//二维 + let num = sdkP.viewer._element.clientWidth + param.x = param.x - num + } _this.entityMap.get(_this.clickTextDom.id).setHandeler(param) } @@ -479,14 +487,14 @@ class YJEarth { } _this.clickTextDom.addEventListener('mousedown', mousedown); - document.addEventListener('mousemove', mousemove); - document.addEventListener('mouseup', mouseup); + _this.viewer._element.addEventListener('mousemove', mousemove); + _this.viewer._element.addEventListener('mouseup', mouseup); } // 点击其他地方取消 if (!_this.isLeftClick && _this.clickTextDom) { _this.clickTextDom.removeEventListener('mousedown', mousedown); - document.removeEventListener('mousemove', mousemove); - document.removeEventListener('mouseup', mouseup); + _this.viewer._element.removeEventListener('mousemove', mousemove); + _this.viewer._element.removeEventListener('mouseup', mouseup); _this.entityMap.get(_this.clickTextDom.id).getwords(_this.clickTextDom.getElementsByTagName('textarea')[0].value) _this.clickTextDom.style['pointer-events'] = 'none'