From b29753453a473dd61457ab0368c99e51faffde80 Mon Sep 17 00:00:00 2001 From: zh <972939975@qq.com> Date: Tue, 23 Sep 2025 10:18:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Obj/Base/AssembleObject/index.js | 1 + src/Obj/Base/AttackArrowObject/index.js | 2 + src/Obj/Base/BaseSource/BaseLayer/index.js | 9 +- src/Obj/Base/BaseSource/BaseTerrain/index.js | 6 + .../BaseSource/BaseTileset/Tileset/index.js | 1 + src/Obj/Base/BaseSource/BaseTileset/index.js | 15 +- src/Obj/Base/BillboardObject/index.js | 4 +- src/Obj/Base/CircleDiffuse/index.js | 38 +- src/Obj/Base/CircleObject/index.js | 2 + src/Obj/Base/CurvelineObject/index.js | 2 + src/Obj/Base/EllipseObject/index.js | 2 + src/Obj/Base/PincerArrowObject/index.js | 2 + src/Obj/Base/PolygonObject/index.js | 2 + src/Obj/Base/PolyhedronObject/index.js | 493 +----------------- src/Obj/Base/PolylineObject/index.js | 2 + src/Obj/Base/RadarScan/index.js | 465 +---------------- src/Obj/Base/RadarScanStereoscopic/index.js | 454 +--------------- 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 + 21 files changed, 139 insertions(+), 1369 deletions(-) diff --git a/src/Obj/Base/AssembleObject/index.js b/src/Obj/Base/AssembleObject/index.js index 06c4c67..c59b38b 100644 --- a/src/Obj/Base/AssembleObject/index.js +++ b/src/Obj/Base/AssembleObject/index.js @@ -103,6 +103,7 @@ class AssembleObject extends Base { this.options.attribute = options.attribute || {} this.options.attribute.link = this.options.attribute.link || {} this.options.attribute.link.content = this.options.attribute.link.content || [] + this.options.richTextContent = options.richTextContent || '' delete this.options.attribute.camera delete this.options.attribute.vr diff --git a/src/Obj/Base/AttackArrowObject/index.js b/src/Obj/Base/AttackArrowObject/index.js index b0c8b0b..cc9b964 100644 --- a/src/Obj/Base/AttackArrowObject/index.js +++ b/src/Obj/Base/AttackArrowObject/index.js @@ -116,6 +116,8 @@ class AttackArrowObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + if (!this.options.positions || this.options.positions.length < 3) { this._error = '箭头面最少需要三个坐标!' diff --git a/src/Obj/Base/BaseSource/BaseLayer/index.js b/src/Obj/Base/BaseSource/BaseLayer/index.js index 083fd74..08c0b3a 100644 --- a/src/Obj/Base/BaseSource/BaseLayer/index.js +++ b/src/Obj/Base/BaseSource/BaseLayer/index.js @@ -40,8 +40,8 @@ class BaseLayer extends BaseSource { } set brightness(v) { - this.options.brightness = v - this.entity.brightness = v + this.options.brightness = Number(v) + this.entity.brightness = Number(v) } get alpha() { @@ -50,8 +50,9 @@ class BaseLayer extends BaseSource { set alpha(v) { - if (Number(v) > 1) v = 1 - if (Number(v) < 0) v = 0 + v = Number(v) + if (v > 1) v = 1 + if (v < 0) v = 0 this.entity.alpha = v this.options.alpha = v this._elms.alpha && this._elms.alpha.forEach((item) => { diff --git a/src/Obj/Base/BaseSource/BaseTerrain/index.js b/src/Obj/Base/BaseSource/BaseTerrain/index.js index 9f9a087..2cb14de 100644 --- a/src/Obj/Base/BaseSource/BaseTerrain/index.js +++ b/src/Obj/Base/BaseSource/BaseTerrain/index.js @@ -238,6 +238,7 @@ class BaseTerrain extends BaseSource { * @param state=false {boolean} 状态: true打开, false关闭 */ async edit(state = false) { + return this.originalOptions = this.deepCopyObj(this.options) if (this._DialogObject && this._DialogObject.close) { this._DialogObject.close() @@ -287,6 +288,11 @@ class BaseTerrain extends BaseSource { this._elms.name = [nameElm] } + reset() { + this.options = this.deepCopyObj(this.originalOptions) + this.name = this.options.name + } + flicker() { } } diff --git a/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js b/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js index d31ec33..2efe20e 100644 --- a/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js +++ b/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js @@ -164,6 +164,7 @@ class Tileset extends BaseTileset { * @param state=false {boolean} 状态: true打开, false关闭 */ async edit(state = false) { + return let _this = this this._element_style = null diff --git a/src/Obj/Base/BaseSource/BaseTileset/index.js b/src/Obj/Base/BaseSource/BaseTileset/index.js index 8ff5f3f..4989ae5 100644 --- a/src/Obj/Base/BaseSource/BaseTileset/index.js +++ b/src/Obj/Base/BaseSource/BaseTileset/index.js @@ -552,6 +552,7 @@ class BaseTileset extends BaseSource { } else { this.editObj.destroy() + this._positionEditingCallback = null } } @@ -562,12 +563,13 @@ class BaseTileset extends BaseSource { return false } - //平移时,坐标信息变化的回调 - set positionEditingCallBack(callback) { - return + openPositionEditing(cd) { + this.positionEditing = true + this._positionEditingCallback = cd } - - get positionEditingCallBack() { + closePositionEditing() { + this.positionEditing = false + this._positionEditingCallback = null } //旋转时,坐标信息变化的回调 @@ -583,6 +585,9 @@ class BaseTileset extends BaseSource { this.roll = params.rotate.x this.heading = params.rotate.y this.pitch = params.rotate.z + if(this._positionEditingCallback) { + this._positionEditingCallback() + } // this._rotationEditingCallBack && this._rotationEditingCallBack(this.editObj._params) } } diff --git a/src/Obj/Base/BillboardObject/index.js b/src/Obj/Base/BillboardObject/index.js index c3e008e..c6fb7f0 100644 --- a/src/Obj/Base/BillboardObject/index.js +++ b/src/Obj/Base/BillboardObject/index.js @@ -175,6 +175,8 @@ class BillboardObject extends Base { this.options.attribute.goods = this.options.attribute.goods || {} this.options.attribute.goods.content = this.options.attribute.goods.content || [] + + this.options.richTextContent = options.richTextContent || '' // this.options.coordinate = options.coordinate || '' this.operate = {} this._elms = {} @@ -2390,7 +2392,7 @@ class BillboardObject extends Base { this.entity.position = new Cesium.CallbackProperty(function () { return cartesian }, false) - if(this.#_positionEditingCallback) { + if (this.#_positionEditingCallback) { this.#_positionEditingCallback() this.#_positionEditingCallback = null } diff --git a/src/Obj/Base/CircleDiffuse/index.js b/src/Obj/Base/CircleDiffuse/index.js index a0cf91e..2b07192 100644 --- a/src/Obj/Base/CircleDiffuse/index.js +++ b/src/Obj/Base/CircleDiffuse/index.js @@ -15,6 +15,7 @@ import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/S import { setActiveViewer, closeRotateAround, closeViewFollow } from '../../../Global/global' class CircleDiffuse extends Base { + #_positionEditingCallback = null /** * @constructor * @description 扩散圆 @@ -24,7 +25,7 @@ class CircleDiffuse extends Base { * @param options.show=true {boolean} 显示/隐藏 * @param options.lng {number} 经度 * @param options.lat {number} 维度 - * @param options.color=#1FA8E3 {string} 基础颜色 + * @param options.color=#ff0000 {string} 基础颜色 * @param options.speed=5 {number} 速度 * @param options.count=3 {number} 波纹数量 * @param options.circle=[]] {array} 圆属性 @@ -84,7 +85,7 @@ class CircleDiffuse extends Base { this.options.count = 3 } - this.options.circle = options.circle || [{ radius: 10 }] + this.options.circle = options.circle || [{ radius: 10, color: this.options.color }] for (let i = 0; i < this.options.circle.length; i++) { if (this.options.circle[i].radius > 999999) { this.options.circle[i].radius = 999999 @@ -93,7 +94,6 @@ class CircleDiffuse extends Base { this.options.show = (options.show || options.show === false) ? options.show : true this.event = new MouseEvent(this.sdk) - this.options.positionEditin = false options.label = options.label || {} this._elms = {}; this.options.label = { @@ -110,8 +110,6 @@ class CircleDiffuse extends Base { near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, } - this.options.instruct = options.instruct || '' - this.options.operatingPoint = options.operatingPoint || '' this.options.attribute = options.attribute || {} this.options.attribute.link = this.options.attribute.link || {} this.options.attribute.link.content = this.options.attribute.link.content || [] @@ -120,6 +118,8 @@ class CircleDiffuse extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + let radius = 0 for (let i = 0; i < this.options.circle.length; i++) { if (Number(this.options.circle[i].radius) > radius) { @@ -128,6 +128,8 @@ class CircleDiffuse extends Base { } this._radius = radius + this.operate = {} + this.Dialog = _Dialog this._EventBinding = new EventBinding() this.sdk.addIncetance(this.options.id, this) @@ -213,10 +215,8 @@ class CircleDiffuse extends Base { } static async createLabel(that) { - if (!that.options.label.position) { - let height = await that.getClampToHeight({ lng: that.options.lng, lat: that.options.lat }) - that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } - } + let height = await that.getClampToHeight({ lng: that.options.lng, lat: that.options.lat }) + that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } // 标签 that.label = new LabelObject(that.sdk, { id: that.options.id, @@ -287,7 +287,7 @@ class CircleDiffuse extends Base { if (!this.sdk || !this.sdk.viewer || !this.entity) { return } - this.options.positionEditing = status + this.operate.positionEditing = status if (status === true) { this.tip && this.tip.destroy() this.tip = new MouseTip('点击鼠标左键确认,右键取消', this.sdk) @@ -316,6 +316,10 @@ class CircleDiffuse extends Base { this.event.mouse_right(() => { }) this.event.gesture_pinck_start(() => { }) this.event.gesture_pinck_end(() => { }) + if (this.#_positionEditingCallback) { + this.#_positionEditingCallback() + this.#_positionEditingCallback = null + } this.lastOptions = undefined this.positionEditing = false }) @@ -368,7 +372,12 @@ class CircleDiffuse extends Base { } get positionEditing() { - return this.options.positionEditing + return this.operate.positionEditing + } + + openPositionEditing(cd) { + this.positionEditing = true + this.#_positionEditingCallback = cd } get lng() { @@ -400,7 +409,7 @@ class CircleDiffuse extends Base { return this.options.circle } set circle(v) { - this.options.circle = v || [{ radius: 10 }] + this.options.circle = v || [{ radius: 10, color: this.options.color }] let radius = 0 for (let i = 0; i < this.options.circle.length; i++) { if (Number(this.options.circle[i].radius) > 999999) { @@ -433,7 +442,7 @@ class CircleDiffuse extends Base { this.options.transparency = 1 } else { - this.options.transparency = v + this.options.transparency = Number(v) } CircleDiffuse.create(this) this._elms.transparency && this._elms.transparency.forEach((item) => { @@ -980,7 +989,6 @@ class CircleDiffuse extends Base { this.name = this.originalOptions.name this.lng = this.originalOptions.lng this.lat = this.originalOptions.lat - this.color = this.originalOptions.color this.duration = this.originalOptions.duration this.labelShow = this.originalOptions.label.show this.labelColor = this.originalOptions.label.color @@ -994,8 +1002,6 @@ class CircleDiffuse extends Base { this.labelLineColor = this.originalOptions.label.lineColor this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0] this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1] - this.instruct = this.originalOptions.instruct - this.operatingPoint = this.originalOptions.operatingPoint let radius = 0 for (let i = 0; i < this.options.circle.length; i++) { diff --git a/src/Obj/Base/CircleObject/index.js b/src/Obj/Base/CircleObject/index.js index 411ca23..630bea4 100644 --- a/src/Obj/Base/CircleObject/index.js +++ b/src/Obj/Base/CircleObject/index.js @@ -111,6 +111,8 @@ class CircleObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + this.event = new MouseEvent(this.sdk) diff --git a/src/Obj/Base/CurvelineObject/index.js b/src/Obj/Base/CurvelineObject/index.js index effbc09..9f6eb8b 100644 --- a/src/Obj/Base/CurvelineObject/index.js +++ b/src/Obj/Base/CurvelineObject/index.js @@ -147,6 +147,8 @@ class CurvelineObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + this.operate = {} this.nodePoints = [] diff --git a/src/Obj/Base/EllipseObject/index.js b/src/Obj/Base/EllipseObject/index.js index 8200ed0..f9e8fe7 100644 --- a/src/Obj/Base/EllipseObject/index.js +++ b/src/Obj/Base/EllipseObject/index.js @@ -110,6 +110,8 @@ class EllipseObject extends Base { this.options.attribute.goods = this.options.attribute.goods || {} this.options.attribute.goods.content = this.options.attribute.goods.content || [] this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this.event = new MouseEvent(this.sdk) this.nodePoints = [] this.operate = {} diff --git a/src/Obj/Base/PincerArrowObject/index.js b/src/Obj/Base/PincerArrowObject/index.js index d212879..c4c4d24 100644 --- a/src/Obj/Base/PincerArrowObject/index.js +++ b/src/Obj/Base/PincerArrowObject/index.js @@ -116,6 +116,8 @@ class PincerArrowObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + if (!this.options.positions || this.options.positions.length < 5) { this._error = '双箭头最少需要五个坐标!' console.warn(this._error) diff --git a/src/Obj/Base/PolygonObject/index.js b/src/Obj/Base/PolygonObject/index.js index d6bf490..e3a6430 100644 --- a/src/Obj/Base/PolygonObject/index.js +++ b/src/Obj/Base/PolygonObject/index.js @@ -142,6 +142,8 @@ class PolygonObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + if (!this.options.positions || this.options.positions.length < 3) { this._error = '多边形最少需要三个坐标!' diff --git a/src/Obj/Base/PolyhedronObject/index.js b/src/Obj/Base/PolyhedronObject/index.js index 5a2ff5f..80aaa83 100644 --- a/src/Obj/Base/PolyhedronObject/index.js +++ b/src/Obj/Base/PolyhedronObject/index.js @@ -78,7 +78,6 @@ class PolyhedronObject extends Base { this.entity this.nodePoints = [] this.operate = {} - this.options['area-unit'] = options['area-unit'] || '平方米' options.label = options.label || {} this.options.label = { text: this.options.name, @@ -98,13 +97,8 @@ class PolyhedronObject extends Base { this.options.attribute = options.attribute || {} this.options.attribute.link = this.options.attribute.link || {} this.options.attribute.link.content = this.options.attribute.link.content || [] - this.options.attribute.camera = this.options.attribute.camera || {} - this.options.attribute.camera.content = this.options.attribute.camera.content || [] - this.options.attribute.vr = this.options.attribute.vr || {} - this.options.attribute.vr.content = this.options.attribute.vr.content || [] - this.options.attribute.goods = this.options.attribute.goods || {} - this.options.attribute.goods.content = this.options.attribute.goods.content || [] - this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this._elms = {}; this.Dialog = _Dialog if (!this.options.positions || this.options.positions.length < 3) { @@ -191,23 +185,7 @@ class PolyhedronObject extends Base { }, }) PolyhedronObject.createLabel(that) - that.options.areaByMeter = that.computeArea(positions); - switch (that.options['area-unit']) { - case '平方米': - that.options.area = that.options.areaByMeter - break; - case '平方千米': - that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8)) - break; - case '亩': - that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4)) - break; - case '公顷': - that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6)) - break; - default: - that.options.area = that.options.areaByMeter - } + that.areaByMeter = that.computeArea(positions); syncData(that.sdk, that.options.id) if(that.options.show) { @@ -315,6 +293,11 @@ class PolyhedronObject extends Base { } this.positions = newpositions this.previous.positions = newpositions + + if(this._positionEditingCallback) { + this._positionEditingCallback() + this._positionEditingCallback = null + } this.positionEditing = false }) this.event.mouse_right((movement, cartesian) => { @@ -412,6 +395,19 @@ class PolyhedronObject extends Base { return this.operate.positionEditing } + openPositionEditing(cd) { + this.positionEditing = true + this._positionEditingCallback = cd + } + + get areaChangeCallBack() { + return this._areaChangeCallBack + } + + set areaChangeCallBack (cd) { + this._areaChangeCallBack = cd + } + get color() { return this.options.color } @@ -519,34 +515,6 @@ class PolyhedronObject extends Base { }) } - get areaUnit() { - return this.options['area-unit'] - } - set areaUnit(v) { - this.options['area-unit'] = v - this._elms.areaUnit && this._elms.areaUnit.forEach((item) => { - item.value = v - }) - if (this.options.areaByMeter) { - switch (v) { - case '平方米': - this.area = this.options.areaByMeter - break; - case '平方千米': - this.area = Number((this.options.areaByMeter / 1000000).toFixed(8)) - break; - case '亩': - this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4)) - break; - case '公顷': - this.area = Number((this.options.areaByMeter / 10000).toFixed(6)) - break; - default: - this.area = this.options.areaByMeter - } - } - } - get labelShow() { return this.options.label.show } @@ -758,322 +726,9 @@ class PolyhedronObject extends Base { } } - get attributeType() { - return this.options.attributeType - } - - set attributeType(v) { - this.options.attributeType = v - this._elms.attributeType && this._elms.attributeType.forEach((item) => { - item.value = v - }) - let attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content') - for (let i = 0; i < attributeContent.length; i++) { - if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) { - attributeContent[i].style.display = 'block'; - } - else { - attributeContent[i].style.display = 'none'; - } - } - } - - get attributeLink() { - return this.options.attribute.link.content - } - - set attributeLink(v) { - this.options.attribute.link.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.link.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.link.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.link.content[i].name + `
-
` + this.options.attribute.link.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - linkEdit: async (index) => { - this.attributeLink = await this.options.attribute.link.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] || !btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - linkDelete: (i) => { - this.options.attribute.link.content.splice(i, 1) - this.attributeLink = this.options.attribute.link.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if(name && url) { - this.options.attribute.link.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeLink = this.options.attribute.link.content - }, - cancelEdit: () => { - this.attributeLink = this.options.attribute.link.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - - - - - } - - get attributeCamera() { - return this.options.attribute.camera.content - } - - set attributeCamera(v) { - this.options.attribute.camera.content = v - } - - get attributeVr() { - return this.options.attribute.vr.content - } - - set attributeVr(v) { - this.options.attribute.vr.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.vr.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.vr.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.vr.content[i].name + `
-
` + this.options.attribute.vr.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - vrEdit: async (index) => { - this.attributeVr = await this.options.attribute.vr.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - vrDelete: (i) => { - this.options.attribute.vr.content.splice(i, 1) - this.attributeVr = this.options.attribute.vr.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if(name && url) { - this.options.attribute.vr.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeVr = this.options.attribute.vr.content - }, - cancelEdit: () => { - this.attributeVr = this.options.attribute.vr.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - } - - get attributeGoods() { - return this.options.attribute.goods.content - } - - set attributeGoods(v) { - this.options.attribute.goods.content = v - } - // 编辑框 async edit(state) { + return if (this._error) { return } @@ -1134,8 +789,6 @@ class PolyhedronObject extends Base { let contentElm = document.createElement('div'); contentElm.innerHTML = html(this) this._DialogObject.contentAppChild(contentElm) - this.attributeType = this.options.attributeType - this.attributeCamera = this.options.attribute.camera.content // 创建标签页 let tabsElm = new cy_tabs('polygon-object-edit-tabs', undefined, this.sdk) @@ -1337,7 +990,6 @@ class PolyhedronObject extends Base { this.height = this.originalOptions.height this.extrudedHeight = this.originalOptions.extrudedHeight this.area = this.originalOptions.area - this.areaUnit = this.originalOptions['area-unit'] this.labelShow = this.originalOptions.label.show this.labelColor = this.originalOptions.label.color this.labelFontSize = this.originalOptions.label.fontSize @@ -1350,12 +1002,6 @@ class PolyhedronObject extends Base { this.labelLineColor = this.originalOptions.label.lineColor this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0] this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1] - this.attributeLink = this.options.attribute.link.content - this.attributeCamera = this.options.attribute.camera.content - this.attributeVr = this.options.attribute.vr.content - this.attributeGoods = this.options.attribute.goods.content - this.cameraSelect && this.cameraSelect() - this.goodsSelect && this.goodsSelect() let positions = this.options.positions let fromDegreesArray = [] @@ -1399,63 +1045,10 @@ class PolyhedronObject extends Base { await syncData(this.sdk, this.options.id) } - _addLink() { - if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) { - this.options.attribute.link.content.push({ - name: '链接', - url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '' - this.attributeLink = this.options.attribute.link.content - } - else { - this.Dialog.clickAddLink && this.Dialog.clickAddLink() - } - } - - addAttributeLink(link) { - this.options.attribute.link.content.push({ - name: '链接', - url: link - }) - this.attributeLink = this.options.attribute.link.content - } - - _addRr() { - if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '' - this.attributeVr = this.options.attribute.vr.content - } - else { - this.Dialog.clickAddVr && this.Dialog.clickAddVr() - } - } - - addAttributeRr(vr) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: vr - }) - this.attributeVr = this.options.attribute.vr.content - } - - /** - * 打开富文本框 - */ - openRichTextEditor(e) { - richText.open(this.options.id, this.options.name, this.options.richTextContent) - richText.primaryCallBack = (content) => { - this.options.richTextContent = content - } - } - - static nodeEdit(that, cb = () => { }) { + nodeEdit(cb = () => { }) { // that.positionEditing = false // that.event && that.event.destroy() + let that = this that.positionEditing = false if (YJ.Measure.GetMeasureStatus()) { cb('上一次测量未结束') @@ -1486,7 +1079,8 @@ class PolyhedronObject extends Base { }) that.nodePoints.splice(selectPoint.index, 0, entity) that.options.positions.splice(selectPoint.index, 0, that.options.positions[selectPoint.index]) - that.options.areaByMeter = that.computeArea(that.options.positions); + that.areaByMeter = that.computeArea(that.options.positions); + that.areaChangeCallBack && that.areaChangeCallBack() let labelPositions = [[]] for (let i = 0; i < that.options.positions.length; i++) { labelPositions[0].push([that.options.positions[i].lng, that.options.positions[i].lat]) @@ -1497,22 +1091,6 @@ class PolyhedronObject extends Base { let centroid = turf.centroid(polygon); that.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], that.options.height + that.options.extrudedHeight] } - switch (that.options['area-unit']) { - case '平方米': - that.area = that.options.areaByMeter - break; - case '平方千米': - that.area = Number((that.options.areaByMeter / 1000000).toFixed(8)) - break; - case '亩': - that.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4)) - break; - case '公顷': - that.area = Number((that.options.areaByMeter / 10000).toFixed(6)) - break; - default: - that.area = that.options.areaByMeter - } } else { var pick = that.sdk.viewer.scene.pick(movement.position); @@ -1531,23 +1109,8 @@ class PolyhedronObject extends Base { if(added) { that.options.positions.splice(selectPoint.index, 1) } - that.options.areaByMeter = that.computeArea(that.options.positions); - switch (that.options['area-unit']) { - case '平方米': - that.area = that.options.areaByMeter - break; - case '平方千米': - that.area = Number((that.options.areaByMeter / 1000000).toFixed(8)) - break; - case '亩': - that.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4)) - break; - case '公顷': - that.area = Number((that.options.areaByMeter / 10000).toFixed(6)) - break; - default: - that.area = that.options.areaByMeter - } + that.areaByMeter = that.computeArea(that.options.positions); + that.areaChangeCallBack && that.areaChangeCallBack() let positions = that.options.positions let fromDegreesArray = [] for (let i = 0; i < positions.length; i++) { diff --git a/src/Obj/Base/PolylineObject/index.js b/src/Obj/Base/PolylineObject/index.js index 9048a60..e0ff300 100644 --- a/src/Obj/Base/PolylineObject/index.js +++ b/src/Obj/Base/PolylineObject/index.js @@ -145,6 +145,8 @@ class PolylineObject extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + this.operate = {} this.nodePoints = [] diff --git a/src/Obj/Base/RadarScan/index.js b/src/Obj/Base/RadarScan/index.js index 2becb50..520e691 100644 --- a/src/Obj/Base/RadarScan/index.js +++ b/src/Obj/Base/RadarScan/index.js @@ -14,6 +14,7 @@ import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/S import { setActiveViewer, closeRotateAround, closeViewFollow} from '../../../Global/global' class RadarScan extends Base { + #_positionEditingCallback = null /** * @constructor * @description 雷达扫描 @@ -23,7 +24,7 @@ class RadarScan extends Base { * @param options.show=true {boolean} 显示/隐藏 * @param options.lng {number} 经度 * @param options.lat {number} 维度 - * @param options.color=#FFEB3B {string} 颜色 + * @param options.color=#ff0000 {string} 颜色 * @param options.radius=10 {number} 半径 * @param options.speed=20 {number} 速度 * @param options.label {object} 标签对象 @@ -63,7 +64,7 @@ class RadarScan extends Base { super(sdk, options); this.options.lng = options.lng this.options.lat = options.lat - this.options.color = options.color || '#FFEB3B' + this.options.color = options.color || '#ff0000' this.options.radius = options.radius || 10 if(this.options.radius > 999999) { this.options.radius = 999999 @@ -71,13 +72,11 @@ class RadarScan extends Base { this.options.speed = (options.speed || options.speed === 0) ? options.speed : 20 this.options.show = (options.show || options.show === false) ? options.show : true this.event = new MouseEvent(this.sdk) - this.options.positionEditin = false + this.operate = {} options.label = options.label || {} this._elms = {}; this.options.label = { - text: this.options.name, show: options.label.show || false, - position: options.label.position, fontSize: (options.label.fontSize || options.label.fontSize === 0) ? options.label.fontSize : 20, fontFamily: options.label.fontFamily ? options.label.fontFamily : 0, color: options.label.color || '#ffffff', @@ -89,20 +88,11 @@ class RadarScan extends Base { near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, } - this.options.instruct = options.instruct || '' - this.options.operatingPoint = options.operatingPoint || '' this.options.attribute = options.attribute || {} - this.options.attribute.vr = this.options.attribute.vr || {} - this.options.attribute.vr.content = this.options.attribute.vr.content || [] this.options.attribute.link = this.options.attribute.link || {} this.options.attribute.link.content = this.options.attribute.link.content || [] - this.options.attribute.camera = this.options.attribute.camera || {} - this.options.attribute.camera = this.options.attribute.camera.content || [] - this.options.attribute.ISC = this.options.attribute.ISC || {} - this.options.attribute.ISC.content = this.options.attribute.ISC.content || [] - this.options.attribute.goods = this.options.attribute.goods || {} - this.options.attribute.goods.content = this.options.attribute.goods.content || [] - this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this.Dialog = _Dialog this._EventBinding = new EventBinding() // if(this.sdk.viewer.scene.mode === 2) { @@ -180,9 +170,10 @@ class RadarScan extends Base { static async createLabel(that) { let height = await that.getClampToHeight({ lng: that.options.lng, lat: that.options.lat }) - if (!that.options.label.position) { - that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } - } + // if (!that.options.label.position) { + // that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } + // } + that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } // 标签 that.label = new LabelObject(that.sdk, { id: that.options.id, @@ -212,7 +203,7 @@ class RadarScan extends Base { // 每一帧刷新时调用 that.viewer.clock.onTick.addEventListener(() => { let tempTime = new Date().getTime() - let everyTime = that.options.duration ? 360 / that.options.duration : 0 + let everyTime = 0 let speed = (tempTime - _time) * everyTime _time = tempTime heading += speed; @@ -314,7 +305,7 @@ class RadarScan extends Base { if (YJ.Measure.GetMeasureStatus() || !this.sdk || !this.sdk.viewer || !this.entity) { return } - this.options.positionEditing = status + this.operate.positionEditing = status if (status === true) { this.tip && this.tip.destroy() this.tip = new MouseTip('点击鼠标左键确认,右键取消', this.sdk) @@ -343,6 +334,10 @@ class RadarScan extends Base { this.event.mouse_right(() => { }) this.event.gesture_pinck_start(() => { }) this.event.gesture_pinck_end(() => { }) + if (this.#_positionEditingCallback) { + this.#_positionEditingCallback() + this.#_positionEditingCallback = null + } this.lastOptions = undefined this.positionEditing = false }) @@ -398,7 +393,12 @@ class RadarScan extends Base { } get positionEditing() { - return this.options.positionEditing + return this.operate.positionEditing + } + + openPositionEditing(cd) { + this.positionEditing = true + this.#_positionEditingCallback = cd } get lng() { @@ -699,348 +699,6 @@ class RadarScan extends Base { } } - get instruct() { - return this.options.instruct - } - set instruct(v) { - this.options.instruct = v - this._elms.instruct && this._elms.instruct.forEach((item) => { - item.value = v - }) - } - - get operatingPoint() { - return this.options.operatingPoint - } - set operatingPoint(v) { - this.options.operatingPoint = v - this._elms.operatingPoint && this._elms.operatingPoint.forEach((item) => { - item.value = v - }) - } - - get attributeType() { - return this.options.attributeType - } - - set attributeType(v) { - this.options.attributeType = v - this._elms.attributeType && this._elms.attributeType.forEach((item) => { - item.value = v - }) - let attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content') - for (let i = 0; i < attributeContent.length; i++) { - if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) { - attributeContent[i].style.display = 'block'; - } - else { - attributeContent[i].style.display = 'none'; - } - } - } - - get attributeLink() { - return this.options.attribute.link.content - } - - set attributeLink(v) { - this.options.attribute.link.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.link.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.link.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.link.content[i].name + `
-
` + this.options.attribute.link.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - linkEdit: async (index) => { - this.attributeLink = await this.options.attribute.link.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] || !btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - linkDelete: (i) => { - this.options.attribute.link.content.splice(i, 1) - this.attributeLink = this.options.attribute.link.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if(name && url) { - this.options.attribute.link.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeLink = this.options.attribute.link.content - }, - cancelEdit: () => { - this.attributeLink = this.options.attribute.link.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - - - - - } - - get attributeCamera() { - return this.options.attribute.camera.content - } - - set attributeCamera(v) { - this.options.attribute.camera.content = v - } - - get attributeISC() { - return this.options.attribute.ISC.content - } - - set attributeISC(v) { - this.options.attribute.ISC.content = v - } - - get attributeVr() { - return this.options.attribute.vr.content - } - - set attributeVr(v) { - this.options.attribute.vr.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.vr.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.vr.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.vr.content[i].name + `
-
` + this.options.attribute.vr.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - vrEdit: async (index) => { - this.attributeVr = await this.options.attribute.vr.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - vrDelete: (i) => { - this.options.attribute.vr.content.splice(i, 1) - this.attributeVr = this.options.attribute.vr.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if(name && url) { - this.options.attribute.vr.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeVr = this.options.attribute.vr.content - }, - cancelEdit: () => { - this.attributeVr = this.options.attribute.vr.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - } - - get attributeGoods() { - return this.options.attribute.goods.content - } - - set attributeGoods(v) { - this.options.attribute.goods.content = v - } - async flyTo(options = {}) { setActiveViewer(0) closeRotateAround(this.sdk) @@ -1111,6 +769,7 @@ class RadarScan extends Base { // 编辑框 async edit(state) { + return let _this = this this.originalOptions = this.deepCopyObj(this.options) @@ -1161,9 +820,6 @@ class RadarScan extends Base { let contentElm = document.createElement('div'); contentElm.innerHTML = html(this) this._DialogObject.contentAppChild(contentElm) - this.attributeType = this.options.attributeType - this.attributeCamera = this.options.attribute.camera.content - this.attributeISC = this.options.attribute.ISC.content // 创建标签页 let tabsElm = new cy_tabs('radar-scan-edit-tabs', undefined, this.sdk) @@ -1393,7 +1049,6 @@ class RadarScan extends Base { this.lat = this.originalOptions.lat this.color = this.originalOptions.color this.radius = this.originalOptions.radius - this.duration = this.originalOptions.duration this.labelShow = this.originalOptions.label.show this.labelColor = this.originalOptions.label.color this.labelFontSize = this.originalOptions.label.fontSize @@ -1406,15 +1061,6 @@ class RadarScan extends Base { this.labelLineColor = this.originalOptions.label.lineColor this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0] this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1] - this.instruct = this.originalOptions.instruct - this.operatingPoint = this.originalOptions.operatingPoint - this.attributeLink = this.options.attribute.link.content - this.attributeVr = this.options.attribute.vr.content - this.attributeCamera = this.options.attribute.camera.content - this.attributeGoods = this.options.attribute.goods.content - this.attributeISC = this.options.attribute.ISC.content - this.cameraSelect && this.cameraSelect() - this.goodsSelect && this.goodsSelect() } async remove() { @@ -1433,16 +1079,6 @@ class RadarScan extends Base { await syncData(this.sdk, this.options.id) } - instructSubmit() { - this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct) - this.originalOptions.instruct = this.instruct - } - - operatingPointSubmit() { - this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint) - this.originalOptions.operatingPoint = this.operatingPoint - } - changeMaterial() { // 提取颜色透明度 function extractRGBA(rgbaString) { @@ -1475,61 +1111,6 @@ class RadarScan extends Base { })) } - _addLink() { - // document.getElementsByClassName - if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) { - this.options.attribute.link.content.push({ - name: '链接', - url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '' - this.attributeLink = this.options.attribute.link.content - } - else { - this.Dialog.clickAddLink && this.Dialog.clickAddLink() - } - } - - addAttributeLink(link) { - this.options.attribute.link.content.push({ - name: '链接', - url: link - }) - this.attributeLink = this.options.attribute.link.content - } - - _addRr() { - if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '' - this.attributeVr = this.options.attribute.vr.content - } - else { - this.Dialog.clickAddVr && this.Dialog.clickAddVr() - } - } - - addAttributeRr(vr) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: vr - }) - this.attributeVr = this.options.attribute.vr.content - } - - /** - * 打开富文本框 - */ - openRichTextEditor(e) { - richText.open(this.options.id, this.options.name, this.options.richTextContent) - richText.primaryCallBack = (content) => { - this.options.richTextContent = content - } - } - setDIV(options = { domid: "", x: 10, y: 10 }) { options.x = (options.x || options.x === 0) ? options.x : 10 options.y = (options.y || options.y === 0) ? options.y : 10 diff --git a/src/Obj/Base/RadarScanStereoscopic/index.js b/src/Obj/Base/RadarScanStereoscopic/index.js index e257003..958b444 100644 --- a/src/Obj/Base/RadarScanStereoscopic/index.js +++ b/src/Obj/Base/RadarScanStereoscopic/index.js @@ -77,12 +77,9 @@ class RadarScanStereoscopic extends Base { } this.options.duration = options.duration || 2000 this.event = new MouseEvent(this.sdk) - this.options.positionEditin = false options.label = options.label || {} this.options.label = { - text: this.options.name, show: options.label.show || false, - position: options.label.position, fontSize: (options.label.fontSize || options.label.fontSize === 0) ? options.label.fontSize : 20, fontFamily: options.label.fontFamily ? options.label.fontFamily : 0, color: options.label.color || '#ffffff', @@ -94,20 +91,11 @@ class RadarScanStereoscopic extends Base { near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, } - this.options.instruct = options.instruct || "" - this.options.operatingPoint = options.operatingPoint || "" this.options.attribute = options.attribute || {} - this.options.attribute.vr = this.options.attribute.vr || {} - this.options.attribute.vr.content = this.options.attribute.vr.content || [] this.options.attribute.link = this.options.attribute.link || {} this.options.attribute.link.content = this.options.attribute.link.content || [] - this.options.attribute.camera = this.options.attribute.camera || {} - this.options.attribute.camera = this.options.attribute.camera.content || [] - this.options.attribute.ISC = this.options.attribute.ISC || {} - this.options.attribute.ISC.content = this.options.attribute.ISC.content || [] - this.options.attribute.goods = this.options.attribute.goods || {} - this.options.attribute.goods.content = this.options.attribute.goods.content || [] - this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this._elms = {}; this.Dialog = _Dialog this._EventBinding = new EventBinding() @@ -235,9 +223,7 @@ class RadarScanStereoscopic extends Base { let objectsToExclude = [...that.sdk.viewer.entities.values] height = await that.getClampToHeight({ lng: that.options.lng, lat: that.options.lat }, objectsToExclude) } - if (!that.options.label.position) { - that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } - } + that.options.label.position = { lng: that.options.lng, lat: that.options.lat, alt: height } // 标签 that.label = new LabelObject(that.sdk, { id: that.options.id, @@ -276,6 +262,9 @@ class RadarScanStereoscopic extends Base { this.lng = params.position.lng this.lat = params.position.lat this.alt = params.position.alt + if(this._positionEditingCallback) { + this._positionEditingCallback() + } } } else { @@ -283,6 +272,7 @@ class RadarScanStereoscopic extends Base { this.picking = true }, 500); this.ControllerObject.destroy() + this._positionEditingCallback = null } // this.options.positionEditing = status // if (status === true) { @@ -322,6 +312,16 @@ class RadarScanStereoscopic extends Base { return false } + openPositionEditing(cd) { + this.positionEditing = true + this._positionEditingCallback = cd + } + + closePositionEditing() { + this.positionEditing = false + this._positionEditingCallback = null + } + get lng() { return this.options.lng } @@ -660,346 +660,9 @@ class RadarScanStereoscopic extends Base { } } - get instruct() { - return this.options.instruct - } - set instruct(v) { - this.options.instruct = v - this._elms.instruct && this._elms.instruct.forEach((item) => { - item.value = v - }) - } - - get operatingPoint() { - return this.options.operatingPoint - } - set operatingPoint(v) { - this.options.operatingPoint = v - this._elms.operatingPoint && this._elms.operatingPoint.forEach((item) => { - item.value = v - }) - } - - get attributeType() { - return this.options.attributeType - } - - set attributeType(v) { - this.options.attributeType = v - this._elms.attributeType && this._elms.attributeType.forEach((item) => { - item.value = v - }) - let attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content') - for (let i = 0; i < attributeContent.length; i++) { - if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) { - attributeContent[i].style.display = 'block'; - } - else { - attributeContent[i].style.display = 'none'; - } - } - } - - get attributeLink() { - return this.options.attribute.link.content - } - - set attributeLink(v) { - this.options.attribute.link.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.link.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.link.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.link.content[i].name + `
-
` + this.options.attribute.link.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - linkEdit: async (index) => { - this.attributeLink = await this.options.attribute.link.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] || !btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - linkDelete: (i) => { - this.options.attribute.link.content.splice(i, 1) - this.attributeLink = this.options.attribute.link.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if (name && url) { - this.options.attribute.link.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeLink = this.options.attribute.link.content - }, - cancelEdit: () => { - this.attributeLink = this.options.attribute.link.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - } - - get attributeCamera() { - return this.options.attribute.camera.content - } - - set attributeCamera(v) { - this.options.attribute.camera.content = v - } - - get attributeISC() { - return this.options.attribute.ISC.content - } - - set attributeISC(v) { - this.options.attribute.ISC.content = v - } - - get attributeVr() { - return this.options.attribute.vr.content - } - - set attributeVr(v) { - this.options.attribute.vr.content = v - if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) { - return - } - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - tableContent.innerHTML = '' - if (this.options.attribute.vr.content.length > 0) { - table.getElementsByClassName('table-empty')[0].style.display = 'none' - } - else { - table.getElementsByClassName('table-empty')[0].style.display = 'flex' - } - for (let i = 0; i < this.options.attribute.vr.content.length; i++) { - let tr = ` -
-
` + this.options.attribute.vr.content[i].name + `
-
` + this.options.attribute.vr.content[i].url + `
-
- - -
-
` - let trElm = document.createRange().createContextualFragment(tr) - tableContent.appendChild(trElm) - } - let item = tableContent.getElementsByClassName('tr') - let fun = { - vrEdit: async (index) => { - this.attributeVr = await this.options.attribute.vr.content - let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0] - let tableContent = table.getElementsByClassName('table-body')[0] - let item = tableContent.getElementsByClassName('tr') - for (let i = 0; i < item.length; i++) { - if (index === i) { - let height = item[i].offsetHeight - let html = ` -
- -
-
- -
-
- - -
` - item[i].innerHTML = html - let textareaElm = item[i].getElementsByClassName('link-edit')[0] - textareaElm.style.height = (height - 10) + 'px' - let td = item[i].getElementsByClassName('td') - td[0].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].name - td[1].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].url - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] || !btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - break - } - } - }, - vrDelete: (i) => { - this.options.attribute.vr.content.splice(i, 1) - this.attributeVr = this.options.attribute.vr.content - }, - - confirmEdit: (value, i) => { - let name = value.name && value.name.replace(/\s/g, "") - let url = value.url && value.url.replace(/\s/g, "") - if (name && url) { - this.options.attribute.vr.content[i] = value - } - else { - window.ELEMENT && window.ELEMENT.Message({ - message: '名称或链接不能为空!', - type: 'warning', - duration: 1500 - }); - } - this.attributeVr = this.options.attribute.vr.content - }, - cancelEdit: () => { - this.attributeVr = this.options.attribute.vr.content - }, - fileSelect: (value, i) => { - let fileElm = item[i].getElementsByClassName('file-select')[0] - fileElm.click() - fileElm.removeEventListener('change', fileSelect) - fileElm.addEventListener('change', fileSelect) - } - } - let fileSelect = (event) => { - if (event.target.value) { - let td = item[event.target.getAttribute('index')].getElementsByClassName('td') - td[1].getElementsByClassName('input')[0].value = event.target.value - event.target.value = null - } - } - for (let i = 0; i < item.length; i++) { - let btn = item[i].getElementsByTagName('button') - for (let n = 0; n < btn.length; n++) { - if (!btn[n] ||!btn[n].attributes) { - continue - } - for (let m of btn[n].attributes) { - if (m.name === '@click') { - btn[n].addEventListener('click', (e) => { - if (typeof (fun[m.value]) === 'function') { - fun[m.value](i) - } - }); - btn[n].attributes.removeNamedItem(m.name) - break - } - } - } - } - } - - get attributeGoods() { - return this.options.attribute.goods.content - } - - set attributeGoods(v) { - this.options.attribute.goods.content = v - } - // 编辑框 async edit(state) { + return let _this = this this.originalOptions = this.deepCopyObj(this.options) @@ -1053,9 +716,6 @@ class RadarScanStereoscopic extends Base { let contentElm = document.createElement('div'); contentElm.innerHTML = html(this) this._DialogObject.contentAppChild(contentElm) - this.attributeType = this.options.attributeType - this.attributeCamera = this.options.attribute.camera.content - this.attributeISC = this.options.attribute.ISC.content // 创建标签页 let tabsElm = new cy_tabs('radar-scan-edit-tabs', undefined, this.sdk) @@ -1188,11 +848,6 @@ class RadarScanStereoscopic extends Base { }) setTimeout(() => { - this.attributeLink = this.options.attribute.link.content - this.attributeVr = this.options.attribute.vr.content - this.ISCSelect && this.ISCSelect() - this.goodsSelect && this.goodsSelect() - this.cameraSelect && this.cameraSelect() let tagData = this.attributeSelect let attributeElm = this._DialogObject._element.content.getElementsByClassName('attribute-select-box')[0] if (attributeElm) { @@ -1386,16 +1041,7 @@ class RadarScanStereoscopic extends Base { this.labelLineColor = this.originalOptions.label.lineColor this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0] this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1] - this.instruct = this.originalOptions.instruct - this.operatingPoint = this.originalOptions.operatingPoint - this.attributeLink = this.options.attribute.link.content - this.attributeVr = this.options.attribute.vr.content - this.attributeCamera = this.options.attribute.camera.content - this.attributeGoods = this.options.attribute.goods.content - this.attributeISC = this.options.attribute.ISC.content this.positionEditing = false - this.cameraSelect && this.cameraSelect() - this.goodsSelect && this.goodsSelect() } async remove() { @@ -1410,70 +1056,6 @@ class RadarScanStereoscopic extends Base { await syncData(this.sdk, this.options.id) } - instructSubmit() { - this.Dialog.instructSubmit && this.Dialog.instructSubmit(this.options.id, this.options.label.text, this.instruct) - this.originalOptions.instruct = this.instruct - } - - operatingPointSubmit() { - this.Dialog.operatingPointSubmit && this.Dialog.operatingPointSubmit(this.options.id, this.options.label.text, this.operatingPoint) - this.originalOptions.operatingPoint = this.operatingPoint - } - - _addLink() { - if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) { - this.options.attribute.link.content.push({ - name: '链接', - url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = '' - this.attributeLink = this.options.attribute.link.content - } - else { - this.Dialog.clickAddLink && this.Dialog.clickAddLink() - } - } - - addAttributeLink(link) { - this.options.attribute.link.content.push({ - name: '链接', - url: link - }) - this.attributeLink = this.options.attribute.link.content - } - - _addRr() { - if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value - }) - this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = '' - this.attributeVr = this.options.attribute.vr.content - } - else { - this.Dialog.clickAddVr && this.Dialog.clickAddVr() - } - } - - addAttributeRr(vr) { - this.options.attribute.vr.content.push({ - name: '全景图' , - url: vr - }) - this.attributeVr = this.options.attribute.vr.content - } - - /** - * 打开富文本框 - */ - openRichTextEditor(e) { - richText.open(this.options.id, this.options.name, this.options.richTextContent) - richText.primaryCallBack = (content) => { - this.options.richTextContent = content - } - } - setDIV(options = { domid: "", x: 10, y: 10 }) { options.x = (options.x || options.x === 0) ? options.x : 10 options.y = (options.y || options.y === 0) ? options.y : 10 diff --git a/src/Obj/Base/SectorObject/index.js b/src/Obj/Base/SectorObject/index.js index 2a26fb3..b07c5d9 100644 --- a/src/Obj/Base/SectorObject/index.js +++ b/src/Obj/Base/SectorObject/index.js @@ -110,6 +110,8 @@ class SectorObject extends Base { this.options.attribute.goods = this.options.attribute.goods || {} this.options.attribute.goods.content = this.options.attribute.goods.content || [] this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this.event = new MouseEvent(this.sdk) this.nodePoints = [] this.operate = {} diff --git a/src/Obj/Base/StraightArrowObject/index.js b/src/Obj/Base/StraightArrowObject/index.js index acdc1b9..a4f03ee 100644 --- a/src/Obj/Base/StraightArrowObject/index.js +++ b/src/Obj/Base/StraightArrowObject/index.js @@ -118,6 +118,8 @@ class StraightArrowObject extends Base { this.options.attribute.goods = this.options.attribute.goods || {} this.options.attribute.goods.content = this.options.attribute.goods.content || [] this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this.nodePoints = [] if (!this.options.positions || this.options.positions.length < 2) { this._error = '直线箭头需要两个坐标!' diff --git a/src/Obj/Base/WallRealStereoscopic/index.js b/src/Obj/Base/WallRealStereoscopic/index.js index b4cff3e..1834f4d 100644 --- a/src/Obj/Base/WallRealStereoscopic/index.js +++ b/src/Obj/Base/WallRealStereoscopic/index.js @@ -114,6 +114,8 @@ class WallRealStereoscopic extends Base { this.options.attribute.goods = this.options.attribute.goods || {} this.options.attribute.goods.content = this.options.attribute.goods.content || [] this.options.attributeType = options.attributeType || 'richText' + + this.options.richTextContent = options.richTextContent || '' this.Dialog = _Dialog if (!this.options.positions || this.options.positions.length < 2) { diff --git a/src/Obj/Base/WallStereoscopic/index.js b/src/Obj/Base/WallStereoscopic/index.js index 5da68b7..dcdbe9c 100644 --- a/src/Obj/Base/WallStereoscopic/index.js +++ b/src/Obj/Base/WallStereoscopic/index.js @@ -99,6 +99,8 @@ class WallStereoscopic extends Base { delete this.options.attribute.vr delete this.options.attribute.goods + this.options.richTextContent = options.richTextContent || '' + this.Dialog = _Dialog this._elms = {}; if (!this.options.positions || this.options.positions.length < 2) {