| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 | 
                        - /**
 -  * @Author: Caven
 -  * @Date: 2020-04-01 10:36:36
 -  */
 - 
 - import { Cesium } from '@dc-modules/namespace'
 - import { SceneEventType, TrackEventType } from '@dc-modules/event'
 - import State from '@dc-modules/state/State'
 - import TrackViewMode from './TrackViewMode'
 - 
 - class TrackController {
 -   constructor(viewer) {
 -     this._viewer = viewer
 -     this._cache = {}
 -     this._delegete = new Cesium.CustomDataSource('history-track-layer')
 -     this._viewer.dataSources.add(this._delegete)
 -     this._activedTrack = undefined
 -     this._viewMode = undefined
 -     this._viewOption = {}
 -     this._stopTime = undefined
 -     this._state = State.INITIALIZED
 -   }
 - 
 -   get delegate() {
 -     return this._delegete.entities
 -   }
 - 
 -   get state() {
 -     return this._state
 -   }
 - 
 -   /**
 -    * @private
 -    */
 -   _onPostRender() {
 -     Object.keys(this._cache).forEach(key => {
 -       let track = this._cache[key]
 -       track.trackEvent &&
 -         track.trackEvent.fire(TrackEventType.POST_RENDER, {
 -           viewer: this._viewer,
 -           viewOption: this._viewOption
 -         })
 -     })
 -     this._viewer.scene.requestRender()
 -   }
 - 
 -   /**
 -    *
 -    * @param track
 -    * @returns {TrackController}
 -    */
 -   addTrack(track) {
 -     if (
 -       track &&
 -       track.trackEvent &&
 -       !this._cache.hasOwnProperty(track.trackId)
 -     ) {
 -       track.trackEvent.fire(TrackEventType.ADD, this)
 -       this._cache[track.trackId] = track
 -     }
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    * @param tracks
 -    * @returns {TrackController}
 -    */
 -   addTracks(tracks) {
 -     if (Array.isArray(tracks)) {
 -       tracks.forEach(item => {
 -         this.addTrack(item)
 -       })
 -     }
 -     return this
 -   }
 - 
 -   /**
 -    * Returns a track
 -    * @param id
 -    * @returns {*|undefined}
 -    */
 -   getTrack(id) {
 -     let filters = this.getTracks().filter(item => item.id === id)
 -     return filters && filters.length ? filters[0] : undefined
 -   }
 - 
 -   /**
 -    * Removes a track
 -    * @param track
 -    * @returns {TrackController}
 -    */
 -   removeTrack(track) {
 -     if (
 -       track &&
 -       track.trackEvent &&
 -       this._cache.hasOwnProperty(track.trackId)
 -     ) {
 -       track.trackEvent.fire(TrackEventType.REMOVE, this)
 -       delete this._cache[track.trackId]
 -     }
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    * @returns {*[]}
 -    */
 -   getTracks() {
 -     let result = []
 -     Object.keys(this._cache).forEach(key => {
 -       result.push(this._cache[key])
 -     })
 -     return result
 -   }
 - 
 -   /**
 -    * Starts play all path
 -    * @returns {TrackController}
 -    */
 -   play() {
 -     let now = Cesium.JulianDate.now()
 -     Object.keys(this._cache).forEach(key => {
 -       let track = this._cache[key]
 -       track.startTime = now
 -       track.viewed = false
 -     })
 -     this._activedTrack = undefined
 -     this._stopTime = undefined
 -     this._viewer.off(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     this._viewer.on(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     this._state = State.PLAY
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    */
 -   pause() {
 -     this._stopTime = Cesium.JulianDate.now()
 -     this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
 -     this._viewer.delegate.trackedEntity = undefined
 -     this._viewer.off(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     this._state = State.PAUSE
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    */
 -   restore() {
 -     if (this._state !== State.PAUSE) {
 -       return this
 -     }
 -     if (this._stopTime) {
 -       let now = Cesium.JulianDate.now()
 -       Object.keys(this._cache).forEach(key => {
 -         let track = this._cache[key]
 -         track.trackEvent.fire(TrackEventType.RESET_TIME_LINE, {
 -           stopTime: this._stopTime,
 -           duration: Cesium.JulianDate.secondsDifference(now, this._stopTime)
 -         })
 -       })
 -     }
 -     this._viewer.off(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     this._viewer.on(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     this._state = State.PLAY
 -     return this
 -   }
 - 
 -   // /**
 -   //  *
 -   //  * @param speed
 -   //  * @returns {TrackController}
 -   //  */
 -   // changeSpeed(speed) {
 -   //   this._viewer.clock.multiplier = speed
 -   //   return this
 -   // }
 - 
 -   /**
 -    *
 -    * @param track
 -    * @param viewOption
 -    * @returns {TrackController}
 -    */
 -   viewTrack(track, viewOption = {}) {
 -     if (!this._cache.hasOwnProperty(track.trackId)) {
 -       throw new Error('TrackController: track does not added ')
 -     }
 -     this._viewOption = viewOption
 -     if (this._activedTrack) {
 -       this._activedTrack.viewed = false
 -     }
 -     track.viewed = true
 -     this._activedTrack = track
 -     if (viewOption.mode === TrackViewMode.FREE) {
 -       this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
 -       this._viewer.delegate.trackedEntity = undefined
 -     }
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    * @param track
 -    * @returns {TrackController}
 -    */
 -   releaseTrack(track) {
 -     if (!this._cache.hasOwnProperty(track.trackId)) {
 -       throw new Error('TrackController: track does not added ')
 -     }
 -     if (track.viewed) {
 -       track.viewed = false
 -     }
 -     this._activedTrack = undefined
 -     this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
 -     this._viewer.delegate.trackedEntity = undefined
 -     return this
 -   }
 - 
 -   /**
 -    *
 -    * @returns {TrackController}
 -    */
 -   clear() {
 -     Object.keys(this._cache).forEach(key => {
 -       this.removeTrack(this._cache[key])
 -     })
 -     this._activedTrack && (this._activedTrack.viewed = false)
 -     this._activedTrack = undefined
 -     this._viewer.off(SceneEventType.POST_RENDER, this._onPostRender, this)
 -     return this
 -   }
 - }
 - 
 - export default TrackController
 
 
  |