cesium 初始化的一些重要成员和逻辑

介绍

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

猜你喜欢

转载自blog.csdn.net/qq_22849251/article/details/130310453