/** * @description 飞行漫游 */ import Dialog from '../../BaseDialog'; import { html } from "./_element"; import Tools from "../../Tools"; import { closeRotateAround, closeViewFollow} from '../../Global/global' let _DialogObject = null let clickHandler let repeat = 0 let currentRepeat = 0 const open = async (sdk, options = {}, _Dialog = {}) => { let name = options.name || '漫游路径' options.points || (options.points = []) if(options.repeat) { repeat = Number(options.repeat) } let viewer = sdk.viewer let tools = new Tools(sdk) let active = 0 if (_DialogObject && _DialogObject.close) { _DialogObject.close() _DialogObject = null } _DialogObject = await new Dialog(viewer._container, { title: '飞行漫游', left: '180px', top: '100px', closeCallBack: () => { cease({ viewer }) }, }) await _DialogObject.init() let contentElm = document.createElement('div'); contentElm.className = 'fly-roam' contentElm.innerHTML = html() _DialogObject.contentAppChild(contentElm) let all_elm = contentElm.getElementsByTagName("*") // EventBinding(all_elm) let tableBody = contentElm.getElementsByClassName('table-body')[0]; let tableEmpty = contentElm.getElementsByClassName('table-empty')[0] let handler = { set: function (target, prop, value) { target[prop] = value; if (target.length > 0) { tableEmpty.style.display = 'none' } else { tableEmpty.style.display = 'flex' } return true; }, }; let i = 0 let points = new Proxy([], handler); for (i = 0; i < options.points.length; i++) { points.push(options.points[i]) addTrElm(options.points[i]) } // let nameImputBoxElm = contentElm.getElementsByClassName('input-box')[0] // check(nameImputBoxElm, { validator: 'notEmpty', message: '名称不能为空!', trigger: 'input' }) let nameElm = contentElm.querySelector("input[name='name']") nameElm.value = name nameElm.addEventListener('input', () => { name = nameElm.value }) let addListBtn = document.createElement('button'); addListBtn.innerHTML = '保存' addListBtn.addEventListener('click', () => { if (!name) { name = '漫游路径' nameElm.value = name } let newPoints = [] points.map((item) => { newPoints.push(item) }) _Dialog.clickSavePath && _Dialog.clickSavePath( { name: name, points: newPoints, repeat: repeat+'' } ) }) _DialogObject.footAppChild(addListBtn) let endBtn = contentElm.getElementsByClassName('cease')[0] endBtn.addEventListener('click', () => { viewer.camera.cancelFlight() }) let flyBtn = contentElm.getElementsByClassName('afreshPlay')[0] flyBtn.addEventListener('click', () => { if (points.length > 0) { flyTo(sdk, points, 0) } }) let addBtn = contentElm.getElementsByClassName('add-point')[0] addBtn.addEventListener('click', () => { let position = tools.cartesian3Towgs84(viewer.camera.position, viewer) let time = 0 let data = { duration: time, position: position, orientation: { heading: viewer.camera.heading, pitch: viewer.camera.pitch, roll: viewer.camera.roll } } points.splice(active, 0, data) addTrElm(data) i++ }) let modifyBtn = contentElm.getElementsByClassName('modify-point')[0] modifyBtn.addEventListener('click', () => { if (!active) { return } let position = tools.cartesian3Towgs84(viewer.camera.position, viewer) points[active - 1].position = position points[active - 1].orientation = { heading: viewer.camera.heading, pitch: viewer.camera.pitch, roll: viewer.camera.roll } tools.message({text: '操作成功'}) }) let totalTimeElm = contentElm.querySelector("input[name='totalTime']") let isTotalTimeElm = contentElm.querySelector("input[name='isTotalTime']") let repeatElm = contentElm.querySelector("input[name='repeat']") isTotalTimeElm.addEventListener('change', () => { let trList = tableBody.getElementsByClassName('tr') if (isTotalTimeElm.checked && trList.length > 0) { let time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2)) for (let i = 0; i < trList.length - 1; i++) { points[i].duration = time trList[i].querySelector("input[name='time']").value = time } trList[trList.length - 1].querySelector("input[name='time']").value = 0 } }) totalTimeElm.addEventListener('blur', () => { let trList = tableBody.getElementsByClassName('tr') totalTimeElm.value = Number(totalTimeElm.value) if (totalTimeElm.value < 0) { totalTimeElm.value = 0 } if (isTotalTimeElm.checked && trList.length > 0) { let time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2)) for (let i = 0; i < trList.length - 1; i++) { points[i].duration = time trList[i].querySelector("input[name='time']").value = time } trList[trList.length - 1].querySelector("input[name='time']").value = 0 } }) repeatElm.checked = (repeat === Infinity ? true : false) repeatElm.addEventListener('change', () => { if (repeatElm.checked) { repeat = Infinity } else { repeat = 0 } currentRepeat = repeat _Dialog.changeRepeatStateCallBack && _Dialog.changeRepeatStateCallBack(repeatElm.checked) }) // Object.defineProperty(options, 'points', { // get() { // return e_allArea.value // }, // set(value) { // e_allArea.value = value // } // }) function addTrElm(data) { let trList = tableBody.getElementsByClassName('tr') if (trList.length > 0) { trList[trList.length - 1].querySelector("input[name='time']").disabled = undefined } let tr_active = tableBody.getElementsByClassName('tr active')[0] tr_active && (tr_active.className = 'tr') let tr = document.createElement('div'); tr.className = 'tr active' tr.innerHTML = `