This commit is contained in:
zh
2025-09-23 10:18:54 +08:00
parent 1afc691ec2
commit b29753453a
21 changed files with 139 additions and 1369 deletions

View File

@ -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

View File

@ -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 = '箭头面最少需要三个坐标!'

View File

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

View File

@ -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() { }
}

View File

@ -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

View File

@ -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)
}
}

View File

@ -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
}

View File

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

View File

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

View File

@ -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 = []

View File

@ -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 = {}

View File

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

View File

@ -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 = '多边形最少需要三个坐标!'

View File

@ -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 = `
<div class="tr">
<div class="td">` + this.options.attribute.link.content[i].name + `</div>
<div class="td">` + this.options.attribute.link.content[i].url + `</div>
<div class="td">
<button @click="linkEdit">编辑</button>
<button @click="linkDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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 = `
<div class="tr">
<div class="td">` + this.options.attribute.vr.content[i].name + `</div>
<div class="td">` + this.options.attribute.vr.content[i].url + `</div>
<div class="td">
<button @click="vrEdit">编辑</button>
<button @click="vrDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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++) {

View File

@ -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 = []

View File

@ -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 = `
<div class="tr">
<div class="td">` + this.options.attribute.link.content[i].name + `</div>
<div class="td">` + this.options.attribute.link.content[i].url + `</div>
<div class="td">
<button @click="linkEdit">编辑</button>
<button @click="linkDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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 = `
<div class="tr">
<div class="td">` + this.options.attribute.vr.content[i].name + `</div>
<div class="td">` + this.options.attribute.vr.content[i].url + `</div>
<div class="td">
<button @click="vrEdit">编辑</button>
<button @click="vrDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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

View File

@ -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 = `
<div class="tr">
<div class="td">` + this.options.attribute.link.content[i].name + `</div>
<div class="td">` + this.options.attribute.link.content[i].url + `</div>
<div class="td">
<button @click="linkEdit">编辑</button>
<button @click="linkDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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 = `
<div class="tr">
<div class="td">` + this.options.attribute.vr.content[i].name + `</div>
<div class="td">` + this.options.attribute.vr.content[i].url + `</div>
<div class="td">
<button @click="vrEdit">编辑</button>
<button @click="vrDelete">删除</button>
</div>
</div>`
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 = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
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

View File

@ -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 = {}

View File

@ -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 = '直线箭头需要两个坐标!'

View File

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

View File

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