| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /**
- * @Author: Caven
- * @Date: 2020-02-12 21:43:33
- */
-
- import { DomUtil } from '../utils'
- import State from '../state/State'
- import Transform from '../transform/Transform'
- import Layer from './Layer'
-
- const { Cesium } = DC.Namespace
-
- class HtmlLayer extends Layer {
- constructor(id) {
- super(id)
- this._delegate = DomUtil.create('div', 'html-layer', undefined)
- this._delegate.setAttribute('id', this._id)
- this._renderRemoveCallback = undefined
- this.type = Layer.getLayerType('html')
- this._state = State.INITIALIZED
- }
-
- set show(show) {
- this._show = show
- this._delegate.style.visibility = this._show ? 'visible' : 'hidden'
- }
-
- get show() {
- return this._show
- }
-
- /**
- * add handler
- * @param viewer
- * @private
- */
- _onAdd(viewer) {
- this._viewer = viewer
- this._viewer.dcContainer.appendChild(this._delegate)
- let scene = this._viewer.scene
- this._renderRemoveCallback = scene.postRender.addEventListener(() => {
- let cameraPosition = this._viewer.camera.positionWC
- this.eachOverlay(item => {
- if (item && item.position) {
- item.show = this.show
- let position = Transform.transformWGS84ToCartesian(item.position)
- let windowCoord = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
- scene,
- position
- )
- let distance = Cesium.Cartesian3.distance(position, cameraPosition)
- item._updateStyle({ transform: windowCoord }, distance)
- }
- }, this)
- }, this)
- this._state = State.ADDED
- }
-
- /**
- * remove handler
- * @returns {boolean}
- * @private
- */
- _onRemove() {
- this._renderRemoveCallback && this._renderRemoveCallback()
- this._viewer.dcContainer.removeChild(this._delegate)
- this._state = State.REMOVED
- }
-
- /**
- * Clears all divIcons
- * @returns {HtmlLayer}
- */
- clear() {
- while (this._delegate.hasChildNodes()) {
- this._delegate.removeChild(this._delegate.firstChild)
- }
- this._cache = {}
- this._state = State.CLEARED
- return this
- }
- }
-
- Layer.registerType('html')
-
- export default HtmlLayer
|