介绍
new Viewer后具体初始化了那些成员?这里通过debug记录一些重要的成员,以及他们的关系
# Cesium初始化
Viewer
CesiumWidget
Scene
// 重要成员
Context
FrameState // this._frameState
this._primitives = new PrimitiveCollection(); //重要,各种需要渲染的数据最终会加这里
this._groundPrimitives = new PrimitiveCollection();
Camera //
// 重要方法
updateFrameState
initializeFrame
Globe
// 重要成员
EllipsoidTerrainProvider // this._terrainProvider = terrainProvider;
ImageryLayerCollection // this._imageryLayerCollection = imageryLayerCollection;
GlobeSurfaceShaderSet // this._surfaceShaderSet = new GlobeSurfaceShaderSet();
QuadtreePrimitive // this._surface = new QuadtreePrimitive({tileProvider: new GlobeSurfaceTileProvider({terrainProvider: terrainProvider,imageryLayers: imageryLayerCollection,surfaceShaderSet: this._surfaceShaderSet,}),});
Clock // this._clock
// CesiumWidget初始化的时候重要逻辑
// this.useDefaultRenderLoop = defaultValue(options.useDefaultRenderLoop,true); // 这里重要,赋值的时候会执行startRenderLoop函数,利用requestAnimationFrame逐帧执行render函数
DataSourceCollection // this._dataSourceCollection = dataSourceCollection;
// 重要成员
// dataSourceAdded = new Event();
DataSourceDisplay({
scene: scene,dataSourceCollection: dataSourceCollection}) // this._dataSourceDisplay = dataSourceDisplay;
// 重要成员
DataSourceCollection // this._dataSourceCollection geojson、kml大客户
PrimitiveCollection // 最终的归宿
CustomDataSource // this._defaultDataSource 小客户
// 重要成员
EntityCollection // this._entityCollection = new EntityCollection(this); this.entities = this._entityCollection;
// 重要逻辑
var dataSourceCollection = options.dataSourceCollection;
var primitives = new PrimitiveCollection(); this._primitives = primitives;
var defaultDataSource = new CustomDataSource(); this._onDataSourceAdded(undefined, defaultDataSource); this._defaultDataSource = defaultDataSource;
EventHelper
// 需要留意的逻辑
scene.imageryLayers.addImageryProvider(options.imageryProvider); // 这里是加的天地图的UrlTemplateImageryProvider
eventHelper.add(clock.onTick, Viewer.prototype._onTick, this); // 这里是事件同步绑定,clock.onTick每一帧都执行,所以Viewer.prototype._onTick每一帧也都执行,这块可以全局搜索Viewer.js中eventHelper.add,下面只列举一些重要的
eventHelper.add(dataSourceCollection.dataSourceAdded,Viewer.prototype._onDataSourceAdded,this);
eventHelper.add(dataSourceCollection.dataSourceRemoved,Viewer.prototype._onDataSourceRemoved,this);
eventHelper.add(scene.postRender, Viewer.prototype._postRender, this);
this._dataSourceAdded(dataSourceCollection, dataSourceCollection.get(i)); // DataSourceCollection管理
this._dataSourceAdded(undefined, dataSourceDisplay.defaultDataSource); // CustomDataSource管理,entityCollection.collectionChanged和Viewer._onEntityCollectionChanged绑定
eventHelper.add(dataSourceCollection.dataSourceAdded,Viewer.prototype._dataSourceAdded,this);
eventHelper.add(dataSourceCollection.dataSourceRemoved,Viewer.prototype._dataSourceRemoved,this);
// 需要留意的属性
entities = return this._dataSourceDisplay.defaultDataSource.entities; // this._dataSourceDisplay.defaultDataSource是CustomDataSource // this._dataSourceDisplay.defaultDataSource.entities是EntityCollection