Compare commits
	
		
			13 Commits
		
	
	
		
			zh
			...
			579b76dc0e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 579b76dc0e | |||
| 399725ed06 | |||
| 574538e7bb | |||
| 45f2d6f4eb | |||
| ff4f823a27 | |||
| c6aa99792f | |||
| 16942a2e63 | |||
| dd003aa00d | |||
| ea94efb65f | |||
| fa3325580c | |||
| 0cf59afffd | |||
| 2b6edf70b9 | |||
| 484fe70e16 | 
| @ -278,7 +278,7 @@ async function init(sdk) { | ||||
|   sdk.viewer.scene.preRender.addEventListener(syncViewer, syncObject) | ||||
|  | ||||
|   // sdk.viewer.imageryLayers.layerAdded.addEventListener(syncImageryLayerAdded); | ||||
|   // sdk.viewer.imageryLayers.layerMoved.addEventListener(syncImageryLayerMoved); | ||||
|   sdk.viewer.imageryLayers.layerMoved.addEventListener(syncImageryLayerMoved); | ||||
|   // sdk.viewer.imageryLayers.layerRemoved.addEventListener(syncImageryLayerRemoved); | ||||
|   // sdk.viewer.imageryLayers.layerShownOrHidden.addEventListener(syncImageryLayerShownOrHidden); | ||||
|  | ||||
| @ -711,6 +711,9 @@ async function setSplitDirection(v, id, isoff = false, entityId) { | ||||
|           status.P = true | ||||
|           status.D = true | ||||
|           options.show = true | ||||
|           if(thatP.type==='layer') { | ||||
|             options.layer_index = thatP.layer_index | ||||
|           } | ||||
|           target = await new thatP.constructor(sdkD, options) | ||||
|           if (thatP.onClick) { | ||||
|             target.onClick = thatP.onClick | ||||
| @ -794,6 +797,9 @@ async function setSplitDirection(v, id, isoff = false, entityId) { | ||||
|           status.P = false | ||||
|           status.D = true | ||||
|           options.show = true | ||||
|           if(thatP.type==='layer') { | ||||
|             options.layer_index = thatP.layer_index | ||||
|           } | ||||
|           target = await new thatP.constructor(sdkD, options) | ||||
|           if (thatP.onClick) { | ||||
|             target.onClick = thatP.onClick | ||||
| @ -1033,7 +1039,13 @@ function syncImageryLayerAdded(layer, index) { | ||||
|   sdkD.viewer.imageryLayers.addImageryProvider(layer.imageryProvider, index) | ||||
| } | ||||
| function syncImageryLayerMoved(layer, newindxe, oldindex) { | ||||
|   let layerD = sdkD.viewer.imageryLayers._layers[oldindex] | ||||
|   let layerD | ||||
|   for (let i = 0; i < sdkD.viewer.imageryLayers._layers.length; i++) { | ||||
|     if (sdkD.viewer.imageryLayers._layers[i]._id === layer._id) { | ||||
|       layerD = sdkD.viewer.imageryLayers._layers[i] | ||||
|       break | ||||
|     } | ||||
|   } | ||||
|   if (!layerD) { | ||||
|     return | ||||
|   } | ||||
| @ -1042,13 +1054,15 @@ function syncImageryLayerMoved(layer, newindxe, oldindex) { | ||||
|     sdkD.viewer.imageryLayers.lowerToBottom(layerD) | ||||
|   } | ||||
|   // 移到最高层 | ||||
|   else if (newindxe === sdk.viewer.imageryLayers._layers.length - 1) { | ||||
|   else if (newindxe === sdkD.viewer.imageryLayers._layers.length - 1) { | ||||
|     sdkD.viewer.imageryLayers.raiseToTop(layerD) | ||||
|   } | ||||
|   else { | ||||
|     if (newindxe < oldindex) { | ||||
|       if(newindxe<sdkD.viewer.imageryLayers._layers.length-1) { | ||||
|         sdkD.viewer.imageryLayers.lower(layerD) | ||||
|       } | ||||
|     } | ||||
|     else { | ||||
|       sdkD.viewer.imageryLayers.raise(layerD) | ||||
|     } | ||||
|  | ||||
							
								
								
									
										56
									
								
								src/Global/efflect/Sunshine/_element.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/Global/efflect/Sunshine/_element.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| function html() { | ||||
|   return ` | ||||
|     <span class="custom-divider"></span> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|                 <span class="label">播放倍数</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" min="0.01" max="999999" step="10" @model="speed"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label">阴影柔和度</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" min="0" max="1" step="0.1" @model="darkness"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|                 <span class="label">阴影优化</span> | ||||
|                 <input class="btn-switch" type="checkbox" @model="softShadow"> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label" style="flex: 0 0 56px;">日期选择</span> | ||||
|                 <input class="sunshine-date" type="text" placeholder="YYYY-MM-DD" @model="time"> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <span class="custom-divider"></span> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|               <div class="timeline-container"> | ||||
|                   <div class="timeline" id="timeline"> | ||||
|                       <div class="progress" id="progress"> | ||||
|                           <div class="handle" id="handle"></div> | ||||
|                           <div class="current-time" id="currentTime">00:00:00</div> | ||||
|                       </div> | ||||
|                   </div> | ||||
|                   <div class="time-marks"> | ||||
|                   </div> | ||||
|                   <button id="timePause">暂停</button> | ||||
|               </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <span class="custom-divider"></span> | ||||
|     ` | ||||
| } | ||||
|  | ||||
| export { html } | ||||
							
								
								
									
										92
									
								
								src/Global/efflect/Sunshine/eventBinding.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/Global/efflect/Sunshine/eventBinding.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | ||||
| class eventBinding { | ||||
|   constructor() { | ||||
|     this.element = {} | ||||
|   } | ||||
|   static event = {} | ||||
|  | ||||
|   getEvent(name) { | ||||
|     return eventBinding.event[name] | ||||
|   } | ||||
|  | ||||
|   getEventAll() { | ||||
|     return eventBinding.event | ||||
|   } | ||||
|  | ||||
|   setEvent(name, event) { | ||||
|     eventBinding.event[name] = event | ||||
|   } | ||||
|  | ||||
|   on(that, elements) { | ||||
|     for (let i = 0; i < elements.length; i++) { | ||||
|       let Event = [] | ||||
|       let isEvent = false | ||||
|       let removeName = [] | ||||
|       if (!elements[i] || !elements[i].attributes) { | ||||
|         continue; | ||||
|       } | ||||
|       for (let m of elements[i].attributes) { | ||||
|         switch (m.name) { | ||||
|           case '@model': { | ||||
|             isEvent = true | ||||
|             if (elements[i].type == 'checkbox') { | ||||
|               Event.push((e) => { that[m.value] = e.target.checked }) | ||||
|               elements[i].checked = that[m.value] | ||||
|             } | ||||
|             else { | ||||
|               Event.push((e) => { | ||||
|                 let value = e.target.value | ||||
|                 if (e.target.type == 'number') { | ||||
|                   value = Number(value) | ||||
|                 } | ||||
|                 that[m.value] = value | ||||
|               }) | ||||
|               if (elements[i].nodeName == 'IMG') { | ||||
|                 elements[i].src = that[m.value] | ||||
|               } | ||||
|               else { | ||||
|                 elements[i].value = that[m.value] | ||||
|               } | ||||
|             } | ||||
|             if (this.element[m.value]) { | ||||
|               this.element[m.value].push(elements[i]) | ||||
|             } | ||||
|             else { | ||||
|               this.element[m.value] = [elements[i]] | ||||
|             } | ||||
|             removeName.push(m.name) | ||||
|             break; | ||||
|           } | ||||
|           case '@click': { | ||||
|             elements[i].addEventListener('click', (e) => { | ||||
|               if (typeof (that.Dialog[m.value]) === 'function') { | ||||
|                 that.Dialog[m.value](e) | ||||
|               } | ||||
|             }); | ||||
|             removeName.push(m.name) | ||||
|             // elements[i].attributes.removeNamedItem(m.name) | ||||
|             break; | ||||
|           } | ||||
|         } | ||||
|         // elements[i].attributes[m] = undefined | ||||
|       } | ||||
|       for (let n = 0; n < removeName.length; n++) { | ||||
|         elements[i].attributes.removeNamedItem(removeName[n]) | ||||
|       } | ||||
|  | ||||
|       if (isEvent) { | ||||
|         let ventType = 'input' | ||||
|         if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') { | ||||
|           ventType = 'change' | ||||
|         } | ||||
|         elements[i].addEventListener(ventType, (e) => { | ||||
|           for (let t = 0; t < Event.length; t++) { | ||||
|             Event[t](e) | ||||
|           } | ||||
|         }); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const EventBinding = new eventBinding(); | ||||
| export default EventBinding; | ||||
							
								
								
									
										224
									
								
								src/Global/efflect/Sunshine/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								src/Global/efflect/Sunshine/index.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,224 @@ | ||||
| /** | ||||
|  * @description 水面 | ||||
|  */ | ||||
| import Dialog from '../../../Obj/Element/Dialog'; | ||||
| import { html } from "./_element"; | ||||
| import EventBinding from '../../../Obj/Element/Dialog/eventBinding'; | ||||
| import { syncData } from '../../MultiViewportMode' | ||||
| import Tools from '../../../Tools' | ||||
| import TimeLine from './TimeLine' | ||||
| import { setSplitDirection, syncSplitData, setActiveId } from '../../SplitScreen' | ||||
|  | ||||
| export default class Sunshine { | ||||
|   /** | ||||
|    * @constructor | ||||
|    * @param sdk | ||||
|    * @description 光照 | ||||
|    * @param options {object} 光照属性 | ||||
|    * @param options.time=当前时间 {string} 当前时间 | ||||
|    * @param options.speed=1000 {number} 速度倍速 | ||||
|    * @param options.darkness=0.3 {number} 阴影不透明度--越大越不透明 | ||||
|    * @param options.softShadow=false {boolean} 阴影优化--true/false} | ||||
|    * @param Dialog {object} 弹框对象 | ||||
|    * @param Dialog.confirmCallBack {function} 弹框确认时的回调 | ||||
|    * */ | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     this.viewer = sdk.viewer | ||||
|     this.options = { ...options } | ||||
|     this.sdk = { ...sdk } | ||||
|     this.options.time = options.time || new Date() | ||||
|     this.options.speed = options.speed || 1000 | ||||
|     this.options.darkness = options.darkness || 0.4 | ||||
|     this.options.softShadow = options.softShadow || true | ||||
|     this.options.show = options.show === true ? true : false | ||||
|     this.Dialog = _Dialog | ||||
|     this.timeLine | ||||
|     this._EventBinding = new EventBinding() | ||||
|     this._elms = {}; | ||||
|     Sunshine.start(this) | ||||
|   } | ||||
|  | ||||
|  | ||||
|   static start(that) { | ||||
|     that.viewer.scene.globe.enableLighting = true | ||||
|     that.viewer.shadows = true | ||||
|     that.viewer.scene.globe.enableLighting = true; | ||||
|  | ||||
|     that.viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY | ||||
|     that.viewer.shadowMap.darkness = 1.0 - that.options.darkness //阴影透明度--越大越透明 | ||||
|  | ||||
|     const now = new Date(); | ||||
|     now.setHours(0, 0, 0, 0); // 设置为当天0点 | ||||
|     that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(now); | ||||
|     that.viewer.clock.multiplier = that.options.speed; | ||||
|     that.viewer.shadowMap.softShadows = that.options.softShadow; | ||||
|  | ||||
|     that.edit(true) | ||||
|   } | ||||
|   get darkness() { | ||||
|     return this.options.darkness | ||||
|   } | ||||
|   set darkness(v) { | ||||
|     this.options.darkness = v | ||||
|     this.viewer.shadowMap.darkness = 1.0 - this.options.darkness | ||||
|   } | ||||
|  | ||||
|   get speed() { | ||||
|     return this.options.speed | ||||
|   } | ||||
|   set speed(v) { | ||||
|     this.options.speed = v | ||||
|     this.viewer.clock.multiplier = this.options.speed; | ||||
|     this.timeLine.setSpeed(v) | ||||
|   } | ||||
|   get softShadow() { | ||||
|     return this.options.softShadow | ||||
|   } | ||||
|   set softShadow(v) { | ||||
|     this.options.softShadow = v | ||||
|     this.viewer.shadowMap.softShadows = this.options.softShadow; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * @description 编辑框 | ||||
|    * @param state=false {boolean} 状态: true打开, false关闭 | ||||
|    */ | ||||
|   async edit(state = false) { | ||||
|     let tools = new Tools() | ||||
|     this.originalOptions = tools.deepCopyObj(this.options) | ||||
|  | ||||
|     // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog') | ||||
|     // for (let i = elms.length - 1; i >= 0; i--) { | ||||
|     //   this.sdk.viewer._container.removeChild(elms[i]) | ||||
|     // } | ||||
|  | ||||
|     if (this._DialogObject && this._DialogObject.close) { | ||||
|       this._DialogObject.close() | ||||
|       this._DialogObject = null | ||||
|     } | ||||
|  | ||||
|     if (state) { | ||||
|       this._DialogObject = await new Dialog(this.sdk, this.originalOptions, { | ||||
|         title: '光照属性', left: '180px', top: '100px', | ||||
|         confirmCallBack: (options) => { | ||||
|           this.originalOptions = tools.deepCopyObj(this.options) | ||||
|           this._DialogObject.close() | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) | ||||
|           syncData(this.sdk, this.options.id) | ||||
|           syncSplitData(this.sdk, this.options.id) | ||||
|         }, | ||||
|         resetCallBack: () => { | ||||
|           this.reset() | ||||
|           this.Dialog.resetCallBack && this.Dialog.resetCallBack() | ||||
|         }, | ||||
|         // removeCallBack: () => { | ||||
|         //   this.Dialog.removeCallBack && this.Dialog.removeCallBack() | ||||
|         // }, | ||||
|         closeCallBack: () => { | ||||
|           this.reset() | ||||
|           // this.entity.style = new Cesium.Cesium3DTileStyle({ | ||||
|           //   color: "color('rgba(255,255,255," + this.newData.transparency + ")')", | ||||
|           //   show: true, | ||||
|           // }); | ||||
|           this.Dialog.closeCallBack && this.Dialog.closeCallBack() | ||||
|         }, | ||||
|         showCallBack: (show) => { | ||||
|           this.show = show | ||||
|           this.Dialog.showCallBack && this.Dialog.showCallBack() | ||||
|         } | ||||
|       }, true) | ||||
|       this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface' | ||||
|       let contentElm = document.createElement('div'); | ||||
|       contentElm.innerHTML = html() | ||||
|       this._DialogObject.contentAppChild(contentElm) | ||||
|  | ||||
|       //时间轴 | ||||
|       let _that = this | ||||
|       this.timeLine = new TimeLine(this.sdk, this.options.speed) | ||||
|       // this.timeLine.setSpeed(1000) | ||||
|       this.timeLine.moveComplay(item => { | ||||
|         let timeData = _that.time + " " + item | ||||
|         _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); | ||||
|         _that.viewer.scene.requestRender(); | ||||
|  | ||||
|  | ||||
|       }) | ||||
|       let jeDateObject | ||||
|       let printDateElm = contentElm.getElementsByClassName('sunshine-date')[0] | ||||
|       let text | ||||
|  | ||||
|       jeDateObject = jeDate(printDateElm, { | ||||
|         format: "YYYY-MM-DD", | ||||
|         isinitVal: true, | ||||
|         isClear: false, | ||||
|         donefun: function (obj) { | ||||
|           this.time = obj.val | ||||
|  | ||||
|           const now = new Date(); | ||||
|           let timeData = now.setHours(0, 0, 0, 0); // 设置为当天0点 | ||||
|           _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); | ||||
|  | ||||
|           _that.timeLine.updateTime(timeData) | ||||
|         } | ||||
|       }); | ||||
|       if (this.time) { | ||||
|         jeDateObject.setValue(this.time) | ||||
|       } | ||||
|       else { | ||||
|         jeDateObject.nowBtn && jeDateObject.nowBtn() | ||||
|         this.time = jeDateObject.getValue() | ||||
|       } | ||||
|  | ||||
|       let all_elm = contentElm.getElementsByTagName("*") | ||||
|       this._EventBinding.on(this, all_elm) | ||||
|       this._elms = this._EventBinding.element | ||||
|       this._elms.color = [jeDateObject] | ||||
|     } else { | ||||
|       // if (this._element_style) { | ||||
|       //   document.getElementsByTagName('head')[0].removeChild(this._element_style) | ||||
|       //   this._element_style = null | ||||
|       // } | ||||
|       // if (this._DialogObject && this._DialogObject.remove) { | ||||
|       //   this._DialogObject.remove() | ||||
|       //   this._DialogObject = null | ||||
|       // } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   reset() { | ||||
|     if (!this.viewer.entities.getById(this.options.id)) { | ||||
|       return | ||||
|     } | ||||
|     this.time = this.originalOptions.time | ||||
|     this.speed = this.originalOptions.speed | ||||
|     this.darkness = this.originalOptions.darkness | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 飞到对应实体 | ||||
|    */ | ||||
|   async flyTo(options = {}) { | ||||
|   } | ||||
|   /** | ||||
|    * 删除 | ||||
|    */ | ||||
|   async remove() { | ||||
|  | ||||
|     this.viewer.scene.globe.enableLighting = false | ||||
|     this.viewer.shadows = false | ||||
|     this.viewer.clock.multiplier = 1.0 | ||||
|     this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date()); | ||||
|     this.entity = null | ||||
|     this.timeLine.clear() | ||||
|  | ||||
|     if (this._DialogObject && !this._DialogObject.isDestroy) { | ||||
|       this._DialogObject.close() | ||||
|       this._DialogObject = null | ||||
|     } | ||||
|     // await this.sdk.removeIncetance(this.options.id) | ||||
|     await syncData(this.sdk, this.options.id) | ||||
|   } | ||||
|  | ||||
|   flicker() { } | ||||
| } | ||||
|  | ||||
							
								
								
									
										133
									
								
								src/Global/efflect/Sunshine/timeLIne.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								src/Global/efflect/Sunshine/timeLIne.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,133 @@ | ||||
| export default class TimeLine { | ||||
|   constructor(sdk, speed) { | ||||
|     this.sdk = { ...sdk }; | ||||
|     this.progress = document.getElementById('progress'); | ||||
|     this.handle = document.getElementById('handle'); | ||||
|     this.timeline = document.getElementById('timeline'); | ||||
|     this.currentTime = document.getElementById('currentTime'); | ||||
|     this.timelineCon = document.getElementsByClassName('timeline-container')[0]; | ||||
|     this.speed = speed; | ||||
|     this.animationId; | ||||
|     this.startTime = Date.now(); | ||||
|     this.manualPosition = null; | ||||
|     this.isDragging = false; | ||||
|     this.pauseed = false; | ||||
|     this.time = ''; | ||||
|     this.update = this.update.bind(this); | ||||
|  | ||||
|     TimeLine.init(this) | ||||
|   } | ||||
|   static init(that) { | ||||
|     for (let i = 0; i <= 24; i++) { | ||||
|       if (i % 6 === 0) { | ||||
|         const label = document.createElement('div'); | ||||
|         label.className = 'time-mark'; | ||||
|         label.textContent = `${i}:00`; | ||||
|         label.style.left = `${(i / 24) * 100}%`; | ||||
|         document.getElementsByClassName('time-marks')[0].appendChild(label) | ||||
|       } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     that.startTime = Date.now() - ((that.manualPosition || 0) * 86400 * 1000 / that.speed); | ||||
|  | ||||
|     that.timeline.addEventListener('mousedown', (e) => { | ||||
|       that.isDragging = true; | ||||
|       e.preventDefault(); | ||||
|     }); | ||||
|  | ||||
|     that.timeline.addEventListener('mousemove', (e) => { | ||||
|       if (!that.isDragging) return; | ||||
|  | ||||
|       const rect = that.timeline.getBoundingClientRect(); | ||||
|       let pos = (e.clientX - rect.left) / rect.width; | ||||
|       pos = Math.max(0, Math.min(1, pos)); | ||||
|  | ||||
|       that.manualPosition = pos; | ||||
|       that.progress.style.width = `${pos * 100}%`; | ||||
|  | ||||
|       const seconds = pos * 86400; | ||||
|       that.currentTime.textContent = that.formatTime(seconds); | ||||
|     }); | ||||
|     that.update(); | ||||
|  | ||||
|     document.getElementById('timePause').addEventListener('click', function () { | ||||
|       that.pauseed = !that.pauseed; | ||||
|       if (that.pauseed) { | ||||
|         document.getElementById('timePause').textContent = '播放'; | ||||
|         that.animationId && cancelAnimationFrame(that.animationId); | ||||
|         that.pausedTime = Date.now(); // 记录暂停时刻 | ||||
|         that.sdk.viewer.clock.shouldAnimate = false | ||||
|       } else { | ||||
|         document.getElementById('timePause').textContent = '暂停'; | ||||
|         that.manualPosition = null | ||||
|  | ||||
|         const pausedDuration = Date.now() - that.pausedTime; | ||||
|         that.startTime += pausedDuration; // 补偿暂停期间的时间差 | ||||
|         that.sdk.viewer.clock.shouldAnimate = true | ||||
|         that.update(); // 重启动画循环 | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   moveComplay(func) { | ||||
|     let that = this | ||||
|     that.timeline.addEventListener('mouseup', () => { | ||||
|       that.isDragging = false; | ||||
|       if (that.manualPosition !== null) { | ||||
|         // that.sdk.viewer.clock.shouldAnimate = true | ||||
|         that.startTime = Date.now() - (that.manualPosition * 86400 * 1000 / that.speed); | ||||
|         that.manualPosition = null; | ||||
|  | ||||
|         if (!that.pauseed) { | ||||
|           that.update() | ||||
|           func(that.time) | ||||
|         } else { | ||||
|           that.pausedTime = Date.now(); // 记录暂停时刻 | ||||
|           func(that.currentTime.textContent) | ||||
|         } | ||||
|  | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   formatTime(seconds) { | ||||
|     const hrs = Math.floor(seconds / 3600).toString().padStart(2, '0'); | ||||
|     const mins = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0'); | ||||
|     const secs = Math.floor(seconds % 60).toString().padStart(2, '0'); | ||||
|     return `${hrs}:${mins}:${secs}`; | ||||
|   } | ||||
|  | ||||
|   update() { | ||||
|     if (this.manualPosition !== null) return; | ||||
|  | ||||
|     const elapsed = (Date.now() - this.startTime) * this.speed; | ||||
|     const totalSeconds = elapsed / 1000; | ||||
|     const daySeconds = totalSeconds % 86400; | ||||
|     const percentage = daySeconds / 86400; | ||||
|  | ||||
|     this.progress.style.width = `${percentage * 100}%`; | ||||
|     this.time = this.formatTime(daySeconds) | ||||
|     this.currentTime.textContent = this.time; | ||||
|     this.animationId = requestAnimationFrame(this.update); | ||||
|   } | ||||
|   setSpeed(v) { | ||||
|     const currentProgress = this.manualPosition ?? | ||||
|       (Date.now() - this.startTime) * this.speed / (86400 * 1000); | ||||
|  | ||||
|     this.speed = v; | ||||
|     this.startTime = Date.now() - (currentProgress * 86400 * 1000 / this.speed); | ||||
|     this.manualPosition = null; | ||||
|     this.update(); | ||||
|  | ||||
|   } | ||||
|   updateTime() { | ||||
|     this.startTime = Date.now() - (this.manualPosition * 86400 * 1000 / this.speed); | ||||
|     this.manualPosition = null; | ||||
|     this.update(); | ||||
|   } | ||||
|   clear() { | ||||
|     this.animationId && cancelAnimationFrame(this.animationId); | ||||
|     this.progress.style.width = '0%'; | ||||
|     this.currentTime.textContent = '00:00:00'; | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -14,6 +14,7 @@ import { getTheme, setTheme } from "../Obj/Element/theme"; | ||||
| import { setActiveViewer as setMultiViewportActiveViewer } from './MultiViewportMode' | ||||
| import { setActiveViewer as setSplitActiveViewer, getSdk } from './SplitScreen' | ||||
| import { updateCluster } from './cluster/cluster' | ||||
| import { getHost } from "../on"; | ||||
|  | ||||
| let coordinateSystem = 'EPSG:4326' | ||||
| let _cartesian | ||||
| @ -244,6 +245,16 @@ function setBillboardDefaultUrl(url, name) { | ||||
|   else { | ||||
|     name = 'billboard_default_url' | ||||
|   } | ||||
|   let host = getHost() | ||||
|   if (!url.startsWith("http")) { | ||||
|     //说明是本地的json,在磁盘中存在的 | ||||
|     if (!url.includes(":")) { | ||||
|       if (host) { | ||||
|         let o = new URL(url, host) | ||||
|         url = o.href | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   localStorage.setItem(name, url); | ||||
| } | ||||
| /*获取广告牌默认图标*/ | ||||
|  | ||||
| @ -183,6 +183,8 @@ import Dialog from '../Obj/Element/Dialog' | ||||
| import newAirLine from '../Obj/AirLine/pointRoute.js' | ||||
| import Frustum from '../Obj/AirLine/frustum' | ||||
| import DrawTakeOff from '../Obj/AirLine/DrawTakeOff' | ||||
| import FlowLine from '../Obj/Base/FlowLine' | ||||
| import Sunshine from '../Global/efflect/Sunshine' | ||||
|  | ||||
| const YJEarthismeasuring = Symbol('测量状态') | ||||
| const screenRecord = Symbol('录屏对象') | ||||
| @ -253,7 +255,8 @@ if (!window.YJ) { | ||||
|       newAirLine, | ||||
|       FRUSTUN: Frustum, | ||||
|       // GenerateRoute | ||||
|       Dialog | ||||
|       Dialog, | ||||
|       FlowLine | ||||
|     }, | ||||
|     YJEarth, | ||||
|     Tools, | ||||
| @ -292,7 +295,7 @@ if (!window.YJ) { | ||||
|         cease: FlyRoamCease | ||||
|       }, | ||||
|       flyTo, | ||||
|       efflect: { rain, snow, fog, nightVision, skyStarry, illumination }, | ||||
|       efflect: { rain, snow, fog, nightVision, skyStarry, illumination, Sunshine }, | ||||
|       CameraController, | ||||
|       CesiumContainer, | ||||
|       setBillboardDefaultUrl, | ||||
|  | ||||
| @ -62,7 +62,7 @@ class PolygonObject extends Base { | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
|  | ||||
| @ -24,7 +24,7 @@ class AssembleObject extends Base { | ||||
|    * @param options {object} 属性 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.height {number} 高度 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    * @param {Array.<object>} options.positions 坐标数组 [{lon,lat,alt},...] | ||||
| @ -34,13 +34,13 @@ class AssembleObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.positions = options.positions || [] | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     this.entity | ||||
|     this.event = new MouseEvent(this.sdk) | ||||
| @ -57,8 +57,8 @@ class AssembleObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -106,14 +106,14 @@ class AssembleObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -123,14 +123,14 @@ class AssembleObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -238,25 +238,25 @@ class AssembleObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -268,10 +268,10 @@ class AssembleObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineColor && this._elms.lineColor.forEach((item) => { | ||||
|       item.value = v | ||||
|       item.value = this.options.line.width | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -464,7 +464,7 @@ class AssembleObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -24,7 +24,7 @@ class AttackArrowObject extends Base { | ||||
|    * @param options {object} 属性 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.height {number} 高度 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    * @param {Array.<object>} options.positions 坐标数组 [{lon,lat,alt},...] | ||||
| @ -34,13 +34,13 @@ class AttackArrowObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.positions = options.positions || [] | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     this.entity | ||||
|     this.event = new MouseEvent(this.sdk) | ||||
| @ -61,8 +61,8 @@ class AttackArrowObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -110,14 +110,14 @@ class AttackArrowObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -127,14 +127,14 @@ class AttackArrowObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -243,25 +243,25 @@ class AttackArrowObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -273,8 +273,8 @@ class AttackArrowObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineColor && this._elms.lineColor.forEach((item) => { | ||||
|       item.value = v | ||||
|     }) | ||||
| @ -469,7 +469,7 @@ class AttackArrowObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -33,6 +33,7 @@ class ArcgisLayer extends BaseLayer { | ||||
|     } else { | ||||
|       this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider,) | ||||
|     } | ||||
|     this.entity._id = this.options.id | ||||
|     for (let i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) { | ||||
|       if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) { | ||||
|         let layer = this.sdk.viewer.imageryLayers._layers[i] | ||||
|  | ||||
| @ -30,6 +30,7 @@ class GdImagery extends BaseLayer { | ||||
|     } else { | ||||
|       this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer,) | ||||
|     } | ||||
|     this.entity._id = this.options.id | ||||
|     for (let i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) { | ||||
|       if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) { | ||||
|         let layer = this.sdk.viewer.imageryLayers._layers[i] | ||||
|  | ||||
| @ -126,6 +126,7 @@ class Layer extends BaseLayer { | ||||
|       this.entity = | ||||
|         this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer,) | ||||
|     } | ||||
|     this.entity._id = this.options.id | ||||
|     for (let i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) { | ||||
|       if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) { | ||||
|         let layer = this.sdk.viewer.imageryLayers._layers[i] | ||||
|  | ||||
| @ -37,6 +37,7 @@ class Layer3rdparty extends BaseLayer { | ||||
|       this.entity = | ||||
|         this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer,) | ||||
|     } | ||||
|     this.entity._id = this.options.id | ||||
|     for (let i = 0; i < this.sdk.viewer.imageryLayers._layers.length; i++) { | ||||
|       if (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider && this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && (this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw' || this.sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww')) { | ||||
|         let layer = this.sdk.viewer.imageryLayers._layers[i] | ||||
|  | ||||
| @ -28,11 +28,11 @@ class BaseLayer extends BaseSource { | ||||
|   } | ||||
|  | ||||
|   get layerIndex() { | ||||
|     return this.entity._layerIndex | ||||
|     return this.entity ? this.entity._layerIndex : undefined | ||||
|   } | ||||
|  | ||||
|   get layer_index() { | ||||
|     return this.entity._layerIndex | ||||
|     return this.entity ? this.entity._layerIndex : undefined | ||||
|   } | ||||
|  | ||||
|   get brightness() { | ||||
|  | ||||
| @ -56,7 +56,7 @@ function html(that) { | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="col"> | ||||
|         <span class="label">视野缩放</span> | ||||
|         <span class="label">固定大小</span> | ||||
|         <input class="btn-switch" type="checkbox" @model="scaleByDistance"> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
| @ -100,8 +100,8 @@ class Model extends BaseModel { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -145,15 +145,7 @@ class Model extends BaseModel { | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.sdk.viewer.scene) { | ||||
|       return | ||||
|     } | ||||
|     if (!url.startsWith("http")) { | ||||
|       //说明是本地的json,在磁盘中存在的 | ||||
|       if (!url.includes(":")) { | ||||
|         if (this.options.host) { | ||||
|           let o = new URL(url, this.options.host) | ||||
|           url = o.href | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     url = this.replaceHost(url, this.options.host) | ||||
|     // this.handler = new Cesium.ScreenSpaceEventHandler( | ||||
|     //   this.sdk.viewer.canvas | ||||
|     // ) | ||||
| @ -791,7 +783,7 @@ class Model extends BaseModel { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
| @ -1336,7 +1328,9 @@ class Model extends BaseModel { | ||||
|           this.name = this.options.name || '未命名对象' | ||||
|           this.originalOptions = this.deepCopyObj(this.options) | ||||
|           this._DialogObject.close() | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) | ||||
|           let cdoptions = this.deepCopyObj(this.options) | ||||
|           cdoptions.host = '' | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(cdoptions) | ||||
|           syncData(this.sdk, this.options.id) | ||||
|           syncSplitData(this.sdk, this.options.id) | ||||
|         }, | ||||
|  | ||||
| @ -247,7 +247,9 @@ class BaseTerrain extends BaseSource { | ||||
|         } | ||||
|         this.originalOptions = this.deepCopyObj(this.options) | ||||
|         this._DialogObject.close() | ||||
|         this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) | ||||
|         let cdoptions = this.deepCopyObj(this.options) | ||||
|         cdoptions.host = '' | ||||
|         this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(cdoptions) | ||||
|       }, | ||||
|       // resetCallBack: () => { | ||||
|       //   this.name = this.originalOptions.name | ||||
|  | ||||
| @ -63,9 +63,9 @@ class BillboardObject extends Base { | ||||
|    *@param options.label {object} 标注文字的参数 | ||||
|    *@param [options.label.text] {string} 标注中文字 | ||||
|    *@param [options.label.show=true] {boolean} 标注文字显示/隐藏 | ||||
|    *@param [options.label.fontFamily=0] {number} 标注文字字体 0:思源黑体;1:庞门正道标题体;2:数黑体 | ||||
|    *@param [options.label.fontFamily=0] {number} 标注文字字体 0:黑体;1:思源黑体;2:庞门正道标题体;3:数黑体 | ||||
|    *@param [options.label.fontSize=39] {number} 标注文字大小 单位px,微软雅黑 | ||||
|    *@param [options.label.color=#07f8e4] {string} 标注文字颜色 | ||||
|    *@param [options.label.color=#00ffff] {string} 标注文字颜色 | ||||
|    *@param _Dialog {object} 弹框事件 | ||||
|    *@param _Dialog.confirmCallBack {function} 弹框确认时的回调 | ||||
|    *@param _Dialog.instructSubmit(id,name,instruct) {function} 提交指令(ID, 名称,指令内容) | ||||
| @ -107,7 +107,7 @@ class BillboardObject extends Base { | ||||
|         : true | ||||
|     this.options.label.fontFamily = options.label.fontFamily || 0 | ||||
|     this.options.label.fontSize = options.label.fontSize || 39 | ||||
|     this.options.label.color = options.label.color || '#FFFF00' | ||||
|     this.options.label.color = options.label.color || '#00ffff' | ||||
|     this.options.positions = options.positions = options.positions || {} | ||||
|     this.options.positions.lng = Number( | ||||
|       Number(options.positions.lng || 0).toFixed(8) | ||||
| @ -211,8 +211,9 @@ class BillboardObject extends Base { | ||||
|     let index = 0 | ||||
|  | ||||
|     let font = getFontFamily(that.labelFontFamily) || 'Helvetica' | ||||
|     let url = that.replaceHost(that.options.billboard.image, that.options.host) | ||||
|     that._frameImages = [] | ||||
|     if (that.options.billboard.image && that.options.billboard.image.endsWith('gif')) { | ||||
|     if (url && url.endsWith('gif')) { | ||||
|       isGlf = true | ||||
|       switch (that.options.heightMode) { | ||||
|         case 2: | ||||
| @ -222,7 +223,7 @@ class BillboardObject extends Base { | ||||
|       } | ||||
|  | ||||
|       let gifImg = document.createElement('img') | ||||
|       gifImg.setAttribute('rel:animated_src', that.options.billboard.image) | ||||
|       gifImg.setAttribute('rel:animated_src', url) | ||||
|       gifImg.setAttribute('rel:auto_play', '1') | ||||
|       const imgDiv = document.createElement('div') | ||||
|       imgDiv.appendChild(gifImg) | ||||
| @ -272,7 +273,7 @@ class BillboardObject extends Base { | ||||
|     else { | ||||
|       let image = new Image() | ||||
|       image.src = | ||||
|         that.options.billboard.image || | ||||
|       url || | ||||
|         that.getSourceRootPath() + '/img/A-ablu-blank.png' | ||||
|       switch (that.options.heightMode) { | ||||
|         case 2: | ||||
| @ -720,11 +721,21 @@ class BillboardObject extends Base { | ||||
|   } | ||||
|  | ||||
|   get billboardImage() { | ||||
|     return this.options.billboard.image | ||||
|     let url = this.options.billboard.image | ||||
|     if (url && !url.startsWith("http")) { | ||||
|       //说明是本地的json,在磁盘中存在的 | ||||
|       if (!url.includes(":")) { | ||||
|         if (this.options.host) { | ||||
|           let o = new URL(url, this.options.host) | ||||
|           url = o.href | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     return url | ||||
|   } | ||||
|   set billboardImage(v) { | ||||
|     let _this = this | ||||
|     this.options.billboard.image = v | ||||
|     this.options.billboard.image = this.replaceHost(v, this.options.host) | ||||
|     let url = | ||||
|       this.options.billboard.image || | ||||
|       getBillboardDefaultUrl(this.options.billboard.defaultImage) || | ||||
| @ -916,7 +927,7 @@ class BillboardObject extends Base { | ||||
|     return this.options.label.color | ||||
|   } | ||||
|   set labelColor(v) { | ||||
|     this.options.label.color = v | ||||
|     this.options.label.color = v || '#00ffff' | ||||
|     this.renewPoint() | ||||
|     if (this._elms.labelColor) { | ||||
|       this._elms.labelColor.forEach((item, i) => { | ||||
| @ -924,14 +935,14 @@ class BillboardObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini', //颜色box类型 | ||||
|           alpha: true, //是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.label.color, | ||||
|           disabled: false, //是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity', //打开颜色选择器动画 | ||||
|           sure: c => { | ||||
|             this.labelColor = c | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelColor = 'rgba(255,255,255,1)' | ||||
|             this.labelColor = 'rgba(0,255,255,1)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelColor[i] = colorPicker | ||||
| @ -1497,10 +1508,11 @@ class BillboardObject extends Base { | ||||
|   } | ||||
|  | ||||
|   set billboardDefaultImage(v) { | ||||
|     setBillboardDefaultUrl(v, this.options.billboard.defaultImage) | ||||
|     let url = this.replaceHost(v, this.options.host) | ||||
|     setBillboardDefaultUrl(url, this.options.billboard.defaultImage) | ||||
|     this._elms.billboardDefaultImage && | ||||
|       this._elms.billboardDefaultImage.forEach(item => { | ||||
|         item.src = v | ||||
|         item.src = url | ||||
|       }) | ||||
|   } | ||||
|  | ||||
| @ -1575,8 +1587,10 @@ class BillboardObject extends Base { | ||||
|             } | ||||
|             this.originalOptions = this.deepCopyObj(this.options) | ||||
|             this._DialogObject.close() | ||||
|             let cdoptions = this.deepCopyObj(this.options) | ||||
|             cdoptions.host = '' | ||||
|             this.Dialog.confirmCallBack && | ||||
|               this.Dialog.confirmCallBack(this.originalOptions) | ||||
|               this.Dialog.confirmCallBack(cdoptions) | ||||
|             syncData(this.sdk, this.options.id) | ||||
|             syncSplitData(this.sdk, this.options.id) | ||||
|           }, | ||||
| @ -1812,7 +1826,13 @@ class BillboardObject extends Base { | ||||
|           case '2': | ||||
|           case 3: | ||||
|           case '3': | ||||
|             this.getClampToHeight(this.options.positions).then(h => { | ||||
|             let objectsToExclude = [] | ||||
|             for (let [key, value] of this.sdk.entityMap) { | ||||
|               if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|                 objectsToExclude.push(value.entity) | ||||
|               } | ||||
|             } | ||||
|             this.getClampToHeight(this.options.positions, objectsToExclude).then(h => { | ||||
|               this.alt = Number(h.toFixed(2)) | ||||
|               heightElm.value = this.alt | ||||
|             }) | ||||
| @ -1876,7 +1896,13 @@ class BillboardObject extends Base { | ||||
|                     break | ||||
|                   case 3: | ||||
|                   case '3': | ||||
|                     this.getClampToHeight(this.options.positions).then(h => { | ||||
|                     let objectsToExclude = [] | ||||
|                     for (let [key, value] of this.sdk.entityMap) { | ||||
|                       if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|                         objectsToExclude.push(value.entity) | ||||
|                       } | ||||
|                     } | ||||
|                     this.getClampToHeight(this.options.positions, objectsToExclude).then(h => { | ||||
|                       this.alt = Number(h.toFixed(2)) | ||||
|                     }) | ||||
|                     this.heightMode = 3 | ||||
| @ -2330,9 +2356,14 @@ class BillboardObject extends Base { | ||||
|       this.options.positions.lat, | ||||
|       10000000000000 | ||||
|     ) | ||||
|     let updatedCartesians = await this.sdk.viewer.scene.clampToHeightMostDetailed( | ||||
|       [point1] | ||||
|     ) | ||||
|  | ||||
|     let objectsToExclude = [] | ||||
|     for (let [key, value] of this.sdk.entityMap) { | ||||
|       if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|         objectsToExclude.push(value.entity) | ||||
|       } | ||||
|     } | ||||
|     let updatedCartesians = await this.sdk.viewer.scene.clampToHeightMostDetailed([point1], objectsToExclude) | ||||
|     if (updatedCartesians && updatedCartesians[0]) { | ||||
|       height = this.cartesian3Towgs84(updatedCartesians[0], this.sdk.viewer).alt | ||||
|     } | ||||
| @ -2471,7 +2502,13 @@ class BillboardObject extends Base { | ||||
|       } | ||||
|       // 如果没有高度值,则获取紧贴高度计算 | ||||
|       if (!position.hasOwnProperty('alt')) { | ||||
|         position.alt = await this.getClampToHeight(position) | ||||
|         let objectsToExclude = [] | ||||
|         for (let [key, value] of this.sdk.entityMap) { | ||||
|           if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|             objectsToExclude.push(value.entity) | ||||
|           } | ||||
|         } | ||||
|         position.alt = await this.getClampToHeight(position, objectsToExclude) | ||||
|       } | ||||
|       lng = this.options.customView.relativePosition.lng + position.lng | ||||
|       lat = this.options.customView.relativePosition.lat + position.lat | ||||
| @ -2482,7 +2519,13 @@ class BillboardObject extends Base { | ||||
|         orientation: orientation | ||||
|       }) | ||||
|     } else { | ||||
|       let height = await this.getClampToHeight(this.options.positions) | ||||
|       let objectsToExclude = [] | ||||
|       for (let [key, value] of this.sdk.entityMap) { | ||||
|         if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|           objectsToExclude.push(value.entity) | ||||
|         } | ||||
|       } | ||||
|       let height = await this.getClampToHeight(this.options.positions, objectsToExclude) | ||||
|       this.sdk.viewer.camera.flyTo({ | ||||
|         orientation: options.orientation, | ||||
|         destination: Cesium.Cartesian3.fromDegrees( | ||||
| @ -2650,7 +2693,13 @@ class BillboardObject extends Base { | ||||
|       } | ||||
|       // 如果没有高度值,则获取紧贴高度计算 | ||||
|       if (!position.hasOwnProperty('alt')) { | ||||
|         position.alt = await this.getClampToHeight(position) | ||||
|         let objectsToExclude = [] | ||||
|         for (let [key, value] of this.sdk.entityMap) { | ||||
|           if (value.type === 'RadarScanStereoscopic' && value.entity) { | ||||
|             objectsToExclude.push(value.entity) | ||||
|           } | ||||
|         } | ||||
|         position.alt = await this.getClampToHeight(position, objectsToExclude) | ||||
|       } | ||||
|       relativePosition = { | ||||
|         lng: cameraPosition84.lng - position.lng, | ||||
|  | ||||
| @ -75,8 +75,8 @@ class CircleDiffuse extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -573,7 +573,7 @@ class CircleDiffuse extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -23,7 +23,7 @@ class CircleObject extends Base { | ||||
|    * @param options.id {string} 标注id | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.center {object} 位置 | ||||
|    * @param options.center.lng {object} 经度 | ||||
|    * @param options.center.lat {object} 纬度 | ||||
| @ -31,21 +31,21 @@ class CircleObject extends Base { | ||||
|    * @param options.radius=10 {object}半径 | ||||
|    * @param options.line {object} 边框 | ||||
|    * @param options.line.width=2 {string} 边框宽 | ||||
|    * @param options.line.color="rgba(155, 155, 124, 0.89)" {string} 边框颜色 | ||||
|    * @param options.line.color="#ff000080" {string} 边框颜色 | ||||
|    * @param options.label {object} 标注 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    */ | ||||
|   constructor(sdk, options = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.radius = (options.radius || options.radius === 0) ? options.radius : 10 | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.center = options.center || {} | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     options.label = options.label || {} | ||||
|     this._elms = {}; | ||||
| @ -58,8 +58,8 @@ class CircleObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -216,14 +216,14 @@ class CircleObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -233,14 +233,14 @@ class CircleObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -252,25 +252,25 @@ class CircleObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -282,8 +282,8 @@ class CircleObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineWidth && this._elms.lineWidth.forEach((item) => { | ||||
|       item.value = v | ||||
|     }) | ||||
| @ -478,7 +478,7 @@ class CircleObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -24,8 +24,8 @@ class CurvelineObject extends Base { | ||||
|    * @description 折线 | ||||
|    * @param options {object} 线属性 | ||||
|    * @param options.name{string} 名称 | ||||
|    * @param options.width=5{number} 线宽 | ||||
|    * @param options.color=#0df89e {string} 颜色 | ||||
|    * @param options.width=3{number} 线宽 | ||||
|    * @param options.color=#ff0000 {string} 颜色 | ||||
|    * @param options.type=0 {number} 材质类型 0-实线 1-虚线 2-泛光 | ||||
|    * @param options.heightMode{number} 高度模式(0:海拔高度;1:相对高度;2:依附模式) | ||||
|    * @param options['nose-to-tail']=false {boolean} 首尾相连 | ||||
| @ -51,8 +51,8 @@ class CurvelineObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options) | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.width = options.width || 10 | ||||
|     this.options.color = options.color || '#0df89e' | ||||
|     this.options.width = ((options.width || options.width === 0) ? options.width : 3) | ||||
|     this.options.color = options.color || '#ff0000' | ||||
|     this.options.type = options.type ? Number(options.type) : 0 | ||||
|     this.options['nose-to-tail'] = options['nose-to-tail'] || false | ||||
|     this.options.extend = options.extend || false | ||||
| @ -86,8 +86,8 @@ class CurvelineObject extends Base { | ||||
|         options.label.pixelOffset || options.label.pixelOffset === 0 | ||||
|           ? options.label.pixelOffset | ||||
|           : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: | ||||
|         options.label.near || options.label.near === 0 | ||||
| @ -143,7 +143,7 @@ class CurvelineObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff0000' | ||||
|     this.entity.polyline.material = this.getMaterial(v, this.options.type) | ||||
|     if (this._elms.color) { | ||||
|       this._elms.color.forEach((item, i) => { | ||||
| @ -151,14 +151,14 @@ class CurvelineObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini', //颜色box类型 | ||||
|           alpha: true, //是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false, //是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity', //打开颜色选择器动画 | ||||
|           sure: c => { | ||||
|             this.color = c | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,1)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -243,10 +243,10 @@ class CurvelineObject extends Base { | ||||
|   } | ||||
|  | ||||
|   set lineWidth(v) { | ||||
|     this.options.width = v | ||||
|     this.options.width = (v || v == 0) ? v : 3 | ||||
|     this._elms.lineWidth && | ||||
|       this._elms.lineWidth.forEach(item => { | ||||
|         item.value = v | ||||
|         item.value = this.options.width | ||||
|       }) | ||||
|     this.entity && | ||||
|       this.entity.polyline && | ||||
| @ -623,7 +623,7 @@ class CurvelineObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| /** | ||||
|  * 圆 | ||||
|  * 椭圆 | ||||
|  */ | ||||
| import Dialog from '../../Element/Dialog'; | ||||
| import cy_tabs from "../../Element/cy_html_tabs"; | ||||
| @ -24,7 +24,7 @@ class EllipseObject extends Base { | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.center {object} 位置 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.center.lng {object} 经度 | ||||
|    * @param options.center.lat {object} 维度 | ||||
|    * @param options.semiMinorAxis=10 {number} 短半轴长度 | ||||
| @ -32,22 +32,22 @@ class EllipseObject extends Base { | ||||
|    * @param options.bearing=0 {number} 旋转角度 | ||||
|    * @param options.line {object} 边框 | ||||
|    * @param options.line.width=2 {string} 边框宽 | ||||
|    * @param options.line.color="rgba(155, 155, 124, 0.89)" {string} 边框颜色 | ||||
|    * @param options.line.color="#ff000080" {string} 边框颜色 | ||||
|    * @param options.label {object} 标注 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    */ | ||||
|   constructor(sdk, options = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.semiMinorAxis = (options.semiMinorAxis || options.semiMinorAxis === 0) ? options.semiMinorAxis : 10 | ||||
|     this.options.semiMajorAxis = (options.semiMajorAxis || options.semiMajorAxis === 0) ? options.semiMajorAxis : 20 | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.center = options.center || {} | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     options.label = options.label || {} | ||||
|     this._elms = {}; | ||||
| @ -60,8 +60,8 @@ class EllipseObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -229,14 +229,14 @@ class EllipseObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -247,14 +247,14 @@ class EllipseObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -266,25 +266,25 @@ class EllipseObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -296,10 +296,10 @@ class EllipseObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineWidth && this._elms.lineWidth.forEach((item) => { | ||||
|       item.value = v | ||||
|       item.value = this.options.line.width | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -492,7 +492,7 @@ class EllipseObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
							
								
								
									
										76
									
								
								src/Obj/Base/FlowLine/_element.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/Obj/Base/FlowLine/_element.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| function html() { | ||||
|   return ` | ||||
|     <span class="custom-divider"></span> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|                 <span class="label">名称</span> | ||||
|                 <input class="input" maxlength="40" type="text" @model="name"> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label">颜色</span> | ||||
|                 <div class="flowLine-color"></div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <span class="custom-divider"></span> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|                 <span class="label">飞线数量</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" min="1" max="99999" @model="pointNumber"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label">飞线宽度</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" max="99999" min="1" step="1" @model="width"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|  | ||||
|             <div class="col"> | ||||
|                 <span class="label">飞线高度</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" min="0" max="999999" step="1" @model="height"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label">飞线高度差</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" max="99999" min="0" step="1" @model="heightDifference"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="div-item"> | ||||
|         <div class="row"> | ||||
|             <div class="col"> | ||||
|                 <span class="label">单次运动时长(s)</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" max="999999999" min="1" step="1" @model="duration"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="col"> | ||||
|                 <span class="label">轨迹透明度</span> | ||||
|                 <div class="input-number input-number-unit-1"> | ||||
|                     <input class="input" type="number" title="" max="1" min="0.01" step="0.01" @model="lineBackAlpha"> | ||||
|                     <span class="arrow"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <span class="custom-divider"></span> | ||||
|     ` | ||||
| } | ||||
|  | ||||
| export { html } | ||||
							
								
								
									
										92
									
								
								src/Obj/Base/FlowLine/eventBinding.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/Obj/Base/FlowLine/eventBinding.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | ||||
| class eventBinding { | ||||
|   constructor() { | ||||
|     this.element = {} | ||||
|   } | ||||
|   static event = {} | ||||
|  | ||||
|   getEvent(name) { | ||||
|     return eventBinding.event[name] | ||||
|   } | ||||
|  | ||||
|   getEventAll() { | ||||
|     return eventBinding.event | ||||
|   } | ||||
|  | ||||
|   setEvent(name, event) { | ||||
|     eventBinding.event[name] = event | ||||
|   } | ||||
|  | ||||
|   on(that, elements) { | ||||
|     for (let i = 0; i < elements.length; i++) { | ||||
|       let Event = [] | ||||
|       let isEvent = false | ||||
|       let removeName = [] | ||||
|       if (!elements[i] || !elements[i].attributes) { | ||||
|         continue; | ||||
|       } | ||||
|       for (let m of elements[i].attributes) { | ||||
|         switch (m.name) { | ||||
|           case '@model': { | ||||
|             isEvent = true | ||||
|             if (elements[i].type == 'checkbox') { | ||||
|               Event.push((e) => { that[m.value] = e.target.checked }) | ||||
|               elements[i].checked = that[m.value] | ||||
|             } | ||||
|             else { | ||||
|               Event.push((e) => { | ||||
|                 let value = e.target.value | ||||
|                 if (e.target.type == 'number') { | ||||
|                   value = Number(value) | ||||
|                 } | ||||
|                 that[m.value] = value | ||||
|               }) | ||||
|               if (elements[i].nodeName == 'IMG') { | ||||
|                 elements[i].src = that[m.value] | ||||
|               } | ||||
|               else { | ||||
|                 elements[i].value = that[m.value] | ||||
|               } | ||||
|             } | ||||
|             if (this.element[m.value]) { | ||||
|               this.element[m.value].push(elements[i]) | ||||
|             } | ||||
|             else { | ||||
|               this.element[m.value] = [elements[i]] | ||||
|             } | ||||
|             removeName.push(m.name) | ||||
|             break; | ||||
|           } | ||||
|           case '@click': { | ||||
|             elements[i].addEventListener('click', (e) => { | ||||
|               if (typeof (that.Dialog[m.value]) === 'function') { | ||||
|                 that.Dialog[m.value](e) | ||||
|               } | ||||
|             }); | ||||
|             removeName.push(m.name) | ||||
|             // elements[i].attributes.removeNamedItem(m.name) | ||||
|             break; | ||||
|           } | ||||
|         } | ||||
|         // elements[i].attributes[m] = undefined | ||||
|       } | ||||
|       for (let n = 0; n < removeName.length; n++) { | ||||
|         elements[i].attributes.removeNamedItem(removeName[n]) | ||||
|       } | ||||
|  | ||||
|       if (isEvent) { | ||||
|         let ventType = 'input' | ||||
|         if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') { | ||||
|           ventType = 'change' | ||||
|         } | ||||
|         elements[i].addEventListener(ventType, (e) => { | ||||
|           for (let t = 0; t < Event.length; t++) { | ||||
|             Event[t](e) | ||||
|           } | ||||
|         }); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const EventBinding = new eventBinding(); | ||||
| export default EventBinding; | ||||
							
								
								
									
										476
									
								
								src/Obj/Base/FlowLine/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										476
									
								
								src/Obj/Base/FlowLine/index.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,476 @@ | ||||
| /** | ||||
|  * @description 水面 | ||||
|  */ | ||||
| import Dialog from '../../Element/Dialog'; | ||||
| import { html } from "./_element"; | ||||
| import EventBinding from '../../Element/Dialog/eventBinding'; | ||||
| import Base from "../index"; | ||||
| import { syncData } from '../../../Global/MultiViewportMode' | ||||
| import DrawRect from '../../../Draw/drawRect' | ||||
| import drawPolygon from '../../../Draw/drawPolygon' | ||||
| import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/SplitScreen' | ||||
| import { setActiveViewer, closeRotateAround, closeViewFollow } from '../../../Global/global' | ||||
| import FlowLineMaterialProperty from "../../Materail/FlowLineMaterialProperty"; | ||||
|  | ||||
| class FlowLine extends Base { | ||||
|   /** | ||||
|    * @constructor | ||||
|    * @param sdk | ||||
|    * @description 流光飞线 | ||||
|    * @param options {object} 流光飞线属性 | ||||
|    * @param options.name=未命名对象 {string} 名称 | ||||
|    * @param options.pointNumber=300 {number} 线数量 | ||||
|    * @param options.height=200 {number} 线高度 | ||||
|    * @param options.heightDifference=3000 {number} 线高度差 | ||||
|    * @param options.width=2 {number} 线宽 | ||||
|    * @param options.duration=10.0 {number} 单次运动时间 | ||||
|    * @param options.color=rgba(255,255,255,1) {string} 颜色 | ||||
|    * @param options.lineBackAlpha=0.05 {number} 轨迹颜色(不能为0) | ||||
|    * @param Dialog {object} 弹框对象 | ||||
|    * @param Dialog.confirmCallBack {function} 弹框确认时的回调 | ||||
|    * */ | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.viewer = this.sdk.viewer | ||||
|     this.options.name = options.name || '飞线' | ||||
|     this.options.pointNumber = options.pointNumber || 200 | ||||
|     this.options.height = options.height || 200 | ||||
|     this.options.heightDifference = options.heightDifference || 3000 | ||||
|     this.options.width = options.width || 2 | ||||
|     this.options.duration = options.duration || 10.0 | ||||
|     this.options.color = options.color || "rgba(255,255,255,1)" | ||||
|     this.options.lineBackAlpha = options.lineBackAlpha || 0.05 | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.Dialog = _Dialog | ||||
|     this._EventBinding = new EventBinding() | ||||
|     this._elms = {}; | ||||
|     this.positionArea = [] | ||||
|     this.positions = [] | ||||
|     this.sdk.addIncetance(this.options.id, this) | ||||
|     FlowLine.create(this) | ||||
|   } | ||||
|  | ||||
|   // 创建水面 | ||||
|   static create(that) { | ||||
|     // let Draw = new DrawRect(that.sdk) | ||||
|     // Draw.start((a, positions) => { | ||||
|     //   that.positions = positions | ||||
|     //   that.getLine(that, that.positions) | ||||
|     //   that.edit(true) | ||||
|     // }) | ||||
|  | ||||
|     let Draw = new drawPolygon(that.sdk) | ||||
|     Draw.start((a, positions) => { | ||||
|       that.positionArea = positions | ||||
|       let posis = that.getRandomPointsInCesiumPolygon(positions, that.options.pointNumber) | ||||
|       that.positions = posis | ||||
|       that.getLine(that, posis) | ||||
|       that.edit(true) | ||||
|     }) | ||||
|   } | ||||
|   getRandomPointsInCesiumPolygon(positions, count) { | ||||
|     let lons = [], lats = [], posi = [] | ||||
|     positions.forEach(item => { | ||||
|       lons.push(item.lng) | ||||
|       lats.push(item.lat) | ||||
|       posi.push([item.lng, item.lat]) | ||||
|     }) | ||||
|     posi.push([posi[0][0], posi[0][1]]) | ||||
|     const minLon = Math.min(...lons), maxLon = Math.max(...lons); | ||||
|     const minLat = Math.min(...lats), maxLat = Math.max(...lats); | ||||
|  | ||||
|     const points = []; | ||||
|     while (points.length < count) { | ||||
|       const lon = minLon + Math.random() * (maxLon - minLon); | ||||
|       const lat = minLat + Math.random() * (maxLat - minLat); | ||||
|       // const cartesian = Cesium.Cartesian3.fromDegrees(lon, lat); | ||||
|       let point = turf.point([lon, lat]); | ||||
|       const polygon = turf.polygon([ | ||||
|         posi | ||||
|       ]); | ||||
|  | ||||
|       const isInside = turf.booleanPointInPolygon(point, polygon); | ||||
|       if (isInside) { | ||||
|         points.push([ | ||||
|           lon, | ||||
|           lat | ||||
|         ]); | ||||
|       } | ||||
|     } | ||||
|     return points; | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   getLine(that, positions) { | ||||
|     let num = 0 | ||||
|     let celiangEntity = null | ||||
|     if (that.viewer.entities.getById(that.options.id)) { | ||||
|       that.viewer.entities.getById(that.options.id)._children.forEach((item) => { | ||||
|         that.viewer.entities.remove(item); | ||||
|       }); | ||||
|       that.viewer.entities.remove(that.viewer.entities.getById(that.options.id)) | ||||
|     } | ||||
|     celiangEntity = that.viewer.entities.add(new Cesium.Entity({ id: that.options.id, show: that.options.show })) | ||||
|  | ||||
|     positions.forEach((item, index) => { | ||||
|       let point = item | ||||
|       //根据点设置起始点位置 | ||||
|       let start = Cesium.Cartesian3.fromDegrees(point[0], point[1], 0) | ||||
|       //根据点设置结束点位置 | ||||
|       let end = Cesium.Cartesian3.fromDegrees(point[0], point[1], that.options.height + Math.random() * that.options.heightDifference) | ||||
|       //创建线 | ||||
|       that.viewer.entities.add({ | ||||
|         parent: celiangEntity, | ||||
|         polyline: { | ||||
|           positions: [start, end], | ||||
|           width: 2, | ||||
|           // material:Cesium.Color.RED | ||||
|           material: new Cesium.FlowLineMaterialProperty({ | ||||
|             color: that.options.color, | ||||
|             duration: that.options.duration, | ||||
|             lineBackAlpha: that.options.lineBackAlpha, | ||||
|             num: num | ||||
|           }) | ||||
|         } | ||||
|       }) | ||||
|     }); | ||||
|  | ||||
|   } | ||||
|  | ||||
|   get color() { | ||||
|     return this.options.color | ||||
|   } | ||||
|  | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       entity._children.forEach(item => { | ||||
|         item.polyline.material.color = Cesium.Color.fromCssColorString(v) | ||||
|       }) | ||||
|     } | ||||
|  | ||||
|     if (this._elms.color) { | ||||
|       this._elms.color.forEach((item, i) => { | ||||
|         let picker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = picker | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|   get pointNumber() { | ||||
|     return this.options.pointNumber | ||||
|   } | ||||
|   set pointNumber(v) { | ||||
|     this.options.pointNumber = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       let posis = this.getRandomPointsInCesiumPolygon(this.positionArea, this.options.pointNumber) | ||||
|       this.positions = posis | ||||
|       this.getLine(this, posis) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   get height() { | ||||
|     return this.options.height | ||||
|   } | ||||
|  | ||||
|   set height(v) { | ||||
|     this.options.height = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       this.getLine(this, this.positions) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   get heightDifference() { | ||||
|     return this.options.heightDifference | ||||
|   } | ||||
|  | ||||
|   set heightDifference(v) { | ||||
|     this.options.heightDifference = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       this.getLine(this, this.positions) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   get width() { | ||||
|     return this.options.width | ||||
|   } | ||||
|  | ||||
|   set width(v) { | ||||
|     this.options.width = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       entity._children.forEach(item => { | ||||
|         item.polyline.width = v | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   get duration() { | ||||
|     return this.options.duration | ||||
|   } | ||||
|   set duration(v) { | ||||
|     this.options.duration = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       entity._children.forEach(item => { | ||||
|         item.polyline.material.duration = v | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   get lineBackAlpha() { | ||||
|     return this.options.lineBackAlpha | ||||
|   } | ||||
|   set lineBackAlpha(v) { | ||||
|     this.options.lineBackAlpha = v | ||||
|     let entity = this.viewer.entities.getById(this.options.id) | ||||
|     if (entity) { | ||||
|       entity._children.forEach(item => { | ||||
|         item.polyline.material.lineBackAlpha = v | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * @description 编辑框 | ||||
|    * @param state=false {boolean} 状态: true打开, false关闭 | ||||
|    */ | ||||
|   async edit(state = false) { | ||||
|     let _this = this | ||||
|     this.originalOptions = this.deepCopyObj(this.options) | ||||
|  | ||||
|     // let elms = this.sdk.viewer._container.getElementsByClassName('YJ-custom-base-dialog') | ||||
|     // for (let i = elms.length - 1; i >= 0; i--) { | ||||
|     //   this.sdk.viewer._container.removeChild(elms[i]) | ||||
|     // } | ||||
|  | ||||
|     if (this._DialogObject && this._DialogObject.close) { | ||||
|       this._DialogObject.close() | ||||
|       this._DialogObject = null | ||||
|     } | ||||
|  | ||||
|     if (state) { | ||||
|       this._DialogObject = await new Dialog(this.sdk, this.originalOptions, { | ||||
|         title: '飞线属性', left: '180px', top: '100px', | ||||
|         confirmCallBack: (options) => { | ||||
|           this.name = this.name.trim() | ||||
|           if (!this.name) { | ||||
|             // this.name = '未命名对象' | ||||
|             this.name = '飞线' | ||||
|           } | ||||
|           this.originalOptions = this.deepCopyObj(this.options) | ||||
|           this._DialogObject.close() | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) | ||||
|           syncData(this.sdk, this.options.id) | ||||
|           syncSplitData(this.sdk, this.options.id) | ||||
|         }, | ||||
|         resetCallBack: () => { | ||||
|           this.reset() | ||||
|           this.Dialog.resetCallBack && this.Dialog.resetCallBack() | ||||
|         }, | ||||
|         // removeCallBack: () => { | ||||
|         //   this.Dialog.removeCallBack && this.Dialog.removeCallBack() | ||||
|         // }, | ||||
|         closeCallBack: () => { | ||||
|           this.reset() | ||||
|           // this.entity.style = new Cesium.Cesium3DTileStyle({ | ||||
|           //   color: "color('rgba(255,255,255," + this.newData.transparency + ")')", | ||||
|           //   show: true, | ||||
|           // }); | ||||
|           this.Dialog.closeCallBack && this.Dialog.closeCallBack() | ||||
|         }, | ||||
|         showCallBack: (show) => { | ||||
|           this.show = show | ||||
|           this.Dialog.showCallBack && this.Dialog.showCallBack() | ||||
|         } | ||||
|       }, true) | ||||
|       this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' flow-line-surface' | ||||
|       let contentElm = document.createElement('div'); | ||||
|       contentElm.innerHTML = html() | ||||
|       this._DialogObject.contentAppChild(contentElm) | ||||
|       // 颜色组件 | ||||
|       let waterColorPicker = new ewPlugins('colorpicker', { | ||||
|         el: contentElm.getElementsByClassName("flowLine-color")[0], | ||||
|         size: 'mini',//颜色box类型 | ||||
|         alpha: true,//是否开启透明度 | ||||
|         defaultColor: this.color, | ||||
|         disabled: false,//是否禁止打开颜色选择器 | ||||
|         openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|         sure: (color) => { | ||||
|           this.color = color | ||||
|         },//点击确认按钮事件回调 | ||||
|         clear: () => { | ||||
|           this.color = 'rgba(255,255,255,1)' | ||||
|         },//点击清空按钮事件回调 | ||||
|       }) | ||||
|  | ||||
|       let all_elm = contentElm.getElementsByTagName("*") | ||||
|       this._EventBinding.on(this, all_elm) | ||||
|       this._elms = this._EventBinding.element | ||||
|       this._elms.color = [waterColorPicker] | ||||
|     } else { | ||||
|       // if (this._element_style) { | ||||
|       //   document.getElementsByTagName('head')[0].removeChild(this._element_style) | ||||
|       //   this._element_style = null | ||||
|       // } | ||||
|       // if (this._DialogObject && this._DialogObject.remove) { | ||||
|       //   this._DialogObject.remove() | ||||
|       //   this._DialogObject = null | ||||
|       // } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   reset() { | ||||
|     if (!this.viewer.entities.getById(this.options.id)) { | ||||
|       return | ||||
|     } | ||||
|     this.name = this.originalOptions.name | ||||
|     this.pointNumber = this.originalOptions.pointNumber | ||||
|     this.height = this.originalOptions.height | ||||
|     this.heightDifference = this.originalOptions.heightDifference | ||||
|     this.width = this.originalOptions.width | ||||
|     this.duration = this.originalOptions.duration | ||||
|     this.color = this.originalOptions.color | ||||
|     this.lineBackAlpha = this.originalOptions.lineBackAlpha | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 飞到对应实体 | ||||
|    */ | ||||
|   async flyTo(options = {}) { | ||||
|     setActiveViewer(0) | ||||
|     closeRotateAround(this.sdk) | ||||
|     closeViewFollow(this.sdk) | ||||
|  | ||||
|     if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) { | ||||
|       let orientation = { | ||||
|         heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0), | ||||
|         pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0), | ||||
|         roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0) | ||||
|       } | ||||
|  | ||||
|       let lng = this.options.customView.relativePosition.lng | ||||
|       let lat = this.options.customView.relativePosition.lat | ||||
|       let alt = this.options.customView.relativePosition.alt | ||||
|       let destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt) | ||||
|  | ||||
|       let position = { lng: 0, lat: 0 } | ||||
|       if (this.options.position) { | ||||
|         position = { ...this.options.position } | ||||
|       } | ||||
|       else if (this.options.positions) { | ||||
|         position = { ...this.options.positions[0] } | ||||
|       } | ||||
|       else if (this.options.center) { | ||||
|         position = { ...this.options.center } | ||||
|       } | ||||
|       else if (this.options.start) { | ||||
|         position = { ...this.options.start } | ||||
|       } | ||||
|       else { | ||||
|         if (this.options.hasOwnProperty('lng')) { | ||||
|           position.lng = this.options.lng | ||||
|         } | ||||
|         if (this.options.hasOwnProperty('lat')) { | ||||
|           position.lat = this.options.lat | ||||
|         } | ||||
|         if (this.options.hasOwnProperty('alt')) { | ||||
|           position.alt = this.options.alt | ||||
|         } | ||||
|       } | ||||
|       // 如果没有高度值,则获取紧贴高度计算 | ||||
|       // if (!position.hasOwnProperty('alt')) { | ||||
|       //   position.alt = await this.getClampToHeight(position) | ||||
|       // } | ||||
|       lng = this.options.customView.relativePosition.lng + position.lng | ||||
|       lat = this.options.customView.relativePosition.lat + position.lat | ||||
|       alt = this.options.customView.relativePosition.alt + position.alt | ||||
|       destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt) | ||||
|       this.sdk.viewer.camera.flyTo({ | ||||
|         destination: destination, | ||||
|         orientation: orientation | ||||
|       }) | ||||
|     } | ||||
|     else { | ||||
|       let positionArray = [] | ||||
|       for (let i = 0; i < this.positions.length; i++) { | ||||
|         let a = Cesium.Cartesian3.fromDegrees( | ||||
|           this.positions[i][0], | ||||
|           this.positions[i][1], | ||||
|           this.options.height + this.options.heightDifference / 2 | ||||
|         ) | ||||
|         positionArray.push(a.x, a.y, a.z) | ||||
|       } | ||||
|       let BoundingSphere = Cesium.BoundingSphere.fromVertices(positionArray) | ||||
|       this.viewer.camera.flyToBoundingSphere(BoundingSphere, { | ||||
|         offset: { | ||||
|           heading: Cesium.Math.toRadians(0.0), | ||||
|           pitch: Cesium.Math.toRadians(-20.0), | ||||
|           roll: Cesium.Math.toRadians(0.0) | ||||
|         } | ||||
|       }) | ||||
|  | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   getSphere() { | ||||
|     return new Promise((resolve) => { | ||||
|       // entity没有加载完成时 state 不会等于0 所以设置定时器直到获取到为止 | ||||
|       const interval = setInterval(() => { | ||||
|         const sphere = new Cesium.BoundingSphere() | ||||
|         const state = this.sdk.viewer._dataSourceDisplay.getBoundingSphere( | ||||
|           this.viewer.entities.getById(this.options.id), | ||||
|           false, | ||||
|           sphere | ||||
|         ) | ||||
|         if (state === Cesium.BoundingSphereState.DONE) { | ||||
|           clearInterval(interval) | ||||
|         } | ||||
|       }, 1000) | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 删除 | ||||
|    */ | ||||
|   async remove() { | ||||
|     if (this.viewer.entities.getById(this.options.id)) { | ||||
|       this.viewer.entities.getById(this.options.id)._children.forEach((item) => { | ||||
|         this.viewer.entities.remove(item); | ||||
|       }); | ||||
|       this.viewer.entities.remove(this.viewer.entities.getById(this.options.id)) | ||||
|     } | ||||
|     this.positions = [] | ||||
|     this.entity = null | ||||
|  | ||||
|     if (this._DialogObject && !this._DialogObject.isDestroy) { | ||||
|       this._DialogObject.close() | ||||
|       this._DialogObject = null | ||||
|     } | ||||
|     await this.sdk.removeIncetance(this.options.id) | ||||
|     await syncData(this.sdk, this.options.id) | ||||
|   } | ||||
|  | ||||
|   flicker() { } | ||||
| } | ||||
|  | ||||
| export default FlowLine | ||||
| @ -594,12 +594,13 @@ class GroundSvg extends Base { | ||||
|   } | ||||
|  | ||||
|   init() { | ||||
|     let url = this.replaceHost(this.options.url, this.options.host) | ||||
|     syncData(this.sdk, this.options.id) | ||||
|     this.hierarchys = [] | ||||
|     this.originalOptions = this.deepCopyObj(this.options) | ||||
|     let geometryArray = [] | ||||
|     const loader = new SVGLoader(); | ||||
|     loader.load(this.options.url, (data) => { | ||||
|     loader.load(url, (data) => { | ||||
|       if (!this.sdk || !this.sdk.viewer || !this.sdk.viewer.entities) { | ||||
|         return | ||||
|       } | ||||
| @ -923,7 +924,9 @@ class GroundSvg extends Base { | ||||
|           this.text && (this.options.text.position = { lng: this.text.position[0], lat: this.text.position[1], alt: this.text.position[2] }) | ||||
|           this.originalOptions = this.deepCopyObj(this.options) | ||||
|           this._DialogObject.close() | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) | ||||
|           let cdoptions = this.deepCopyObj(this.options) | ||||
|           cdoptions.host = '' | ||||
|           this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(cdoptions) | ||||
|           syncData(this.sdk, this.options.id) | ||||
|           syncSplitData(this.sdk, this.options.id) | ||||
|         }, | ||||
|  | ||||
| @ -34,10 +34,10 @@ class LabelObject extends Base { | ||||
|     } | ||||
|     this.options.text = textArray.join('\n') | ||||
|     this.options.fontFamily = options.fontFamily || 0 | ||||
|     this.font = getFontFamily(this.options.fontFamily) || 'Helvetica' | ||||
|     this.font = getFontFamily(this.options.fontFamily) || 'SimHei' | ||||
|     this.options.fontSize = options.fontSize || 20 | ||||
|     this.options.lineWidth = options.lineWidth || 4 | ||||
|     this.options.lineColor = options.lineColor || '#fff000' | ||||
|     this.options.lineColor = options.lineColor || '#00ffff80' | ||||
|     this.options.color = options.color || '#ffffff' | ||||
|     this.options.ground = | ||||
|       options.ground || options.ground === false ? options.ground : true | ||||
| @ -46,8 +46,8 @@ class LabelObject extends Base { | ||||
|         ? options.pixelOffset | ||||
|         : 20 | ||||
|     this.options.backgroundColor = options.backgroundColor || [ | ||||
|       '#42c6ef', | ||||
|       '#42c6ef' | ||||
|       '#00ffff80', | ||||
|       '#00ffff80' | ||||
|     ] | ||||
|     this.event = new MouseEvent(this.sdk) | ||||
|     this.entity | ||||
| @ -407,7 +407,7 @@ class LabelObject extends Base { | ||||
|  | ||||
|   set fontFamily(v) { | ||||
|     this.options.fontFamily = v || 0 | ||||
|     this.font = getFontFamily(this.options.fontFamily) || 'Helvetica' | ||||
|     this.font = getFontFamily(this.options.fontFamily) || 'SimHei' | ||||
|     this.updateBillboardImage() | ||||
|   } | ||||
|  | ||||
| @ -415,7 +415,7 @@ class LabelObject extends Base { | ||||
|     return this.options.lineWidth | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.lineWidth = Number(v) | ||||
|     this.options.lineWidth = ((Number(v) || Number(v) === 0) ? Number(v) : 4) | ||||
|     if (!this.entity) { | ||||
|       return | ||||
|     } | ||||
| @ -443,7 +443,7 @@ class LabelObject extends Base { | ||||
|     return this.options.pixelOffset | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.lineColor = v | ||||
|     this.options.lineColor = v || '#00ffff80' | ||||
|     if (!this.entity) { | ||||
|       return | ||||
|     } | ||||
|  | ||||
| @ -24,7 +24,7 @@ class PincerArrowObject extends Base { | ||||
|    * @param options {object} 属性 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.height {number} 高度 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    * @param {Array.<object>} options.positions 坐标数组 [{lon,lat,alt},...] | ||||
| @ -34,13 +34,13 @@ class PincerArrowObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.positions = options.positions || [] | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     this.options.height = options.height | ||||
|     this.options.loop = options.loop || false | ||||
| @ -62,8 +62,8 @@ class PincerArrowObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -122,14 +122,14 @@ class PincerArrowObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -139,14 +139,14 @@ class PincerArrowObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -253,25 +253,25 @@ class PincerArrowObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -283,10 +283,10 @@ class PincerArrowObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineWidth && this._elms.lineWidth.forEach((item) => { | ||||
|       item.value = v | ||||
|       item.value = this.options.line.width | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -479,7 +479,7 @@ class PincerArrowObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -25,7 +25,7 @@ class PolygonObject extends Base { | ||||
|    * @param options.id {string} 唯一标识 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.height {number} 高度 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    * @param options.line {object} 边框 | ||||
| @ -39,15 +39,15 @@ class PolygonObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options) | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || '#36c4ff' | ||||
|     this.options.color = options.color || '#ff000080' | ||||
|     this.options.show = | ||||
|       options.show || options.show === false ? options.show : true | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.positions = options.positions || [] | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = | ||||
|       this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|       this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     this.entity | ||||
|     this.event = new MouseEvent(this.sdk) | ||||
| @ -74,8 +74,8 @@ class PolygonObject extends Base { | ||||
|         options.label.pixelOffset || options.label.pixelOffset === 0 | ||||
|           ? options.label.pixelOffset | ||||
|           : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: | ||||
|         options.label.near || options.label.near === 0 | ||||
| @ -133,18 +133,18 @@ class PolygonObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       this.heightMode = 0 | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -154,14 +154,14 @@ class PolygonObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini', //颜色box类型 | ||||
|           alpha: true, //是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false, //是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity', //打开颜色选择器动画 | ||||
|           sure: c => { | ||||
|             this.color = c | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -269,25 +269,25 @@ class PolygonObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini', //颜色box类型 | ||||
|           alpha: true, //是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false, //是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity', //打开颜色选择器动画 | ||||
|           sure: c => { | ||||
|             this.lineColor = c | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -299,8 +299,8 @@ class PolygonObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width = ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineWidth && | ||||
|       this._elms.lineWidth.forEach(item => { | ||||
|         item.value = v | ||||
| @ -504,7 +504,7 @@ class PolygonObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -24,7 +24,7 @@ class PolyhedronObject extends Base { | ||||
|    * @param options.id {string} 唯一标识 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#0df7f8" {string} 颜色 | ||||
|    * @param options.color="#ff0000" {string} 颜色 | ||||
|    * @param options.height=10 {number} 高 | ||||
|    * @param {Array.<object>} options.positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...] | ||||
|    * @param _Dialog {object} 弹框事件 | ||||
| @ -32,7 +32,7 @@ class PolyhedronObject extends Base { | ||||
|    * */ | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.color = options.color || "#0df7f8" | ||||
|     this.options.color = options.color || "#ff0000" | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.height = (options.height || options.height === 0) ? options.height : 10 | ||||
|     if (this.options.height <= 0.01) { | ||||
| @ -54,8 +54,8 @@ class PolyhedronObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -381,7 +381,7 @@ class PolyhedronObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff0000' | ||||
|     if(!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
| @ -398,7 +398,7 @@ class PolyhedronObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
| @ -662,7 +662,7 @@ class PolyhedronObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -53,8 +53,8 @@ class PolyhedronObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -599,7 +599,7 @@ class PolyhedronObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -97,6 +97,27 @@ function html(that) { | ||||
|                         <div class="col"> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="row" id="dashTextureDom"> | ||||
|                         <div class="col"> | ||||
|                             <span class="label">动画顺向</span> | ||||
|                             <input class="btn-switch" type="checkbox" @model="rotate"> | ||||
|                         </div> | ||||
|                         <div class="col"> | ||||
|                             <span class="label">动画时长</span> | ||||
|                             <div class="input-number input-number-unit-1" style="width: 80px;"> | ||||
|                                 <input class="input" type="number" title="" min="0" max="999999" step="0.1" @model="speed"> | ||||
|                                 <span class="unit">s</span> | ||||
|                                 <span class="arrow"></span> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                         <div class="col" > | ||||
|                               <span class="label lineSpace">间距</span> | ||||
|                               <div class="input-number input-number-unit-1 lineSpace" style="width: 80px;"> | ||||
|                                   <input class="input" type="number" title="" min="0" max="4.5" step="0.1" @model="space"> | ||||
|                                   <span class="arrow"></span> | ||||
|                               </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="row"> | ||||
|                         <div class="col"> | ||||
|                             <span class="label">线段缓冲</span> | ||||
|  | ||||
| @ -40,9 +40,11 @@ class eventBinding { | ||||
|                     value = Number(value) | ||||
|                     if ((e.target.max) && value > Number(e.target.max)) { | ||||
|                       value = Number(e.target.max) | ||||
|                       e.target.value = value | ||||
|                     } | ||||
|                     if ((e.target.min) && value < Number(e.target.min)) { | ||||
|                       value = Number(e.target.min) | ||||
|                       e.target.value = value | ||||
|                     } | ||||
|                     if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { | ||||
|                       value = Number(e.target.dataset.min) | ||||
|  | ||||
| @ -13,7 +13,6 @@ import MouseTip from '../../../MouseTip' | ||||
| import Controller from '../../../Controller/index' | ||||
| import { syncData } from '../../../Global/MultiViewportMode' | ||||
| import { legp } from '../../Element/datalist' | ||||
| import { getFontList, getFontFamilyName } from '../../Element/fontSelect' | ||||
| import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/SplitScreen' | ||||
| import { setActiveViewer, closeRotateAround, closeViewFollow } from '../../../Global/global' | ||||
|  | ||||
| @ -24,8 +23,8 @@ class PolylineObject extends Base { | ||||
|    * @description 折线 | ||||
|    * @param options {object} 线属性 | ||||
|    * @param options.name{string} 名称 | ||||
|    * @param options.width=5{number} 线宽 | ||||
|    * @param options.color=#0df89e {string} 颜色 | ||||
|    * @param options.width=3{number} 线宽 | ||||
|    * @param options.color=#ff0000 {string} 颜色 | ||||
|    * @param options.type=0 {number} 材质类型 0-实线 1-虚线 2-泛光 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对高度;2:依附模式) | ||||
|    * @param options['nose-to-tail']=false {boolean} 首尾相连 | ||||
| @ -52,12 +51,16 @@ class PolylineObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options) | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.width = options.width || 10 | ||||
|     this.options.color = options.color || '#0df89e' | ||||
|     this.options.width = ((options.width || options.width === 0) ? options.width : 3) | ||||
|     this.options.color = options.color || '#ff0000' | ||||
|     this.options.type = options.type ? Number(options.type) : 0 | ||||
|     this.options['nose-to-tail'] = options['nose-to-tail'] || false | ||||
|     this.options.smooth = options.smooth || false | ||||
|     this.options.extend = options.extend || false | ||||
|     this.options.rotate = options.rotate || true | ||||
|     this.options.space = options.space || 0.1 | ||||
|     this.options.speed = options.speed || 1 | ||||
|     this.options.dashSize = options.dashSize || 0.03 | ||||
|     this.options['length-unit'] = options['length-unit'] || '米' | ||||
|     this.options['fit-length-unit'] = options['fit-length-unit'] || '米' | ||||
|     this.options['extend-width'] = | ||||
| @ -78,7 +81,6 @@ class PolylineObject extends Base { | ||||
|         options.label.fontSize || options.label.fontSize === 0 | ||||
|           ? options.label.fontSize | ||||
|           : 20, | ||||
|       fontFamily: options.label.fontFamily ? options.label.fontFamily : 0, | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: | ||||
|         options.label.lineWidth || options.label.lineWidth === 0 | ||||
| @ -88,8 +90,8 @@ class PolylineObject extends Base { | ||||
|         options.label.pixelOffset || options.label.pixelOffset === 0 | ||||
|           ? options.label.pixelOffset | ||||
|           : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: | ||||
|         options.label.near || options.label.near === 0 | ||||
| @ -145,22 +147,22 @@ class PolylineObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.entity.polyline.material = this.getMaterial(v, this.options.type) | ||||
|     this.options.color = v || '#ff0000' | ||||
|     this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options) | ||||
|     if (this._elms.color) { | ||||
|       this._elms.color.forEach((item, i) => { | ||||
|         let colorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini', //颜色box类型 | ||||
|           alpha: true, //是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false, //是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity', //打开颜色选择器动画 | ||||
|           sure: c => { | ||||
|             this.color = c | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,1)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -168,6 +170,48 @@ class PolylineObject extends Base { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   get speed() { | ||||
|     return this.options.speed | ||||
|   } | ||||
|  | ||||
|   set speed(v) { | ||||
|     this.options.speed = v | ||||
|     this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options) | ||||
|   } | ||||
|   get dashSize() { | ||||
|     return this.options.dashSize | ||||
|   } | ||||
|  | ||||
|   set dashSize(v) { | ||||
|     this.options.dashSize = v | ||||
|     this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options) | ||||
|   } | ||||
|  | ||||
|   get rotate() { | ||||
|     return this.options.rotate | ||||
|   } | ||||
|  | ||||
|   set rotate(v) { | ||||
|     this.options.rotate = v | ||||
|     PolylineObject.closeNodeEdit(this) | ||||
|     this._elms.rotate && | ||||
|       this._elms.rotate.forEach(item => { | ||||
|         item.checked = v | ||||
|       }) | ||||
|  | ||||
|     this.options.rotate = v | ||||
|     this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options) | ||||
|   } | ||||
|  | ||||
|   get space() { | ||||
|     return this.options.space | ||||
|   } | ||||
|  | ||||
|   set space(v) { | ||||
|     this.options.space = v | ||||
|     this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options) | ||||
|   } | ||||
|  | ||||
|   get length() { | ||||
|     return this.options.length | ||||
|   } | ||||
| @ -245,10 +289,10 @@ class PolylineObject extends Base { | ||||
|   } | ||||
|  | ||||
|   set lineWidth(v) { | ||||
|     this.options.width = v | ||||
|     this.options.width = (v || v == 0) ? v : 3 | ||||
|     this._elms.lineWidth && | ||||
|       this._elms.lineWidth.forEach(item => { | ||||
|         item.value = v | ||||
|         item.value = this.options.width | ||||
|       }) | ||||
|     this.entity && | ||||
|       this.entity.polyline && | ||||
| @ -275,6 +319,56 @@ class PolylineObject extends Base { | ||||
|         name: '泛光', | ||||
|         value: '泛光', | ||||
|         key: 2 | ||||
|       }, | ||||
|       { | ||||
|         name: '尾迹光线', | ||||
|         value: '尾迹光线', | ||||
|         key: 3 | ||||
|       }, | ||||
|       { | ||||
|         name: '多尾迹光线', | ||||
|         value: '多尾迹光线', | ||||
|         key: 4 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动虚线1', | ||||
|         value: '流动虚线1', | ||||
|         key: 5 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动虚线2', | ||||
|         value: '流动虚线2', | ||||
|         key: 6 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头1', | ||||
|         value: '流动箭头1', | ||||
|         key: 7 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头2', | ||||
|         value: '流动箭头2', | ||||
|         key: 8 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头3', | ||||
|         value: '流动箭头3', | ||||
|         key: 9 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头4', | ||||
|         value: '流动箭头4', | ||||
|         key: 10 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头5', | ||||
|         value: '流动箭头5', | ||||
|         key: 11 | ||||
|       }, | ||||
|       { | ||||
|         name: '流动箭头6', | ||||
|         value: '流动箭头6', | ||||
|         key: 12 | ||||
|       } | ||||
|     ] | ||||
|     this.options.type = Number(v) | ||||
| @ -283,6 +377,18 @@ class PolylineObject extends Base { | ||||
|         this._elms.lineType && | ||||
|           this._elms.lineType.forEach(item => { | ||||
|             item.value = lineTypeData[i].value | ||||
|             if (2 < item.value && item.value < 13) {//贴图参数 | ||||
|               document.getElementById('dashTextureDom').style.display = 'flex' | ||||
|             } else { | ||||
|               document.getElementById('dashTextureDom').style.display = 'none' | ||||
|             } | ||||
|             if (2 < item.value && item.value < 5) {//尾迹参数 | ||||
|               document.getElementsByClassName('lineSpace')[0].style.display = 'none' | ||||
|               document.getElementsByClassName('lineSpace')[1].style.display = 'none' | ||||
|             } else { | ||||
|               document.getElementsByClassName('lineSpace')[0].style.display = 'flex' | ||||
|               document.getElementsByClassName('lineSpace')[1].style.display = 'flex' | ||||
|             } | ||||
|           }) | ||||
|         break | ||||
|       } | ||||
| @ -291,7 +397,9 @@ class PolylineObject extends Base { | ||||
|       this.entity.polyline && | ||||
|       (this.entity.polyline.material = this.getMaterial( | ||||
|         this.options.color, | ||||
|         this.options.type | ||||
|         this.options.type, | ||||
|         this.entity, | ||||
|         this.options | ||||
|       )) | ||||
|   } | ||||
|   get noseToTail() { | ||||
| @ -445,6 +553,7 @@ class PolylineObject extends Base { | ||||
|  | ||||
|   set extendWidth(v) { | ||||
|     this.options['extend-width'] = v | ||||
|     this.heightMode = this.heightMode | ||||
|     this._elms.extendWidth && | ||||
|       this._elms.extendWidth.forEach(item => { | ||||
|         item.value = v | ||||
| @ -507,21 +616,6 @@ class PolylineObject extends Base { | ||||
|       }) | ||||
|   } | ||||
|  | ||||
|   get labelFontFamily() { | ||||
|     return this.options.label.fontFamily | ||||
|   } | ||||
|  | ||||
|   set labelFontFamily(v) { | ||||
|     this.options.label.fontFamily = v || 0 | ||||
|     this.label && (this.label.fontFamily = this.options.label.fontFamily) | ||||
|  | ||||
|     let name = getFontFamilyName(this.labelFontFamily) || '' | ||||
|     this._elms.labelFontFamily && | ||||
|       this._elms.labelFontFamily.forEach(item => { | ||||
|         item.value = name | ||||
|       }) | ||||
|   } | ||||
|  | ||||
|   get labelColor() { | ||||
|     return this.options.label.color | ||||
|   } | ||||
| @ -645,7 +739,7 @@ class PolylineObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           }, //点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           } //点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
| @ -1141,7 +1235,6 @@ class PolylineObject extends Base { | ||||
|       ], | ||||
|       text: that.options.name, | ||||
|       fontSize: that.options.label.fontSize, | ||||
|       fontFamily: that.options.label.fontFamily, | ||||
|       color: that.options.label.color, | ||||
|       pixelOffset: that.options.label.pixelOffset, | ||||
|       backgroundColor: that.options.label.backgroundColor, | ||||
| @ -1170,7 +1263,7 @@ class PolylineObject extends Base { | ||||
|         positions: Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray), | ||||
|         width: that.options.width, | ||||
|         clampToGround: ground, | ||||
|         material: that.getMaterial(that.options.color, that.options.type), | ||||
|         material: that.getMaterial(that.options.color, that.options.type, that.entity, that.options), | ||||
|         zIndex: that.sdk._entityZIndex | ||||
|       } | ||||
|     }) | ||||
| @ -1508,6 +1601,56 @@ class PolylineObject extends Base { | ||||
|             name: '泛光', | ||||
|             value: '泛光', | ||||
|             key: 2 | ||||
|           }, | ||||
|           { | ||||
|             name: '尾迹光线', | ||||
|             value: '尾迹光线', | ||||
|             key: 3 | ||||
|           }, | ||||
|           { | ||||
|             name: '多尾迹光线', | ||||
|             value: '多尾迹光线', | ||||
|             key: 4 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动虚线1', | ||||
|             value: '流动虚线1', | ||||
|             key: 5 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动虚线2', | ||||
|             value: '流动虚线2', | ||||
|             key: 6 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头1', | ||||
|             value: '流动箭头1', | ||||
|             key: 7 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头2', | ||||
|             value: '流动箭头2', | ||||
|             key: 8 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头3', | ||||
|             value: '流动箭头3', | ||||
|             key: 9 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头4', | ||||
|             value: '流动箭头4', | ||||
|             key: 10 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头5', | ||||
|             value: '流动箭头5', | ||||
|             key: 11 | ||||
|           }, | ||||
|           { | ||||
|             name: '流动箭头6', | ||||
|             value: '流动箭头6', | ||||
|             key: 12 | ||||
|           } | ||||
|         ] | ||||
|         let lineTypeDataLegpObject = legp( | ||||
| @ -1533,6 +1676,20 @@ class PolylineObject extends Base { | ||||
|             for (let i = 0; i < lineTypeData.length; i++) { | ||||
|               if (lineTypeData[i].value === lineTypeDataLegpElm.value) { | ||||
|                 this.lineType = lineTypeData[i].key | ||||
|  | ||||
|                 //控制参数显隐 | ||||
|                 if (2 < this.lineType && this.lineType < 13) {//贴图参数 | ||||
|                   document.getElementById('dashTextureDom').style.display = 'flex' | ||||
|                 } else { | ||||
|                   document.getElementById('dashTextureDom').style.display = 'none' | ||||
|                 } | ||||
|                 if (2 < this.lineType && this.lineType < 5) {//尾迹参数 | ||||
|                   document.getElementsByClassName('lineSpace')[0].style.display = 'none' | ||||
|                   document.getElementsByClassName('lineSpace')[1].style.display = 'none' | ||||
|                 } else { | ||||
|                   document.getElementsByClassName('lineSpace')[0].style.display = 'flex' | ||||
|                   document.getElementsByClassName('lineSpace')[1].style.display = 'flex' | ||||
|                 } | ||||
|                 break | ||||
|               } | ||||
|             } | ||||
| @ -1760,37 +1917,6 @@ class PolylineObject extends Base { | ||||
|           this._elms.altInput.push(altInput) | ||||
|           tBodyElm.appendChild(tr) | ||||
|         } | ||||
|  | ||||
|         let fontData = getFontList() | ||||
|         let fontObject = legp( | ||||
|           this._DialogObject._element.content.getElementsByClassName( | ||||
|             'font-select-box' | ||||
|           )[0], | ||||
|           '.font-select' | ||||
|         ) | ||||
|         if (fontObject) { | ||||
|           fontObject.legp_search(fontData) | ||||
|           let fontDataLegpElm = this._DialogObject._element.content | ||||
|             .getElementsByClassName('font-select')[0] | ||||
|             .getElementsByTagName('input')[0] | ||||
|           fontDataLegpElm.value = fontData[this.labelFontFamily].value | ||||
|           for (let i = 0; i < fontData.length; i++) { | ||||
|             if (fontData[i].value == fontDataLegpElm.value) { | ||||
|               fontObject.legp_searchActive(fontData[i].value) | ||||
|               break | ||||
|             } | ||||
|           } | ||||
|           fontDataLegpElm.addEventListener('input', () => { | ||||
|             for (let i = 0; i < fontData.length; i++) { | ||||
|               if (fontData[i].value === fontDataLegpElm.value) { | ||||
|                 this.labelFontFamily = fontData[i].key | ||||
|                 break | ||||
|               } | ||||
|             } | ||||
|           }) | ||||
|           this._elms.labelFontFamily = [fontDataLegpElm] | ||||
|         } | ||||
|  | ||||
|       }, 0) | ||||
|     } else { | ||||
|       if (this._DialogObject && this._DialogObject.close) { | ||||
| @ -1972,10 +2098,6 @@ class PolylineObject extends Base { | ||||
|     this.labelShow = this.originalOptions.label.show | ||||
|     this.labelColor = this.originalOptions.label.color | ||||
|     this.labelFontSize = this.originalOptions.label.fontSize | ||||
|     this.labelFontFamily = this.originalOptions.label.fontFamily | ||||
|     this.labelScaleByDistance = this.originalOptions.label.scaleByDistance | ||||
|     this.labelNear = this.originalOptions.label.near | ||||
|     this.labelFar = this.originalOptions.label.far | ||||
|     this.labelLineWidth = this.originalOptions.label.lineWidth | ||||
|     this.labelPixelOffset = this.originalOptions.label.pixelOffset | ||||
|     this.labelLineColor = this.originalOptions.label.lineColor | ||||
| @ -1987,6 +2109,10 @@ class PolylineObject extends Base { | ||||
|     this.attributeVr = this.options.attribute.vr.content | ||||
|     this.attributeCamera = this.options.attribute.camera.content | ||||
|     this.attributeGoods = this.options.attribute.goods.content | ||||
|     this.rotate = this.originalOptions.rotate | ||||
|     this.speed = this.originalOptions.speed | ||||
|     this.dashSize = this.originalOptions.dashSize | ||||
|     this.space = this.originalOptions.space | ||||
|     this.cameraSelect && this.cameraSelect() | ||||
|     this.goodsSelect && this.goodsSelect() | ||||
|  | ||||
| @ -2039,7 +2165,7 @@ class PolylineObject extends Base { | ||||
|         .value | ||||
|     ) { | ||||
|       this.options.attribute.link.content.push({ | ||||
|         name: '链接', | ||||
|         name: '链接' + (this.options.attribute.link.content.length + 1), | ||||
|         url: this._DialogObject._element.content.getElementsByClassName( | ||||
|           'link_add' | ||||
|         )[0].value | ||||
| @ -2057,7 +2183,7 @@ class PolylineObject extends Base { | ||||
|       // input.addEventListener('change', (event) => { | ||||
|       //   if (input.value) { | ||||
|       //     this.options.attribute.link.content.push({ | ||||
|       //       name: '链接', | ||||
|       //       name: '链接' + (this.options.attribute.link.content.length + 1), | ||||
|       //       url: input.value | ||||
|       //     }) | ||||
|       //     this.attributeLink = this.options.attribute.link.content | ||||
| @ -2067,7 +2193,7 @@ class PolylineObject extends Base { | ||||
|   } | ||||
|   addAttributeLink(link) { | ||||
|     this.options.attribute.link.content.push({ | ||||
|       name: '链接', | ||||
|       name: '链接' + (this.options.attribute.link.content.length + 1), | ||||
|       url: link | ||||
|     }) | ||||
|     this.attributeLink = this.options.attribute.link.content | ||||
| @ -2080,7 +2206,7 @@ class PolylineObject extends Base { | ||||
|       )[0].value | ||||
|     ) { | ||||
|       this.options.attribute.vr.content.push({ | ||||
|         name: '全景图' , | ||||
|         name: '全景图' + (this.options.attribute.vr.content.length + 1), | ||||
|         url: this._DialogObject._element.content.getElementsByClassName( | ||||
|           'vr_add' | ||||
|         )[0].value | ||||
| @ -2096,7 +2222,7 @@ class PolylineObject extends Base { | ||||
|  | ||||
|   addAttributeRr(vr) { | ||||
|     this.options.attribute.vr.content.push({ | ||||
|       name: '全景图' , | ||||
|       name: '全景图' + (this.options.attribute.vr.content.length + 1), | ||||
|       url: vr | ||||
|     }) | ||||
|     this.attributeVr = this.options.attribute.vr.content | ||||
|  | ||||
| @ -53,8 +53,8 @@ class RadarScan extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -594,7 +594,7 @@ class RadarScan extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -58,8 +58,8 @@ class RadarScanStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -86,6 +86,10 @@ class RadarScanStereoscopic extends Base { | ||||
|     RadarScanStereoscopic.radarSolidScan(this) | ||||
|   } | ||||
|  | ||||
|   get type() { | ||||
|     return 'RadarScanStereoscopic' | ||||
|   } | ||||
|  | ||||
|   static radarSolidScan(that) { | ||||
|     let viewer = that.sdk.viewer | ||||
|     let options = that.options | ||||
| @ -565,7 +569,7 @@ class RadarScanStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -23,7 +23,7 @@ class SectorObject extends Base { | ||||
|    * @param options.id {string} 标注id | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.center {object} 位置 | ||||
|    * @param options.center.lng {object} 经度 | ||||
|    * @param options.center.lat {object} 维度 | ||||
| @ -31,7 +31,7 @@ class SectorObject extends Base { | ||||
|    * @param options.startAngle=10 {number} 起始方向 | ||||
|    * @param options.endAngle=0 {number} 结束方向 | ||||
|    * @param options.line {object} 边框 | ||||
|    * @param options.line.width=2 {string} 边框宽 | ||||
|    * @param options.line.width=3 {string} 边框宽 | ||||
|    * @param options.line.color="rgba(155, 155, 124, 0.89)" {string} 边框颜色 | ||||
|    * @param options.label {object} 标注 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
| @ -39,15 +39,15 @@ class SectorObject extends Base { | ||||
|   constructor(sdk, options = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.semiMinorAxis = (options.semiMinorAxis || options.semiMinorAxis === 0) ? options.semiMinorAxis : 10 | ||||
|     this.options.semiMajorAxis = (options.semiMajorAxis || options.semiMajorAxis === 0) ? options.semiMajorAxis : 20 | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.center = options.center || {} | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     options.label = options.label || {} | ||||
|     this._elms = {}; | ||||
| @ -60,8 +60,8 @@ class SectorObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -226,14 +226,14 @@ class SectorObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -244,14 +244,14 @@ class SectorObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.color = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.color = 'rgba(255,255,255,1)' | ||||
|             this.color = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.color[i] = colorPicker | ||||
| @ -263,25 +263,25 @@ class SectorObject extends Base { | ||||
|     return this.options.line.color | ||||
|   } | ||||
|   set lineColor(v) { | ||||
|     this.options.line.color = v | ||||
|     this.options.line.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polyline) { | ||||
|       return | ||||
|     } | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(v) | ||||
|     this.entity.polyline.material = Cesium.Color.fromCssColorString(this.options.line.color) | ||||
|     if (this._elms.lineColor) { | ||||
|       this._elms.lineColor.forEach((item, i) => { | ||||
|         let lineColorPicker = new ewPlugins('colorpicker', { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.line.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
|             this.lineColor = c | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.lineColor = 'rgba(255,255,255,1)' | ||||
|             this.lineColor = 'rgba(255,0,0,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.lineColor[i] = lineColorPicker | ||||
| @ -293,10 +293,10 @@ class SectorObject extends Base { | ||||
|     return this.options.line.width | ||||
|   } | ||||
|   set lineWidth(v) { | ||||
|     this.options.line.width = v | ||||
|     this.entity.polyline.width = v | ||||
|     this.options.line.width =  ((v || v === 0) ? v : 3) | ||||
|     this.entity.polyline.width = this.options.line.width | ||||
|     this._elms.lineWidth && this._elms.lineWidth.forEach((item) => { | ||||
|       item.value = v | ||||
|       item.value = this.options.line.width | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -489,7 +489,7 @@ class SectorObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -24,7 +24,7 @@ class StraightArrowObject extends Base { | ||||
|    * @param options {object} 属性 | ||||
|    * @param options.show=true {boolean} 显示/隐藏 | ||||
|    * @param options.name {string} 名称 | ||||
|    * @param options.color="#36c4ff" {string} 颜色 | ||||
|    * @param options.color="#ff000080" {string} 颜色 | ||||
|    * @param options.height {number} 高度 | ||||
|    * @param options.heightMode=2{number} 高度模式(0:海拔高度;1:相对地表;2:依附模式) | ||||
|    * @param {Array.<object>} options.positions 坐标数组 [{lon,lat,alt},...] | ||||
| @ -34,13 +34,13 @@ class StraightArrowObject extends Base { | ||||
|   constructor(sdk, options = {}, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.name = options.name || '未命名对象' | ||||
|     this.options.color = options.color || "#36c4ff" | ||||
|     this.options.color = options.color || "#ff000080" | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options.heightMode = (options.heightMode || options.heightMode == 0) ? options.heightMode : 2 | ||||
|     this.options.positions = options.positions || [] | ||||
|     this.options.line = options.line || {} | ||||
|     this.options.line.width = this.options.line.width || 2 | ||||
|     this.options.line.color = this.options.line.color || 'rgba(155, 155, 124, 0.89)' | ||||
|     this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3) | ||||
|     this.options.line.color = this.options.line.color || '#ff000080' | ||||
|     this.options['area-unit'] = options['area-unit'] || '平方米' | ||||
|     this.entity | ||||
|     this.event = new MouseEvent(this.sdk) | ||||
| @ -60,8 +60,8 @@ class StraightArrowObject extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -109,14 +109,14 @@ class StraightArrowObject extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff000080' | ||||
|     if (!this.sdk || !this.sdk.viewer || !this.entity || !this.entity.polygon) { | ||||
|       return | ||||
|     } | ||||
|     let material = Cesium.Color.fromCssColorString(v) | ||||
|     let material = Cesium.Color.fromCssColorString(this.options.color) | ||||
|     if (this.sdk.viewer.scene.mode === 2) { | ||||
|       material = new Cesium.CustomColorMaterialSource({ | ||||
|         color: v | ||||
|         color: this.options.color | ||||
|       }) | ||||
|     } | ||||
|     this.entity.polygon.material = material | ||||
| @ -126,7 +126,7 @@ class StraightArrowObject extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
| @ -466,7 +466,7 @@ class StraightArrowObject extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -100,7 +100,7 @@ class TrajectoryMotion extends Base { | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -1305,9 +1305,10 @@ class TrajectoryMotion extends Base { | ||||
|   } | ||||
|   // 创建模型 | ||||
|   static async addModel(that) { | ||||
|     let url = that.replaceHost(that.options.model.url, that.options.host) | ||||
|     let options = { | ||||
|       id: that.options.id, | ||||
|       url: that.options.model.url, | ||||
|       url: url, | ||||
|       show: that.options.show ? that.options.model.show : false, | ||||
|       scale: that.options.model.scale, | ||||
|       // minimumPixelSize: that.options.model.pixelSize, | ||||
| @ -2285,7 +2286,7 @@ class TrajectoryMotion extends Base { | ||||
|  | ||||
|   async changeModelUrl(url) { | ||||
|     this.sdk.viewer.scene.primitives.remove(this.model) | ||||
|     this.options.model.url = url | ||||
|     this.options.model.url = this.replaceHost(url, this.options.host) | ||||
|     let matrix = this.model.modelMatrix | ||||
|     let position = this.model.position | ||||
|     let options = { | ||||
|  | ||||
| @ -41,7 +41,7 @@ function html(that) { | ||||
|                 <div class="corner-type"></div> | ||||
|             </div> | ||||
|             <div class="col material-box"> | ||||
|                 <span class="label">材质样式</span> | ||||
|                 <span class="label">墙体样式</span> | ||||
|                 <div class="material"></div> | ||||
|             </div> | ||||
|         </div> | ||||
|  | ||||
| @ -32,7 +32,7 @@ class WallRealStereoscopic extends Base { | ||||
|    * @param options['nose-to-tail']=false {boolean} 首尾相连 | ||||
|    * @param options.extrudedHeight=2.4 {number} 拉伸高度 | ||||
|    * @param options.cornerType=0 {string} 拐角类型;0:直角;1:斜角;2:圆角 | ||||
|    * @param options.material=0 {number} 材质,0:纯色墙;1:砖墙1;2:砖墙2;3:砖墙3 | ||||
|    * @param options.material=0 {number} 材质,0:纯色墙;1:红砖;2:黄砖;3:灰瓷 | ||||
|    * @param {Array.<object>} positions 经纬度和高度的列表,值交替 [{lon,lat,alt},...] | ||||
|    * @param _Dialog {object} 弹框事件 | ||||
|    * @param _Dialog.confirmCallBack {function} 弹框确认时的回调 | ||||
| @ -60,8 +60,8 @@ class WallRealStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -398,7 +398,7 @@ class WallRealStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
| @ -1368,20 +1368,20 @@ class WallRealStereoscopic extends Base { | ||||
|           icon: 'icon-wall' | ||||
|         }, | ||||
|         { | ||||
|           name: '<i class="icon icon-wall-brick1"></i>砖墙1', | ||||
|           value: '砖墙1', | ||||
|           name: '<i class="icon icon-wall-brick1"></i>红砖墙', | ||||
|           value: '红砖墙', | ||||
|           key: 1, | ||||
|           icon: 'icon-wall-brick1' | ||||
|         }, | ||||
|         { | ||||
|           name: '<i class="icon icon-wall-brick2"></i>砖墙2', | ||||
|           value: '砖墙2', | ||||
|           name: '<i class="icon icon-wall-brick2"></i>黄砖墙', | ||||
|           value: '黄砖墙', | ||||
|           key: 2, | ||||
|           icon: 'icon-wall-brick2' | ||||
|         }, | ||||
|         { | ||||
|           name: '<i class="icon icon-wall-brick3"></i>砖墙3', | ||||
|           value: '砖墙3', | ||||
|           name: '<i class="icon icon-wall-brick3"></i>灰瓷墙', | ||||
|           value: '灰瓷墙', | ||||
|           key: 3, | ||||
|           icon: 'icon-wall-brick3' | ||||
|         } | ||||
|  | ||||
| @ -47,8 +47,8 @@ class WallStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -287,7 +287,7 @@ class WallStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -58,8 +58,8 @@ class WallRealStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -373,7 +373,7 @@ class WallRealStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -47,8 +47,8 @@ class WallStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -287,7 +287,7 @@ class WallStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -32,10 +32,10 @@ class WallStereoscopic extends Base { | ||||
|    * */ | ||||
|   constructor(sdk, options, _Dialog = {}) { | ||||
|     super(sdk, options); | ||||
|     this.options.color = options.color || "#00d9ff" | ||||
|     this.options.color = options.color || "#ff0000" | ||||
|     this.options.extrudedHeight = options.extrudedHeight || 2.4 | ||||
|     this.options.positions = options.positions | ||||
|     this.options.material = Number(options.material) || 0 | ||||
|     this.options.material = (Number(options.material) || Number(options.material) === 0) ? Number(options.material) : 3 | ||||
|     this.options.duration = (options.duration || options.duration === 0) ? options.duration : 1000 | ||||
|     this.options.show = (options.show || options.show === false) ? options.show : true | ||||
|     this.options['nose-to-tail'] = options['nose-to-tail'] || false | ||||
| @ -51,8 +51,8 @@ class WallStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -113,7 +113,7 @@ class WallStereoscopic extends Base { | ||||
|     return this.options.color | ||||
|   } | ||||
|   set color(v) { | ||||
|     this.options.color = v | ||||
|     this.options.color = v || '#ff0000' | ||||
|     this.entity.polylineVolume.material = this.getMaterial() | ||||
|     if (this._elms.color) { | ||||
|       this._elms.color.forEach((item, i) => { | ||||
| @ -121,7 +121,7 @@ class WallStereoscopic extends Base { | ||||
|           el: item.el, | ||||
|           size: 'mini',//颜色box类型 | ||||
|           alpha: true,//是否开启透明度 | ||||
|           defaultColor: v, | ||||
|           defaultColor: this.options.color, | ||||
|           disabled: false,//是否禁止打开颜色选择器 | ||||
|           openPickerAni: 'opacity',//打开颜色选择器动画 | ||||
|           sure: (c) => { | ||||
| @ -140,10 +140,10 @@ class WallStereoscopic extends Base { | ||||
|     return this.options.material | ||||
|   } | ||||
|   set material(v) { | ||||
|     this.options.material = Number(v) | ||||
|     this.options.material = (Number(v) || Number(v) === 0) ? Number(v) : 3 | ||||
|     this.entity.polylineVolume.material = this.getMaterial() | ||||
|     this._elms.material && this._elms.material.forEach((item) => { | ||||
|       item.value = v | ||||
|       item.value = this.options.material | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -336,7 +336,7 @@ class WallStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -47,8 +47,8 @@ class WallStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -287,7 +287,7 @@ class WallStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -47,8 +47,8 @@ class WallStereoscopic2 extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -306,7 +306,7 @@ class WallStereoscopic2 extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -47,8 +47,8 @@ class WallStereoscopic extends Base { | ||||
|       color: options.label.color || '#ffffff', | ||||
|       lineWidth: (options.label.lineWidth || options.label.lineWidth === 0) ? options.label.lineWidth : 4, | ||||
|       pixelOffset: (options.label.pixelOffset || options.label.pixelOffset === 0) ? options.label.pixelOffset : 20, | ||||
|       backgroundColor: options.label.backgroundColor || ['#42c6ef', '#42c6ef'], | ||||
|       lineColor: options.label.lineColor || '#fff000', | ||||
|       backgroundColor: options.label.backgroundColor || ['#00ffff80', '#00ffff80'], | ||||
|       lineColor: options.label.lineColor || '#00ffff80', | ||||
|       scaleByDistance: options.label.scaleByDistance || false, | ||||
|       near: (options.label.near || options.label.near === 0) ? options.label.near : 2000, | ||||
|       far: (options.label.far || options.label.far === 0) ? options.label.far : 100000, | ||||
| @ -287,7 +287,7 @@ class WallStereoscopic extends Base { | ||||
|             this.labelLineColor = color | ||||
|           },//点击确认按钮事件回调 | ||||
|           clear: () => { | ||||
|             this.labelLineColor = 'rgba(255,255,255,1)' | ||||
|             this.labelLineColor = 'rgba(0,255,255,0.5)' | ||||
|           },//点击清空按钮事件回调 | ||||
|         }) | ||||
|         this._elms.labelLineColor[i] = lineColorPicker | ||||
|  | ||||
| @ -6,6 +6,7 @@ | ||||
|  * @update: 2023-12-01 12:12 | ||||
|  */ | ||||
| import Tools from "../../Tools"; | ||||
| import { getHost, getToken } from "../../on"; | ||||
| import { regLeftClickCallback, regRightClickCallback, regMoveCallback } from "../../Global/ClickCallback"; | ||||
| import { regLeftClickCallback as regLeftClickCallback2, regRightClickCallback as regRightClickCallback2, regMoveCallback as regMoveCallback2 } from "../../Global/SplitScreen/ClickCallback"; | ||||
| import { setSplitDirection, syncSplitData, getSdk } from "../../Global/SplitScreen"; | ||||
| @ -27,6 +28,7 @@ class Base extends Tools { | ||||
|     this.clickCallBack = null | ||||
|     this.rightClickCallBack = null | ||||
|     this.picking = true | ||||
|     this.options.host = this.options.host || getHost() | ||||
|     this.setDefaultValue() | ||||
|  | ||||
|     // this.sdk.addIncetance(this.options.id, this) | ||||
|  | ||||
| @ -1,21 +1,27 @@ | ||||
| let fontData = [ | ||||
|   { | ||||
|     name: '黑体', | ||||
|     value: '黑体', | ||||
|     font: 'SimHei', | ||||
|     key: '0' | ||||
|   }, | ||||
|   { | ||||
|     name: '思源黑体', | ||||
|     value: '思源黑体', | ||||
|     font: 'SourceHanSansTi', | ||||
|     key: '0' | ||||
|     key: '1' | ||||
|   }, | ||||
|   { | ||||
|     name: '庞门正道标题体', | ||||
|     value: '庞门正道标题体', | ||||
|     font: 'PMZDBTTi', | ||||
|     key: '1' | ||||
|     key: '2' | ||||
|   }, | ||||
|   { | ||||
|     name: '数黑体', | ||||
|     value: '数黑体', | ||||
|     font: 'AlimamaShuHeiTi', | ||||
|     key: '2' | ||||
|     key: '3' | ||||
|   } | ||||
| ] | ||||
|  | ||||
|  | ||||
							
								
								
									
										148
									
								
								src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,148 @@ | ||||
| /* | ||||
|  * @Description: 流动线 | ||||
|  */ | ||||
| function FlowDashedLine() { | ||||
|   class FlowDashedLineFlowMaterialProperty { | ||||
|     constructor(options) { | ||||
|       this._definitionChanged = new Cesium.Event(); | ||||
|       this._color = undefined; | ||||
|       this._speed = undefined; | ||||
|       this._uType = undefined; | ||||
|       this._space = undefined; | ||||
|       this._dashSize = undefined; | ||||
|       this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)"); | ||||
|       this.speed = options.speed != undefined ? options.speed : 1.0;//速度 | ||||
|       this.space = options.space || 0.0;//速度 | ||||
|       this.dashSize = options.dashSize || 0.03;//速度 | ||||
|       this.uType = options.uType === undefined ? 1 : options.uType;//类型:0:普通流动线 1:虚化虚线 | ||||
|       this.lineBackAlpha = options.lineBackAlpha || 0.05; | ||||
|     } | ||||
|  | ||||
|     get isConstant() { | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     get definitionChanged() { | ||||
|       return this._definitionChanged; | ||||
|     } | ||||
|  | ||||
|     getType(time) { | ||||
|       return Cesium.Material.FlowDashedLineMaterialType; | ||||
|     } | ||||
|  | ||||
|     getValue(time, result) { | ||||
|       if (!Cesium.defined(result)) { | ||||
|         result = {}; | ||||
|       } | ||||
|  | ||||
|       result.color = Cesium.Property.getValueOrDefault( | ||||
|         this._color, | ||||
|         time, | ||||
|         Cesium.Color.RED, | ||||
|         result.color | ||||
|       ); | ||||
|       result.speed = Cesium.Property.getValueOrDefault( | ||||
|         this._speed, | ||||
|         time, | ||||
|         10, | ||||
|         result.speed | ||||
|       ); | ||||
|       result.space = Cesium.Property.getValueOrDefault( | ||||
|         this._space, | ||||
|         time, | ||||
|         10, | ||||
|         result.space | ||||
|       ); | ||||
|       result.dashSize = Cesium.Property.getValueOrDefault( | ||||
|         this._dashSize, | ||||
|         time, | ||||
|         10, | ||||
|         result.dashSize | ||||
|       ); | ||||
|       result.uType = Cesium.Property.getValueOrDefault( | ||||
|         this._uType, | ||||
|         time, | ||||
|         1, | ||||
|         result.uType | ||||
|       ); | ||||
|       result.lineBackAlpha = this.lineBackAlpha; | ||||
|       result.frameNumber = Cesium.getTimestamp(); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
|     equals(other) { | ||||
|       return ( | ||||
|         this === other || | ||||
|         (other instanceof FlowDashedLineFlowMaterialProperty && | ||||
|           Cesium.Property.equals(this._color, other._color) && | ||||
|           Cesium.Property.equals(this._speed, other.speed) && | ||||
|           Cesium.Property.equals(this._uType, other.uType) && | ||||
|           Cesium.Property.equals(this.lineBackAlpha, other.lineBackAlpha)) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Object.defineProperties(FlowDashedLineFlowMaterialProperty.prototype, { | ||||
|     color: Cesium.createPropertyDescriptor("color"), | ||||
|     speed: Cesium.createPropertyDescriptor("speed"), | ||||
|     space: Cesium.createPropertyDescriptor("space"), | ||||
|     dashSize: Cesium.createPropertyDescriptor("dashSize"), | ||||
|     uType: Cesium.createPropertyDescriptor("uType"), | ||||
|     transparency: Cesium.createPropertyDescriptor("lineBackAlpha"), | ||||
|   }); | ||||
|  | ||||
|   Cesium.FlowDashedLineFlowMaterialProperty = FlowDashedLineFlowMaterialProperty; | ||||
|   Cesium.Material.FlowDashedLineFlowMaterialProperty = "FlowDashedLineFlowMaterialProperty"; | ||||
|   Cesium.Material.FlowDashedLineMaterialType = "FlowDashedLineMaterialType"; | ||||
|   Cesium.Material.FlowDashedLineMaterialSource = ` | ||||
|       uniform vec4 color; | ||||
|       uniform float speed; | ||||
|       // uniform int uType; | ||||
|       uniform float lineBackAlpha; | ||||
|  | ||||
|       czm_material czm_getMaterial(czm_materialInput materialInput) | ||||
|         { | ||||
|             czm_material material = czm_getDefaultMaterial(materialInput); | ||||
|             vec2 st = materialInput.st; | ||||
|  | ||||
|             float dashSize = 0.1; | ||||
|             float gapSize = space; | ||||
|             // speed现在表示完成一次完整动画循环的秒数 | ||||
|             float progress = speed==0.0 ? 0.0 : fract(frameNumber / 1000.0 / speed); | ||||
|             float pattern = fract(st.x / dashSize * (1.0 + gapSize) + progress / dashSize * (1.0 + gapSize)); | ||||
|             float dash1 = step(0.0, pattern) - step(1.0/(1.0 + gapSize), pattern); | ||||
|             float dash2 = smoothstep(0.0, 0.2, pattern) - | ||||
|                 smoothstep(1.0/(1.0 + gapSize), | ||||
|                         1.0/(1.0 + gapSize) + 0.2, | ||||
|                         pattern); | ||||
|             float dash = (float(uType) != 1.0)?dash1:dash2; | ||||
|             material.alpha = dash; | ||||
|             material.diffuse = color.rgb; | ||||
|             return material; | ||||
|         } | ||||
|        `; | ||||
|  | ||||
|   Cesium.Material._materialCache.addMaterial( | ||||
|     Cesium.Material.FlowDashedLineMaterialType, | ||||
|     { | ||||
|       fabric: { | ||||
|         type: Cesium.Material.FlowDashedLineMaterialType, | ||||
|         uniforms: { | ||||
|           color: new Cesium.Color(1.0, 1.0, 1.0, 1.0), | ||||
|           speed: 1, | ||||
|           space: 0.0, | ||||
|           dashSize: 0.03, | ||||
|           frameNumber: Cesium.getTimestamp(), | ||||
|           uType: 1, | ||||
|           lineBackAlpha: 0.05, | ||||
|         }, | ||||
|         source: Cesium.Material.FlowDashedLineMaterialSource, | ||||
|       }, | ||||
|       translucent: function (material) { | ||||
|         return true; | ||||
|       }, | ||||
|     } | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { FlowDashedLine } | ||||
							
								
								
									
										113
									
								
								src/Obj/Materail/FlowLineMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/Obj/Materail/FlowLineMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | ||||
| /* | ||||
|  * @Description: 流动线 | ||||
|  */ | ||||
| function FlowLine() { | ||||
|   class FlowLineMaterialProperty { | ||||
|     constructor(options) { | ||||
|       this._definitionChanged = new Cesium.Event(); | ||||
|       this._color = undefined; | ||||
|       this._duration = undefined; | ||||
|       this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)"); | ||||
|       this.duration = options.duration || 10.0; | ||||
|       this.lineBackAlpha = options.lineBackAlpha || 0.05; | ||||
|     } | ||||
|  | ||||
|     get isConstant() { | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     get definitionChanged() { | ||||
|       return this._definitionChanged; | ||||
|     } | ||||
|  | ||||
|     getType(time) { | ||||
|       return Cesium.Material.FlowLineMaterialType; | ||||
|     } | ||||
|  | ||||
|     getValue(time, result) { | ||||
|       if (!Cesium.defined(result)) { | ||||
|         result = {}; | ||||
|       } | ||||
|  | ||||
|       result.color = Cesium.Property.getValueOrDefault( | ||||
|         this._color, | ||||
|         time, | ||||
|         Cesium.Color.RED, | ||||
|         result.color | ||||
|       ); | ||||
|       result.duration = Cesium.Property.getValueOrDefault( | ||||
|         this._duration, | ||||
|         time, | ||||
|         10, | ||||
|         result.duration | ||||
|       ); | ||||
|       result.lineBackAlpha = this.lineBackAlpha; | ||||
|       result.frameNumber = Cesium.getTimestamp(); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
|     equals(other) { | ||||
|       return ( | ||||
|         this === other || | ||||
|         (other instanceof FlowLineMaterialProperty && | ||||
|           Cesium.Property.equals(this._color, other._color) && | ||||
|           Cesium.Property.equals(this._duration, other.duration) && | ||||
|           Cesium.Property.equals(this.lineBackAlpha, other.lineBackAlpha)) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Object.defineProperties(FlowLineMaterialProperty.prototype, { | ||||
|     color: Cesium.createPropertyDescriptor("color"), | ||||
|     duration: Cesium.createPropertyDescriptor("duration"), | ||||
|     transparency: Cesium.createPropertyDescriptor("lineBackAlpha"), | ||||
|   }); | ||||
|  | ||||
|   Cesium.FlowLineMaterialProperty = FlowLineMaterialProperty; | ||||
|   Cesium.Material.FlowLineMaterialProperty = "FlowLineMaterialProperty"; | ||||
|   Cesium.Material.FlowLineMaterialType = "FlowLineMaterialType"; | ||||
|   Cesium.Material.FlowLineMaterialSource = ` | ||||
|       uniform vec4 color; | ||||
|       uniform float duration; | ||||
|       uniform float lineBackAlpha; | ||||
|  | ||||
|       czm_material czm_getMaterial(czm_materialInput materialInput) | ||||
|         { | ||||
|             //生成默认的基础材质 | ||||
|             czm_material material = czm_getDefaultMaterial(materialInput); | ||||
|             //获取st(uv) | ||||
|             vec2 st = materialInput.st; | ||||
|             //获取当前帧数,10秒内变化0-1 | ||||
|             float time = fract(czm_frameNumber / (60.0*duration)); | ||||
|             //长度1/10 | ||||
|             time = time * (1.0 + 0.1); | ||||
|             //平滑过渡函数 | ||||
|             float alpha = smoothstep(time-0.1,time,st.s) * step(-time,-st.s); | ||||
|             //光带轨迹(不会完全透明) | ||||
|             alpha += lineBackAlpha; | ||||
|             material.alpha = alpha; | ||||
|             material.diffuse = color.rgb; | ||||
|             return material; | ||||
|         } | ||||
|        `; | ||||
|  | ||||
|   Cesium.Material._materialCache.addMaterial( | ||||
|     Cesium.Material.FlowLineMaterialType, | ||||
|     { | ||||
|       fabric: { | ||||
|         type: Cesium.Material.FlowLineMaterialType, | ||||
|         uniforms: { | ||||
|           color: new Cesium.Color(1.0, 1.0, 1.0, 1.0), | ||||
|           duration: 10.0, | ||||
|           lineBackAlpha: 0.05, | ||||
|         }, | ||||
|         source: Cesium.Material.FlowLineMaterialSource, | ||||
|       }, | ||||
|       translucent: function (material) { | ||||
|         return true; | ||||
|       }, | ||||
|     } | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { FlowLine } | ||||
							
								
								
									
										123
									
								
								src/Obj/Materail/LineTextureMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								src/Obj/Materail/LineTextureMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,123 @@ | ||||
| /* | ||||
|  * @Description: 流动线 | ||||
|  */ | ||||
| function LineTexture() { | ||||
|   class LineTextureMaterialProperty { | ||||
|     constructor(options) { | ||||
|       this._definitionChanged = new Cesium.Event(); | ||||
|       this._image = undefined; | ||||
|       this._color = undefined; | ||||
|       this._speed = undefined; | ||||
|       this._repeat = undefined; | ||||
|       this.image = options.image || ""; | ||||
|       this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)"); | ||||
|       this.speed = options.speed != undefined ? options.speed : 1.0; | ||||
|       this.repeat = options.repeat || 1.0; | ||||
|     } | ||||
|  | ||||
|     get isConstant() { | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     get definitionChanged() { | ||||
|       return this._definitionChanged; | ||||
|     } | ||||
|  | ||||
|     getType(time) { | ||||
|       return Cesium.Material.LineTextureMaterialType; | ||||
|     } | ||||
|  | ||||
|     getValue(time, result) { | ||||
|       if (!Cesium.defined(result)) { | ||||
|         result = {}; | ||||
|       } | ||||
|       result.image = Cesium.Property.getValueOrDefault( | ||||
|         this._image, | ||||
|         time, | ||||
|         "", | ||||
|         result.image | ||||
|       ); | ||||
|       result.color = Cesium.Property.getValueOrDefault( | ||||
|         this._color, | ||||
|         time, | ||||
|         Cesium.Color.RED, | ||||
|         result.color | ||||
|       ); | ||||
|       result.speed = Cesium.Property.getValueOrDefault( | ||||
|         this._speed, | ||||
|         time, | ||||
|         1.0, | ||||
|         result.speed | ||||
|       ); | ||||
|       result.repeat = Cesium.Property.getValueOrDefault( | ||||
|         this._repeat, | ||||
|         time, | ||||
|         1.0, | ||||
|         result.repeat | ||||
|       ); | ||||
|       result.frameNumber = Cesium.getTimestamp(); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
|     equals(other) { | ||||
|       return ( | ||||
|         this === other || | ||||
|         (other instanceof LineTextureMaterialProperty && | ||||
|           Cesium.Property.equals(this._image, other._image) && | ||||
|           Cesium.Property.equals(this._color, other._color) && | ||||
|           Cesium.Property.equals(this._imageW, other._imageW) && | ||||
|           Cesium.Property.equals(this._speed, other._speed)) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Object.defineProperties(LineTextureMaterialProperty.prototype, { | ||||
|     image: Cesium.createPropertyDescriptor("image"), | ||||
|     color: Cesium.createPropertyDescriptor("color"), | ||||
|     speed: Cesium.createPropertyDescriptor("speed"), | ||||
|     repeat: Cesium.createPropertyDescriptor("repeat"), | ||||
|   }); | ||||
|  | ||||
|   Cesium.LineTextureMaterialProperty = LineTextureMaterialProperty; | ||||
|   Cesium.Material.LineTextureMaterialProperty = "LineTextureMaterialProperty"; | ||||
|   Cesium.Material.LineTextureMaterialType = "LineTextureMaterialType"; | ||||
|   Cesium.Material.LineTextureMaterialSource = ` | ||||
|         uniform vec4 color; | ||||
|         uniform sampler2D image; | ||||
|         uniform float speed; | ||||
|         uniform float repeat; | ||||
|         czm_material czm_getMaterial(czm_materialInput materialInput) | ||||
|         { | ||||
|           czm_material material = czm_getDefaultMaterial(materialInput); | ||||
|           vec2 st = materialInput.st; | ||||
|           st.s *= repeat; // 关键:通过repeat控制纹理密度 | ||||
|           // vec4 colorImage = texture2D(image, vec2(fract(st.s + speed*czm_frameNumber* 0.01), st.t)); | ||||
|           vec4 colorImage = speed==0.0?texture2D(image, vec2(fract(st.s), st.t)):texture2D(image, vec2(fract(st.s + frameNumber / 1000.0 / speed * repeat ), st.t)); | ||||
|           material.alpha = colorImage.a * color.a; | ||||
|           material.diffuse = color.rgb; | ||||
|           return material; | ||||
|         } | ||||
|        `; | ||||
|   Cesium.Material._materialCache.addMaterial( | ||||
|     Cesium.Material.LineTextureMaterialType, | ||||
|     { | ||||
|       fabric: { | ||||
|         type: Cesium.Material.LineTextureMaterialType, | ||||
|         uniforms: { | ||||
|           color: new Cesium.Color(1.0, 1.0, 1.0, 1.0), | ||||
|           image: '', | ||||
|           repeat: 1.0, | ||||
|           speed: 1.0, | ||||
|           frameNumber: Cesium.getTimestamp(), | ||||
|           uTime: 1 | ||||
|         }, | ||||
|         source: Cesium.Material.LineTextureMaterialSource, | ||||
|       }, | ||||
|       translucent: function (material) { | ||||
|         return true; | ||||
|       }, | ||||
|     } | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { LineTexture } | ||||
							
								
								
									
										131
									
								
								src/Obj/Materail/PolylineFlowMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								src/Obj/Materail/PolylineFlowMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,131 @@ | ||||
| /* | ||||
|  * @Description: 流动线 | ||||
|  */ | ||||
| function PolylineFlow() { | ||||
|   class PolylineFlowMaterialProperty { | ||||
|     constructor(options) { | ||||
|       this._definitionChanged = new Cesium.Event(); | ||||
|       this._color = undefined; | ||||
|       this._speed = undefined; | ||||
|       this._rotate = undefined; | ||||
|       this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)"); | ||||
|       this.speed = options.speed != undefined ? options.speed : 1.0;//速度 | ||||
|       this.lineBackAlpha = options.lineBackAlpha || 0.05; | ||||
|       this.rotate = options.rotate; | ||||
|     } | ||||
|  | ||||
|     get isConstant() { | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     get definitionChanged() { | ||||
|       return this._definitionChanged; | ||||
|     } | ||||
|  | ||||
|     getType(time) { | ||||
|       return Cesium.Material.PolylineFlowMaterialType; | ||||
|     } | ||||
|  | ||||
|     getValue(time, result) { | ||||
|       if (!Cesium.defined(result)) { | ||||
|         result = {}; | ||||
|       } | ||||
|  | ||||
|       result.color = Cesium.Property.getValueOrDefault( | ||||
|         this._color, | ||||
|         time, | ||||
|         Cesium.Color.RED, | ||||
|         result.color | ||||
|       ); | ||||
|       result.speed = Cesium.Property.getValueOrDefault( | ||||
|         this._speed, | ||||
|         time, | ||||
|         10, | ||||
|         result.speed | ||||
|       ); | ||||
|       result.rotate = Cesium.Property.getValueOrDefault( | ||||
|         this._rotate, | ||||
|         time, | ||||
|         true, | ||||
|         result.rotate | ||||
|       ); | ||||
|       result.lineBackAlpha = this.lineBackAlpha; | ||||
|       result.frameTime = Cesium.getTimestamp(); | ||||
|       // result.frameNumber = Cesium.getTimestamp(); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
|     equals(other) { | ||||
|       return ( | ||||
|         this === other || | ||||
|         (other instanceof PolylineFlowMaterialProperty && | ||||
|           Cesium.Property.equals(this._color, other._color) && | ||||
|           Cesium.Property.equals(this._speed, other.speed) && | ||||
|           Cesium.Property.equals(this.lineBackAlpha, other.lineBackAlpha)) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Object.defineProperties(PolylineFlowMaterialProperty.prototype, { | ||||
|     color: Cesium.createPropertyDescriptor("color"), | ||||
|     speed: Cesium.createPropertyDescriptor("speed"), | ||||
|     rotate: Cesium.createPropertyDescriptor("rotate"), | ||||
|     transparency: Cesium.createPropertyDescriptor("lineBackAlpha"), | ||||
|   }); | ||||
|  | ||||
|   Cesium.PolylineFlowMaterialProperty = PolylineFlowMaterialProperty; | ||||
|   Cesium.Material.PolylineFlowMaterialProperty = "PolylineFlowMaterialProperty"; | ||||
|   Cesium.Material.PolylineFlowMaterialType = "PolylineFlowMaterialType"; | ||||
|   Cesium.Material.PolylineFlowMaterialSource = ` | ||||
|       uniform vec4 color; | ||||
|       uniform float speed; | ||||
|       uniform float lineBackAlpha; | ||||
|  | ||||
|       czm_material czm_getMaterial(czm_materialInput materialInput) | ||||
|         { | ||||
|             //生成默认的基础材质 | ||||
|             czm_material material = czm_getDefaultMaterial(materialInput); | ||||
|             //获取st(uv) | ||||
|             vec2 st = materialInput.st; | ||||
|             //获取当前帧数,10秒内变化0-1 | ||||
|             // float time = fract(czm_frameNumber * speed / 60.0); | ||||
|             // float time = fract(abs(speed) * czm_frameNumber * 0.01); | ||||
|             float time = fract(frameTime / 1000.0  / abs(speed)); | ||||
|             //长度1/10 | ||||
|             // time = time * (1.0 + 0.1); | ||||
|             float staticAlpha = rotate?smoothstep(0.0,1.0, 1.0-st.s) * step(-1.0,-(1.0-st.s)):smoothstep(0.0,1.0, st.s) * step(-1.0,-st.s); | ||||
|  | ||||
|             //平滑过渡函数 | ||||
|             float alpha1 = smoothstep(time-0.1,time,1.0-st.s) * step(-time,- (1.0-st.s)); | ||||
|             float alpha2 = smoothstep(time-0.1,time,st.s) * step(-time,- st.s); | ||||
|             float alpha =(speed== 0.0)? staticAlpha:(speed < 0.0)?alpha2:alpha1; | ||||
|             //光带轨迹(不会完全透明) | ||||
|             alpha += lineBackAlpha; | ||||
|             material.alpha = alpha; | ||||
|             material.diffuse = color.rgb; | ||||
|             return material; | ||||
|         } | ||||
|        `; | ||||
|  | ||||
|   Cesium.Material._materialCache.addMaterial( | ||||
|     Cesium.Material.PolylineFlowMaterialType, | ||||
|     { | ||||
|       fabric: { | ||||
|         type: Cesium.Material.PolylineFlowMaterialType, | ||||
|         uniforms: { | ||||
|           color: new Cesium.Color(1.0, 1.0, 1.0, 1.0), | ||||
|           speed: 0.1, | ||||
|           rotate: true, | ||||
|           frameTime: Cesium.getTimestamp(), | ||||
|           lineBackAlpha: 0.05, | ||||
|         }, | ||||
|         source: Cesium.Material.PolylineFlowMaterialSource, | ||||
|       }, | ||||
|       translucent: function (material) { | ||||
|         return true; | ||||
|       }, | ||||
|     } | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { PolylineFlow } | ||||
							
								
								
									
										167
									
								
								src/Obj/Materail/PolylineFlowMultMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								src/Obj/Materail/PolylineFlowMultMaterialProperty.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,167 @@ | ||||
| /* | ||||
|  * @Description: 流动线 | ||||
|  */ | ||||
| function PolylineFlowMult() { | ||||
|   class PolylineFlowMultMaterialProperty { | ||||
|     constructor(options) { | ||||
|       this._definitionChanged = new Cesium.Event(); | ||||
|       this._color = undefined; | ||||
|       this._speed = undefined; | ||||
|       this._rotate = undefined; | ||||
|       this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)"); | ||||
|       this.speed = options.speed != undefined ? options.speed : 1.0;//速度 | ||||
|       this.lineBackAlpha = options.lineBackAlpha || 0.05; | ||||
|       this.rotate = options.rotate; | ||||
|     } | ||||
|  | ||||
|     get isConstant() { | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     get definitionChanged() { | ||||
|       return this._definitionChanged; | ||||
|     } | ||||
|  | ||||
|     getType(time) { | ||||
|       return Cesium.Material.PolylineFlowMultMaterialType; | ||||
|     } | ||||
|  | ||||
|     getValue(time, result) { | ||||
|       if (!Cesium.defined(result)) { | ||||
|         result = {}; | ||||
|       } | ||||
|  | ||||
|       result.color = Cesium.Property.getValueOrDefault( | ||||
|         this._color, | ||||
|         time, | ||||
|         Cesium.Color.RED, | ||||
|         result.color | ||||
|       ); | ||||
|       result.speed = Cesium.Property.getValueOrDefault( | ||||
|         this._speed, | ||||
|         time, | ||||
|         10, | ||||
|         result.speed | ||||
|       ); | ||||
|       result.rotate = Cesium.Property.getValueOrDefault( | ||||
|         this._rotate, | ||||
|         time, | ||||
|         true, | ||||
|         result.rotate | ||||
|       ); | ||||
|       result.lineBackAlpha = this.lineBackAlpha; | ||||
|       result.frameTime = Cesium.getTimestamp(); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
|     equals(other) { | ||||
|       return ( | ||||
|         this === other || | ||||
|         (other instanceof PolylineFlowMultMaterialProperty && | ||||
|           Cesium.Property.equals(this._color, other._color) && | ||||
|           Cesium.Property.equals(this._speed, other.speed) && | ||||
|           Cesium.Property.equals(this._rotate, other.rotate) && | ||||
|           Cesium.Property.equals(this.lineBackAlpha, other.lineBackAlpha)) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Object.defineProperties(PolylineFlowMultMaterialProperty.prototype, { | ||||
|     color: Cesium.createPropertyDescriptor("color"), | ||||
|     speed: Cesium.createPropertyDescriptor("speed"), | ||||
|     rotate: Cesium.createPropertyDescriptor("rotate"), | ||||
|     transparency: Cesium.createPropertyDescriptor("lineBackAlpha"), | ||||
|   }); | ||||
|  | ||||
|   Cesium.PolylineFlowMultMaterialProperty = PolylineFlowMultMaterialProperty; | ||||
|   Cesium.Material.PolylineFlowMultMaterialProperty = "PolylineFlowMultMaterialProperty"; | ||||
|   Cesium.Material.PolylineFlowMultMaterialType = "PolylineFlowMultMaterialType"; | ||||
|   Cesium.Material.PolylineFlowMaterialSource = ` | ||||
|       uniform vec4 color; | ||||
|       uniform float speed; | ||||
|       uniform float lineBackAlpha; | ||||
|  | ||||
|       czm_material czm_getMaterial(czm_materialInput materialInput) | ||||
|         { | ||||
|             czm_material material = czm_getDefaultMaterial(materialInput); | ||||
|             vec2 st = materialInput.st; | ||||
|  | ||||
|             // 基础时间轴(控制主光带) | ||||
|             float baseTime = fract(czm_frameNumber * speed / 60.0) * 1.1; | ||||
|  | ||||
|             // 高频时间轴(控制高光点) | ||||
|             // float highlightTime = fract(czm_frameNumber * speed * 3.0 / 60.0); | ||||
|             // float highlightTime = fract(abs(speed) * czm_frameNumber * 0.01); | ||||
|             float highlightTime = fract(frameTime / 1000.0  / abs(speed)); | ||||
|             float highlightSpacing = 0.3; // 高光点间隔 | ||||
|  | ||||
|             // 主光带透明度计算 | ||||
|             float mainAlpha = smoothstep(baseTime-0.1, baseTime, st.s) * step(-baseTime, -st.s); | ||||
|  | ||||
|             // 多高光点计算(3个周期性光斑) | ||||
|             float highlight11 = smoothstep(highlightTime-0.05, highlightTime, st.s) * | ||||
|                               step(-highlightTime, -st.s) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(st.s - highlightTime))); | ||||
|  | ||||
|             float highlight21 = smoothstep(highlightTime+highlightSpacing-0.05, | ||||
|                                         highlightTime+highlightSpacing, st.s) * | ||||
|                               step(-(highlightTime+highlightSpacing), -st.s) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(st.s - (highlightTime+highlightSpacing)))); | ||||
|  | ||||
|             float highlight31 = smoothstep(highlightTime+2.0*highlightSpacing-0.05, | ||||
|                                         highlightTime+2.0*highlightSpacing, st.s) * | ||||
|                               step(-(highlightTime+2.0*highlightSpacing), -st.s) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(st.s - (highlightTime+2.0*highlightSpacing)))); | ||||
|  | ||||
|  | ||||
|             float highlight12 = smoothstep(highlightTime-0.05, highlightTime, 1.0 - st.s) * | ||||
|                               step(-highlightTime, -(1.0-st.s)) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(1.0 - st.s - highlightTime))); | ||||
|  | ||||
|             float highlight22 = smoothstep(highlightTime+highlightSpacing-0.05, | ||||
|                                highlightTime+highlightSpacing, 1.0 - st.s) * | ||||
|                               step(-(highlightTime+highlightSpacing),-(1.0 - st.s)) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(1.0-st.s - (highlightTime+highlightSpacing)))); | ||||
|  | ||||
|             float highlight32 = smoothstep(highlightTime+2.0*highlightSpacing-0.05, | ||||
|                               highlightTime+2.0*highlightSpacing, 1.0 - st.s) * | ||||
|                               step(-(highlightTime+2.0*highlightSpacing), -(1.0-st.s)) * | ||||
|                               (1.0 - smoothstep(0.0, highlightSpacing, abs(1.0 - st.s - (highlightTime+2.0*highlightSpacing)))); | ||||
|  | ||||
|  | ||||
|             float highlight1 = !rotate?highlight11:highlight12; | ||||
|             float highlight2 = !rotate?highlight21:highlight22; | ||||
|             float highlight3 = !rotate?highlight31:highlight32; | ||||
|             // 合并效果 | ||||
|             // material.alpha = mainAlpha * 0.7 + | ||||
|             //                 (highlight1 + highlight2 + highlight3) * 0.5 + | ||||
|             //                 lineBackAlpha; | ||||
|             material.alpha = (highlight1 + highlight2 + highlight3) * 0.5 + | ||||
|                             lineBackAlpha; | ||||
|             material.diffuse = color.rgb; // 高光区变亮 | ||||
|             return material; | ||||
|         } | ||||
|        `; | ||||
|  | ||||
|   Cesium.Material._materialCache.addMaterial( | ||||
|     Cesium.Material.PolylineFlowMultMaterialType, | ||||
|     { | ||||
|       fabric: { | ||||
|         type: Cesium.Material.PolylineFlowMultMaterialType, | ||||
|         uniforms: { | ||||
|           color: new Cesium.Color(1.0, 1.0, 1.0, 1.0), | ||||
|           speed: 0.1, | ||||
|           rotate: true, | ||||
|           frameTime: Cesium.getTimestamp(), | ||||
|           lineBackAlpha: 0.05, | ||||
|         }, | ||||
|         source: Cesium.Material.PolylineFlowMaterialSource, | ||||
|       }, | ||||
|       translucent: function (material) { | ||||
|         return true; | ||||
|       }, | ||||
|     } | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { PolylineFlowMult } | ||||
| @ -2,6 +2,11 @@ import { StreamWall1, StreamWall2 } from './WallMaterialProperty' | ||||
| import { RadarScan } from './RadarScanMaterialProperty' | ||||
| import { CustomColorMaterialSource } from './CustomColorMaterialSource' | ||||
| import { CustomImageMaterialSource } from './CustomImageMaterialSource' | ||||
| import { FlowLine } from './FlowLineMaterialProperty' | ||||
| import { PolylineFlow } from './PolylineFlowMaterialProperty' | ||||
| import { PolylineFlowMult } from './PolylineFlowMultMaterialProperty' | ||||
| import { FlowDashedLine } from './FlowDashedLineFlowMaterialProperty' | ||||
| import { LineTexture } from './LineTextureMaterialProperty' | ||||
|  | ||||
| function init_material() { | ||||
|   StreamWall1() | ||||
| @ -9,6 +14,11 @@ function init_material() { | ||||
|   RadarScan() | ||||
|   CustomColorMaterialSource() | ||||
|   CustomImageMaterialSource() | ||||
|   FlowLine() | ||||
|   PolylineFlow() | ||||
|   PolylineFlowMult() | ||||
|   FlowDashedLine() | ||||
|   LineTexture() | ||||
| } | ||||
|  | ||||
| export { init_material } | ||||
| @ -10,6 +10,7 @@ import { Proj } from './proj' | ||||
| import { open as projConvertOpen, close as projConvertClose } from './projConvert' | ||||
| import { open as projectionConvertOpen, close as projectionConvertClose } from './projectionConvert' | ||||
| import { setActiveViewer, closeRotateAround, closeViewFollow } from '../Global/global' | ||||
| import FlowPictureMaterialProperty from '../Obj/Materail/FlowPictureMaterialProperty' | ||||
|  | ||||
| class Tools { | ||||
|   /** | ||||
| @ -513,8 +514,11 @@ class Tools { | ||||
|     return res | ||||
|   } | ||||
|  | ||||
|   getMaterial(color = '#2ab0c2', type = 0) { | ||||
|   getMaterial(color = '#2ab0c2', type = 0, entity = null, newParam = {}) { | ||||
|     let material = '' | ||||
|  | ||||
|  | ||||
|  | ||||
|     switch (Number(type)) { | ||||
|  | ||||
|       case 1: //虚线 | ||||
| @ -528,6 +532,55 @@ class Tools { | ||||
|           glowPower: 0.2, | ||||
|           color: Cesium.Color.fromCssColorString(color), | ||||
|         }) | ||||
|         break | ||||
|       case 3: //尾迹光线 | ||||
|         material = new Cesium.PolylineFlowMaterialProperty({ | ||||
|           color: color, | ||||
|           speed: newParam.rotate ? newParam.speed : 0 - newParam.speed, | ||||
|           rotate: newParam.rotate | ||||
|         }) | ||||
|         break | ||||
|       case 4: //多尾迹光线 | ||||
|         material = new Cesium.PolylineFlowMultMaterialProperty({ | ||||
|           color: color, | ||||
|           speed: newParam.rotate ? newParam.speed : 0 - newParam.speed, | ||||
|           rotate: newParam.rotate | ||||
|         }) | ||||
|         break | ||||
|       case 5: //普通流动虚线 | ||||
|         material = new Cesium.FlowDashedLineFlowMaterialProperty({ | ||||
|           color: color, | ||||
|           uType: 0, | ||||
|           speed: newParam.rotate ? newParam.speed : 0 - newParam.speed, | ||||
|           // dashSize: newParam.dashSize, | ||||
|           space: newParam.space | ||||
|         }) | ||||
|         console.log(newParam.space) | ||||
|         break | ||||
|       case 6: //流动虚线2 | ||||
|         material = new Cesium.FlowDashedLineFlowMaterialProperty({ | ||||
|           color: color, | ||||
|           uType: 1, | ||||
|           speed: newParam.rotate ? newParam.speed : 0 - newParam.speed, | ||||
|           // dashSize: newParam.dashSize, | ||||
|           space: newParam.space | ||||
|         }) | ||||
|         break | ||||
|       case 7: //流动箭头1 | ||||
|       case 8: //流动箭头2 | ||||
|       case 9: //流动箭头3 | ||||
|       case 10: //流动箭头4 | ||||
|       case 11: //流动箭头5 | ||||
|       case 12: //流动箭头6 | ||||
|         let param = { | ||||
|           color: color, | ||||
|           image: this.getSourceRootPath() + `/img/arrow/${type - 6}.png`, | ||||
|           space: newParam.space, | ||||
|           speed: newParam.speed | ||||
|         } | ||||
|         param.speed = newParam.rotate ? param.speed : 0 - param.speed | ||||
|         this.getFlowTexture(this, param, entity) | ||||
|  | ||||
|         break | ||||
|       default: | ||||
|         material = Cesium.Color.fromCssColorString(color) | ||||
| @ -535,6 +588,81 @@ class Tools { | ||||
|     } | ||||
|     return material | ||||
|   } | ||||
|   getFlowTexture(that, options, entity) { | ||||
|  | ||||
|     const canvasEle = document.createElement('canvas'); | ||||
|     const ctx = canvasEle.getContext('2d') | ||||
|     const myImg = new Image() | ||||
|     // myImg.src = that.getSourceRootPath() + '/img/arrow/1.png' | ||||
|     myImg.src = options.image | ||||
|     myImg.onload = function () { | ||||
|       options.space = Math.max(0.1, options.space); | ||||
|       if (options.speed > 0 || options.speed == 0) { | ||||
|         canvasEle.width = myImg.width * (options.space + 1) | ||||
|         canvasEle.height = myImg.height | ||||
|         ctx.drawImage(myImg, myImg.width * (options.space / 2), 0) | ||||
|       } else { | ||||
|         ctx.clearRect(0, 0, canvasEle.width, canvasEle.height); | ||||
|         canvasEle.width = myImg.width * (options.space + 1) | ||||
|         canvasEle.height = myImg.height | ||||
|         ctx.save(); // 保存当前状态 | ||||
|         ctx.translate(canvasEle.width / 2, canvasEle.height / 2); // 移动原点至中心 | ||||
|         ctx.rotate(Math.PI); // (弧度制) | ||||
|         ctx.translate(-canvasEle.width / 2, -canvasEle.height / 2); // 移回原点 | ||||
|         ctx.drawImage(myImg, myImg.width * (options.space / 2), 0) | ||||
|         ctx.restore(); // 恢复状态 | ||||
|       } | ||||
|  | ||||
|       // let repeat = getRepeat() | ||||
|       // }, false) | ||||
|       entity.polyline.material = new Cesium.LineTextureMaterialProperty( | ||||
|         { | ||||
|           color: options.color, | ||||
|           // image: options.image, | ||||
|           image: canvasEle, | ||||
|           speed: options.speed, | ||||
|           // repeat: repeat | ||||
|           repeat: new Cesium.CallbackProperty(function () { | ||||
|             // function getRepeat() { | ||||
|             var positionProperty = entity.polyline.positions; | ||||
|             var positions = positionProperty.getValue(that.sdk.viewer.clock.currentTime); | ||||
|  | ||||
|             if (!Cesium.defined(positions)) { | ||||
|               // return new Cesium.Cartesian2(1.0, 1.0); | ||||
|               return 1.0; | ||||
|             } | ||||
|  | ||||
|             var distance = 0; | ||||
|             for (var i = 0; i < positions.length - 1; ++i) { | ||||
|               distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]); | ||||
|             } | ||||
|  | ||||
|             var repeatX = distance / entity.polyline.width.getValue(); | ||||
|             // 根据地图缩放程度调整repeatX | ||||
|             var cameraHeight = that.sdk.viewer.camera.positionCartographic.height; | ||||
|             var boundingSphere = new Cesium.BoundingSphere( | ||||
|               new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标 | ||||
|               500000 // 半径(距离) | ||||
|             ); | ||||
|  | ||||
|             // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率) | ||||
|             var drawingBufferWidth = that.sdk.viewer.canvas.clientWidth; | ||||
|             var drawingBufferHeight = that.sdk.viewer.canvas.clientHeight; | ||||
|  | ||||
|             // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小 | ||||
|             var groundResolution = that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight) | ||||
|             // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1); | ||||
|             repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1); | ||||
|             // if (repeatX < 3) { | ||||
|             //   repeatX = 3 | ||||
|             // } | ||||
|             // return new Cesium.Cartesian2(repeatX, 1.0); | ||||
|             return repeatX; | ||||
|           }) | ||||
|         } | ||||
|       ) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /*创建直箭头图片*/ | ||||
|   create_arrow1_picture(color) { | ||||
| @ -1067,6 +1195,55 @@ class Tools { | ||||
|     return `${year}${month}${day}${hours}${minutes}${seconds}${milliseconds}`; | ||||
|   } | ||||
|  | ||||
|   replaceHost(url, host) { | ||||
|     let newUrl = url | ||||
|     if(!url || !host) { | ||||
|       return url | ||||
|     } | ||||
|     try { | ||||
|       if (!url.startsWith("http")) { | ||||
|         //说明是本地的json,在磁盘中存在的 | ||||
|         if (!url.includes(":")) { | ||||
|           if (this.options.host) { | ||||
|             let o = new URL(url, this.options.host) | ||||
|             newUrl = o.href | ||||
|           } | ||||
|         } | ||||
|         return newUrl | ||||
|       } | ||||
|       else { | ||||
|         // 移除可能的用户名:密码前缀 | ||||
|         const authRegex = /^[^@]+@/; | ||||
|         if (authRegex.test(url)) { | ||||
|           url = url.replace(authRegex, ''); | ||||
|         } | ||||
|  | ||||
|         // 添加协议前缀(如果没有) | ||||
|         if (!/^[a-z]+:\/\//i.test(url)) { | ||||
|           url = 'http://' + url; | ||||
|         } | ||||
|  | ||||
|         const parsedUrl = new URL(url); | ||||
|         const parsedUrl2 = new URL(host); | ||||
|         let hostname = parsedUrl.hostname; | ||||
|         let port = parsedUrl.port; | ||||
|  | ||||
|         // 处理IPv6地址(如果有括号) | ||||
|         if (hostname.startsWith('[') && hostname.endsWith(']')) { | ||||
|           hostname = hostname.slice(1, -1); | ||||
|         } | ||||
|         if ((hostname === 'localhost' || hostname === '127.0.0.1') && parseInt(port, 10) !== 55110) { | ||||
|           parsedUrl.port = parsedUrl2.port | ||||
|           parsedUrl.protocol = parsedUrl2.protocol | ||||
|           newUrl = parsedUrl.toString() | ||||
|         } | ||||
|         return newUrl | ||||
|       } | ||||
|     } catch (error) { | ||||
|       return newUrl | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -1784,6 +1784,89 @@ | ||||
| .YJ-custom-base-dialog.water-surface>.content>div .row .label { | ||||
|   flex: 0 0 60px; | ||||
| } | ||||
| /* 流光飞线 */ | ||||
| .YJ-custom-base-dialog.flow-line-surface>.content { | ||||
|   width: 586px; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.flow-line-surface>.content>div .row .label { | ||||
|   flex: 0 0 60px; | ||||
| } | ||||
|  | ||||
| /* 光照 */ | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content { | ||||
|   width: 586px; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .row .label { | ||||
|   flex: 0 0 60px; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .timeline-container { | ||||
|   width: 100%; | ||||
|   padding: 20px 0; | ||||
|   position: relative; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .timeline { | ||||
|   height: 8px; | ||||
|   background: #f0f0f0; | ||||
|   border-radius: 15px; | ||||
|   position: relative; | ||||
|   cursor: pointer; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .progress { | ||||
|   height: 100%; | ||||
|   width: 0; | ||||
|   background: rgba(var(--color-sdk-base-rgb), 1); | ||||
|   border-radius: 15px; | ||||
|   position: relative; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .handle { | ||||
|   width: 16px; | ||||
|   height: 16px; | ||||
|   background: white; | ||||
|   /* border: 3px solid #4285f4; */ | ||||
|   background: rgba(var(--color-sdk-base-rgb), 1); | ||||
|   border-radius: 50%; | ||||
|   position: absolute; | ||||
|   right: -8px; | ||||
|   top: 50%; | ||||
|   transform: translateY(-50%); | ||||
|   cursor: grab; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .time-marks { | ||||
|   display: flex; | ||||
|   justify-content: space-between; | ||||
|   margin-top: 5px; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .time-mark { | ||||
|   font-size: 12px; | ||||
|   color: #fff; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .controls { | ||||
|   margin: 15px 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div .current-time { | ||||
|   font-size: 12px; | ||||
|   position: absolute; | ||||
|   width: 50px; | ||||
|   text-align: center; | ||||
|   right: -25px; | ||||
|   top: -200%; | ||||
|   transform: translateY(-50%); | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.sun-shine-surface>.content>div #timePause { | ||||
|   margin-top: 10px; | ||||
| } | ||||
|  | ||||
| /* 电子围墙 */ | ||||
| .YJ-custom-base-dialog.wall-stereoscopic>.content { | ||||
| @ -2515,7 +2598,9 @@ | ||||
| .YJ-custom-base-dialog.polyline>.content { | ||||
|   width: 580px; | ||||
| } | ||||
|  | ||||
| .YJ-custom-base-dialog.polyline>.content>div #dashTextureDom { | ||||
|   display: none; | ||||
| } | ||||
| .YJ-custom-base-dialog.polyline>.content>div .row .col { | ||||
|   margin: 0 10px; | ||||
| } | ||||
| @ -2564,6 +2649,8 @@ | ||||
|   max-height: 185px; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* 贴地图片 */ | ||||
| .YJ-custom-base-dialog.ground-image>.content { | ||||
|   width: 500px; | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 17 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/3.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 10 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/4.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 20 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/5.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 56 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/img/arrow/6.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/img/arrow/6.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 10 KiB | 
		Reference in New Issue
	
	Block a user