| <!DOCTYPE html> | <!DOCTYPE html> | ||||
| <html lang="en"> | <html lang="en"> | ||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <script src="../dat.gui.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||||
| <title>dc-example</title> | |||||
| <script src='/libs/dc-sdk/dc.min.js'></script> | |||||
| <script src="../dat.gui.min.js"></script> | |||||
| <link href='/libs/dc-sdk/dc.min.css' type='text/css' rel='stylesheet'> | |||||
| <link href='../index.css' type='text/css' rel='stylesheet'> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push([lng, lat, 0]) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push([lng, lat, 0]) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createAmapImageryLayer({ | |||||
| style: 'img', | |||||
| crs: 'WGS84', | |||||
| }) | |||||
| viewer.addBaseLayer(baseLayer) | |||||
| viewer.popup.config = { | |||||
| customClass: 'custom-popup', | |||||
| } | |||||
| let layer = new DC.VectorLayer('layer').addTo(viewer) | |||||
| viewer.contextMenu.enable = true | |||||
| let positions = generatePosition(20) | |||||
| positions.forEach((item, index) => { | |||||
| let point = new DC.Point(item) | |||||
| point.attr = { | |||||
| index: index + 1, | |||||
| } | |||||
| point.on(DC.MouseEventType.CLICK, (e) => { | |||||
| viewer.popup.showAt(e.position, `我是第${e.overlay.attr.index}点`) | |||||
| }) | |||||
| point.addTo(layer) | |||||
| }) | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createAmapImageryLayer({ | |||||
| style: 'img', | |||||
| crs:'WGS84' | |||||
| }) | |||||
| viewer.addBaseLayer( baseLayer) | |||||
| viewer.popup.config = { | |||||
| customClass: 'custom-popup' | |||||
| } | |||||
| let layer = new DC.VectorLayer('layer').addTo(viewer) | |||||
| viewer.contextMenu.enable = true | |||||
| let positions = generatePosition(20) | |||||
| positions.forEach((item,index) => { | |||||
| let point = new DC.Point(item) | |||||
| point.attr={ | |||||
| index:index + 1 | |||||
| viewer.on(DC.MouseEventType.CLICK, (e) => { | |||||
| console.log('我是场景事件') | |||||
| }) | |||||
| viewer.flyTo(layer) | |||||
| } | } | ||||
| point.on(DC.MouseEventType.CLICK,e=>{ | |||||
| viewer.popup.showAt(e.position,`我是第${e.overlay.attr.index}点`) | |||||
| }) | |||||
| point.addTo(layer) | |||||
| }) | |||||
| viewer.flyTo(layer) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl:'../libs/dc-sdk/resources/' | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| DC.ready({ | |||||
| baseUrl: '../libs/dc-sdk/resources/', | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| </html> | </html> |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <script src="../dat.gui.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push([lng, lat, 0]) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container', { | |||||
| eventPropagation: true, | |||||
| }) | |||||
| let baseLayer = DC.ImageryLayerFactory.createAmapImageryLayer({ | |||||
| style: 'img', | |||||
| crs: 'WGS84', | |||||
| }) | |||||
| viewer.addBaseLayer(baseLayer) | |||||
| viewer.popup.config = { | |||||
| customClass: 'custom-popup', | |||||
| } | |||||
| let layer = new DC.VectorLayer('layer').addTo(viewer) | |||||
| viewer.contextMenu.enable = true | |||||
| let positions = generatePosition(20) | |||||
| positions.forEach((item, index) => { | |||||
| let point = new DC.Point(item) | |||||
| point.attr = { | |||||
| index: index + 1, | |||||
| } | |||||
| point.on(DC.MouseEventType.CLICK, (e) => { | |||||
| viewer.popup.showAt(e.position, `我是第${e.overlay.attr.index}点`) | |||||
| }) | |||||
| point.addTo(layer) | |||||
| }) | |||||
| viewer.on(DC.MouseEventType.CLICK, (e) => { | |||||
| console.log('我是场景事件') | |||||
| }) | |||||
| viewer.flyTo(layer) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl: '../libs/dc-sdk/resources/', | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| </html> |
| name: '要素鼠标事件', | name: '要素鼠标事件', | ||||
| page: 'overlay_mouse.html', | page: 'overlay_mouse.html', | ||||
| }, | }, | ||||
| { | |||||
| name: '要素鼠标事件(支持冒泡)', | |||||
| page: 'overlay_mouse_propagation.html', | |||||
| }, | |||||
| { | { | ||||
| name: '相机事件', | name: '相机事件', | ||||
| page: 'camera.html', | page: 'camera.html', | ||||
| name: '模型(图元)', | name: '模型(图元)', | ||||
| page: 'model_primitive.html', | page: 'model_primitive.html', | ||||
| }, | }, | ||||
| { | |||||
| name: '模型动画(图元)', | |||||
| page: 'model_primitive_d.html', | |||||
| }, | |||||
| { | { | ||||
| name: '3dtiles-3dmax', | name: '3dtiles-3dmax', | ||||
| page: '3dtiles_3dmax.html', | page: '3dtiles_3dmax.html', |
| <!DOCTYPE html> | <!DOCTYPE html> | ||||
| <html lang="en"> | <html lang="en"> | ||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||||
| <title>dc-example</title> | |||||
| <script src='/libs/dc-sdk/dc.min.js'></script> | |||||
| <link href='/libs/dc-sdk/dc.min.css' type='text/css' rel='stylesheet'> | |||||
| <link href='../index.css' type='text/css' rel='stylesheet'> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| <body> | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push( | |||||
| new DC.Position( | |||||
| lng, | |||||
| lat, | |||||
| 1000 * Math.random(), | |||||
| 3600 * Math.random() | |||||
| ) | |||||
| ) | |||||
| } | |||||
| return list | |||||
| } | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push(new DC.Position(lng, lat,1000 * Math.random(),3600 * Math.random())) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer(DC.ImageryType.AMAP,{ | |||||
| style:'img', | |||||
| crs:'WGS84' | |||||
| }) | |||||
| viewer.addBaseLayer( baseLayer,{ | |||||
| brightness:0.1 | |||||
| }) | |||||
| let layer = new DC.PrimitiveLayer('layer').addTo(viewer) | |||||
| let positions = generatePosition(1000) | |||||
| positions.forEach(item => { | |||||
| let model = new DC.ModelPrimitive(item,"../assets/data/Cesium_Air.glb") | |||||
| model.setStyle({scale:50}) | |||||
| layer.addOverlay(model) | |||||
| }) | |||||
| viewer.flyToPosition("120.82005120445152,30.903795335982288,60975.10826917929,341.02,-50.29") | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl:'../libs/dc-sdk/resources/' | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer( | |||||
| DC.ImageryType.AMAP, | |||||
| { | |||||
| style: 'img', | |||||
| crs: 'WGS84', | |||||
| } | |||||
| ) | |||||
| viewer.addBaseLayer(baseLayer, { | |||||
| brightness: 0.1, | |||||
| }) | |||||
| let layer = new DC.PrimitiveLayer('layer').addTo(viewer) | |||||
| let positions = generatePosition(1000) | |||||
| positions.forEach((item) => { | |||||
| let model = new DC.ModelPrimitive( | |||||
| item, | |||||
| '../assets/data/Cesium_Air.glb' | |||||
| ) | |||||
| model.setStyle({ scale: 50 }) | |||||
| layer.addOverlay(model) | |||||
| }) | |||||
| viewer.flyToPosition( | |||||
| '120.82005120445152,30.903795335982288,60975.10826917929,341.02,-50.29' | |||||
| ) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl: '../libs/dc-sdk/resources/', | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| </html> | </html> |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push( | |||||
| new DC.Position( | |||||
| lng, | |||||
| lat, | |||||
| 1000 * Math.random(), | |||||
| 3600 * Math.random() | |||||
| ) | |||||
| ) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer( | |||||
| DC.ImageryType.AMAP, | |||||
| { | |||||
| style: 'img', | |||||
| crs: 'WGS84', | |||||
| } | |||||
| ) | |||||
| viewer.addBaseLayer(baseLayer, { | |||||
| brightness: 0.1, | |||||
| }) | |||||
| let layer = new DC.PrimitiveLayer('layer').addTo(viewer) | |||||
| let positions = generatePosition(1000) | |||||
| positions.forEach((item) => { | |||||
| let model = new DC.ModelPrimitive( | |||||
| item, | |||||
| '../assets/data/Cesium_Air.glb' | |||||
| ) | |||||
| model.on(DC.ModelEventType.READY, (model) => { | |||||
| model.activeAnimations.add({ | |||||
| index: 0, | |||||
| loop: 1, | |||||
| multiplier: 1, | |||||
| }) | |||||
| model.activeAnimations.add({ | |||||
| index: 1, | |||||
| loop: 1, | |||||
| multiplier: 1, | |||||
| }) | |||||
| }) | |||||
| model.setStyle({ scale: 50 }) | |||||
| layer.addOverlay(model) | |||||
| }) | |||||
| viewer.flyToPosition( | |||||
| '120.82005120445152,30.903795335982288,60975.10826917929,341.02,-50.29' | |||||
| ) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl: '../libs/dc-sdk/resources/', | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| </html> |
| <!DOCTYPE html> | <!DOCTYPE html> | ||||
| <html lang="en"> | <html lang="en"> | ||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||||
| <title>dc-example</title> | |||||
| <script src='/libs/dc-sdk/dc.min.js'></script> | |||||
| <link href='/libs/dc-sdk/dc.min.css' type='text/css' rel='stylesheet'> | |||||
| <link href='../index.css' type='text/css' rel='stylesheet'> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| <body> | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push(new DC.Position(lng, lat)) | |||||
| } | |||||
| return list | |||||
| } | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| let viewer = undefined | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer( | |||||
| DC.ImageryType.AMAP, | |||||
| { | |||||
| style: 'img', | |||||
| crs: 'WGS84', | |||||
| } | |||||
| ) | |||||
| viewer.addBaseLayer(baseLayer, { | |||||
| brightness: 0.1, | |||||
| }) | |||||
| let layer = new DC.VectorLayer('layer') | |||||
| viewer.addLayer(layer) | |||||
| let positions = generatePosition(1) | |||||
| positions.forEach((item) => { | |||||
| let model = new DC.Model(item, '../assets/data/GroundVehicle.glb') | |||||
| layer.addOverlay(model) | |||||
| }) | |||||
| function generatePosition(num) { | |||||
| let list = [] | |||||
| for (let i = 0; i < num; i++) { | |||||
| let lng = 120.38105869 + Math.random() * 0.5 | |||||
| let lat = 31.10115627 + Math.random() * 0.5 | |||||
| list.push(new DC.Position(lng, lat)) | |||||
| } | |||||
| return list | |||||
| } | |||||
| function initViewer() { | |||||
| viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer(DC.ImageryType.AMAP,{ | |||||
| style:'img', | |||||
| crs:'WGS84' | |||||
| }) | |||||
| viewer.addBaseLayer( baseLayer,{ | |||||
| brightness:0.1 | |||||
| }) | |||||
| let layer = new DC.VectorLayer('layer') | |||||
| viewer.addLayer(layer) | |||||
| let positions = generatePosition(1) | |||||
| positions.forEach(item => { | |||||
| let model = new DC.Model(item, '../assets/data/GroundVehicle.glb') | |||||
| layer.addOverlay(model) | |||||
| }) | |||||
| viewer.flyTo(layer) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl:'../libs/dc-sdk/resources/' | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| viewer.flyTo(layer) | |||||
| } | |||||
| DC.ready({ | |||||
| baseUrl: '../libs/dc-sdk/resources/', | |||||
| }).then(initViewer) | |||||
| </script> | |||||
| </body> | |||||
| </html> | </html> |
| POSITION_UPDATE: 'positionUpdate', | POSITION_UPDATE: 'positionUpdate', | ||||
| } | } | ||||
| const ModelEventType = {} | |||||
| const ModelEventType = { | |||||
| READY: 'ready', | |||||
| TEX_READY: 'texturesReady', | |||||
| } | |||||
| const TileSetEventType = { | const TileSetEventType = { | ||||
| INITIAL_TILES_LOADED: 'initialTilesLoaded', | INITIAL_TILES_LOADED: 'initialTilesLoaded', | ||||
| LayerEventType, | LayerEventType, | ||||
| OverlayEventType, | OverlayEventType, | ||||
| TileSetEventType, | TileSetEventType, | ||||
| ModelEventType, | |||||
| TrackEventType, | TrackEventType, | ||||
| PathEventType, | PathEventType, | ||||
| PlotEventType, | PlotEventType, |
| export { default as LayerEvent } from './type/LayerEvent' | export { default as LayerEvent } from './type/LayerEvent' | ||||
| export { default as OverlayEvent } from './type/OverlayEvent' | export { default as OverlayEvent } from './type/OverlayEvent' | ||||
| export { default as TilesetEvent } from './type/TilesetEvent' | export { default as TilesetEvent } from './type/TilesetEvent' | ||||
| export { default as ModelEvent } from './type/ModelEvent' | |||||
| /** | /** | ||||
| * animation | * animation |
| /** | |||||
| * @Author : Caven Chen | |||||
| */ | |||||
| import { ModelEventType } from '../EventType' | |||||
| import Event from '../Event' | |||||
| class ModelEvent extends Event { | |||||
| constructor(model) { | |||||
| super(ModelEventType) | |||||
| this._model = model | |||||
| } | |||||
| /** | |||||
| * | |||||
| * @param type | |||||
| * @param callback | |||||
| * @param context | |||||
| */ | |||||
| on(type, callback, context) { | |||||
| this._model.then((model) => { | |||||
| switch (type) { | |||||
| case ModelEventType.READY: | |||||
| model.readyEvent.addEventListener(callback, context || this) | |||||
| break | |||||
| case ModelEventType.TEX_READY: | |||||
| model.texturesReadyEvent.addEventListener(callback, context || this) | |||||
| break | |||||
| default: | |||||
| break | |||||
| } | |||||
| }) | |||||
| return null | |||||
| } | |||||
| off(type, callback, context) { | |||||
| this._model.then((model) => { | |||||
| switch (type) { | |||||
| case ModelEventType.READY: | |||||
| model.readyEvent.removeEventListener(callback, context || this) | |||||
| break | |||||
| case ModelEventType.TEX_READY: | |||||
| model.texturesReadyEvent.removeEventListener( | |||||
| callback, | |||||
| context || this | |||||
| ) | |||||
| break | |||||
| default: | |||||
| break | |||||
| } | |||||
| }) | |||||
| return true | |||||
| } | |||||
| } | |||||
| export default ModelEvent |
| * Mouse events in 3D scene, optimized Cesium event model | * Mouse events in 3D scene, optimized Cesium event model | ||||
| */ | */ | ||||
| class MouseEvent extends Event { | class MouseEvent extends Event { | ||||
| constructor(viewer) { | |||||
| constructor(viewer, eventPropagation) { | |||||
| super(MouseEventType) | super(MouseEventType) | ||||
| this._viewer = viewer | this._viewer = viewer | ||||
| this._selected = undefined | this._selected = undefined | ||||
| this._eventPropagation = eventPropagation | |||||
| this._registerEvent() | this._registerEvent() | ||||
| this._addDefaultEvent() | this._addDefaultEvent() | ||||
| } | } | ||||
| let targetInfo = this._getTargetInfo(mouseInfo.target) | let targetInfo = this._getTargetInfo(mouseInfo.target) | ||||
| let overlay = targetInfo?.overlay | let overlay = targetInfo?.overlay | ||||
| let layer = targetInfo?.layer | let layer = targetInfo?.layer | ||||
| // get Overlay Event | // get Overlay Event | ||||
| if (overlay?.overlayEvent) { | if (overlay?.overlayEvent) { | ||||
| event = overlay.overlayEvent.getEvent(type) | event = overlay.overlayEvent.getEvent(type) | ||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| } | } | ||||
| // get Layer Event | // get Layer Event | ||||
| if ((!event || event.numberOfListeners === 0) && layer?.layerEvent) { | |||||
| if ( | |||||
| (!event || event.numberOfListeners === 0 || this._eventPropagation) && | |||||
| layer?.layerEvent | |||||
| ) { | |||||
| event = layer.layerEvent.getEvent(type) | event = layer.layerEvent.getEvent(type) | ||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| } | } | ||||
| // get Viewer Event | // get Viewer Event | ||||
| if ( | if ( | ||||
| (!event || event.numberOfListeners === 0) && | |||||
| (!event || event.numberOfListeners === 0 || this._eventPropagation) && | |||||
| this._viewer?.viewerEvent | this._viewer?.viewerEvent | ||||
| ) { | ) { | ||||
| event = this._viewer.viewerEvent.getEvent(type) | event = this._viewer.viewerEvent.getEvent(type) | ||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| } | } | ||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| // get Drill Pick Event | // get Drill Pick Event | ||||
| if (overlay?.allowDrillPicking) { | if (overlay?.allowDrillPicking) { | ||||
| let drillInfos = this._getDrillInfos(mouseInfo.windowPosition) | let drillInfos = this._getDrillInfos(mouseInfo.windowPosition) | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _leftUpHandler(movement) { | _leftUpHandler(movement) { | ||||
| this._raiseEvent(MouseEventType.LEFT_UP, { movement }) | |||||
| this._raiseEvent( | |||||
| MouseEventType.LEFT_UP, | |||||
| this._getMouseInfo(movement.position) | |||||
| ) | |||||
| } | } | ||||
| /** | /** | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _rightUpHandler(movement) { | _rightUpHandler(movement) { | ||||
| this._raiseEvent(MouseEventType.RIGHT_UP, { movement }) | |||||
| this._raiseEvent( | |||||
| MouseEventType.RIGHT_UP, | |||||
| this._getMouseInfo(movement.position) | |||||
| ) | |||||
| } | } | ||||
| /** | /** |
| export { default as Viewer } from './viewer/Viewer' | export { default as Viewer } from './viewer/Viewer' | ||||
| export { MouseEventType, SceneEventType } from './event' | |||||
| export { | |||||
| MouseEventType, | |||||
| SceneEventType, | |||||
| TileSetEventType, | |||||
| ModelEventType, | |||||
| } from './event' | |||||
| export { MouseMode } from './option' | export { MouseMode } from './option' | ||||
| class DynamicBillboard extends DynamicOverlay { | class DynamicBillboard extends DynamicOverlay { | ||||
| constructor(position, icon) { | constructor(position, icon) { | ||||
| super() | super() | ||||
| this._posistion = Parse.parsePosition(position) | |||||
| this._position = Parse.parsePosition(position) | |||||
| this._icon = icon | this._icon = icon | ||||
| this._delegate = new Cesium.Entity({ billboard: {} }) | this._delegate = new Cesium.Entity({ billboard: {} }) | ||||
| this._state = State.INITIALIZED | this._state = State.INITIALIZED | ||||
| this._startTime = Cesium.JulianDate.now() | this._startTime = Cesium.JulianDate.now() | ||||
| this._sampledPosition.addSample( | this._sampledPosition.addSample( | ||||
| this._startTime, | this._startTime, | ||||
| Transform.transformWGS84ToCartesian(this._posistion) | |||||
| Transform.transformWGS84ToCartesian(this._position) | |||||
| ) | ) | ||||
| this._delegate.position = this._sampledPosition | this._delegate.position = this._sampledPosition | ||||
| this._cache.push(this._startTime) | this._cache.push(this._startTime) |
| class DynamicModel extends DynamicOverlay { | class DynamicModel extends DynamicOverlay { | ||||
| constructor(position, modelUrl) { | constructor(position, modelUrl) { | ||||
| super() | super() | ||||
| this._posistion = Parse.parsePosition(position) | |||||
| this._position = Parse.parsePosition(position) | |||||
| this._modelUrl = modelUrl | this._modelUrl = modelUrl | ||||
| this._delegate = new Cesium.Entity({ model: {} }) | this._delegate = new Cesium.Entity({ model: {} }) | ||||
| this._state = State.INITIALIZED | this._state = State.INITIALIZED | ||||
| this._startTime = Cesium.JulianDate.now() | this._startTime = Cesium.JulianDate.now() | ||||
| this._sampledPosition.addSample( | this._sampledPosition.addSample( | ||||
| this._startTime, | this._startTime, | ||||
| Transform.transformWGS84ToCartesian(this._posistion) | |||||
| Transform.transformWGS84ToCartesian(this._position) | |||||
| ) | ) | ||||
| this._delegate.position = this._sampledPosition | this._delegate.position = this._sampledPosition | ||||
| this._delegate.orientation = new Cesium.VelocityOrientationProperty( | this._delegate.orientation = new Cesium.VelocityOrientationProperty( |
| import Parse from '../../parse/Parse' | import Parse from '../../parse/Parse' | ||||
| import { Transform } from '../../transform' | import { Transform } from '../../transform' | ||||
| import { Util } from '../../utils' | import { Util } from '../../utils' | ||||
| import { ModelEvent } from '../../event' | |||||
| class ModelPrimitive extends Overlay { | class ModelPrimitive extends Overlay { | ||||
| constructor(position, modelUrl) { | constructor(position, modelUrl) { | ||||
| this._position = Parse.parsePosition(position) | this._position = Parse.parsePosition(position) | ||||
| this._modelUrl = modelUrl | this._modelUrl = modelUrl | ||||
| this._delegate = Cesium.Model.fromGltfAsync({ url: modelUrl }) | this._delegate = Cesium.Model.fromGltfAsync({ url: modelUrl }) | ||||
| this._modelEvent = new ModelEvent(this._delegate) | |||||
| this._state = State.INITIALIZED | this._state = State.INITIALIZED | ||||
| } | } | ||||
| }) | }) | ||||
| return this | return this | ||||
| } | } | ||||
| /** | |||||
| * Subscribe event | |||||
| * @param type | |||||
| * @param callback | |||||
| * @param context | |||||
| * @returns {Overlay} | |||||
| */ | |||||
| on(type, callback, context) { | |||||
| this._overlayEvent.on(type, callback, context || this) | |||||
| this._modelEvent.on(type, callback, context || this) | |||||
| return this | |||||
| } | |||||
| /** | |||||
| * Unsubscribe event | |||||
| * @param type | |||||
| * @param callback | |||||
| * @param context | |||||
| * @returns {Overlay} | |||||
| */ | |||||
| off(type, callback, context) { | |||||
| this._overlayEvent.off(type, callback, context || this) | |||||
| this._modelEvent.off(type, callback, context || this) | |||||
| return this | |||||
| } | |||||
| } | } | ||||
| Overlay.registerType('model_primitive') | Overlay.registerType('model_primitive') |
| positions = positions.split(';').filter((item) => !!item) | positions = positions.split(';').filter((item) => !!item) | ||||
| } | } | ||||
| return positions.map((item) => { | return positions.map((item) => { | ||||
| // if (typeof item === 'string') { | |||||
| // return Position.fromString(item) | |||||
| // } else if (Array.isArray(item)) { | |||||
| // return Position.fromArray(item) | |||||
| // } else if ( | |||||
| // !(Object(item) instanceof Position) && | |||||
| // Object(item).hasOwnProperty('lng') && | |||||
| // Object(item).hasOwnProperty('lat') | |||||
| // ) { | |||||
| // return Position.fromObject(item) | |||||
| // } else if (Object(item) instanceof Position) { | |||||
| // return item | |||||
| // } | |||||
| return this.parsePosition(item) | return this.parsePosition(item) | ||||
| }) | }) | ||||
| } | } |
| createGooglePhotorealistic3DTileset: | createGooglePhotorealistic3DTileset: | ||||
| Cesium.createGooglePhotorealistic3DTileset, | Cesium.createGooglePhotorealistic3DTileset, | ||||
| createElevationBandMaterial: Cesium.createElevationBandMaterial, | createElevationBandMaterial: Cesium.createElevationBandMaterial, | ||||
| ModelAnimationLoop: Cesium.ModelAnimationLoop, | |||||
| } | } |
| /** | /** | ||||
| * Registers events | * Registers events | ||||
| */ | */ | ||||
| new MouseEvent(this) // Register global mouse events | |||||
| new MouseEvent(this, options.eventPropagation) // Register global mouse events | |||||
| this._viewerEvent = new ViewerEvent() // Register viewer events | this._viewerEvent = new ViewerEvent() // Register viewer events | ||||
| this._sceneEvent = new SceneEvent(this) // Register scene events | this._sceneEvent = new SceneEvent(this) // Register scene events | ||||