BMNG构造函数深入分析

一、主要类图

二、主要功能:

1)        BMNG类

BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像、从NASA服务器上下载的经过分层分级过的瓦片影像。根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList、m_ShadedList和m_ShadedBathyList。其中:

(1) m_BlueMarbleList, 名称为Blue Marble,包含2个成员,分别是ImageLayer类型的m_BlueMarbleBase和QuadTileSet类型的m_BlueMarbleTiled。

(2) m_ShadedList,名称为BMNG,包含12个成员,每个元素都是RenderableObjectList类型对象m_RenderableLayers[0, i],每个m_RenderableLayers[0, i]又包含两个成员,分别是ImageLayer类型的m_ImageLayers[0, i]和QuadTileSet类型的m_QuadTileLayers[0, i]。

(3) m_ShadedBathyList,名称为BMNG (Bathymetry),包含12个成员,每个元素都是RenderableObjectList类型对象m_RenderableLayers[0, i],每个m_RenderableLayers[0, i]又包含两个成员,分别是ImageLayer类型的m_ImageLayers[1, i]和QuadTileSet类型的m_QuadTileLayers[1, i]。

2)        BmngLoader类

BmngLoader类继承自插件引擎中的插件基类PluginEngine.Plugin,并重载了父类的方法Load()和UnLoad(),该类以具体的插件对象的形式存在,实现将BMNG类与“Blue Marble”有关的影像从本地文件或远程服务器上下载并渲染到三维数字地球上,在重载方法Load()中具体具体构造调用如下代码:

m_BmngForm = new BMNG(ParentApplication.WorldWindow, m_MenuItem)。

三、构造过程分析

1)        初始化构造组件;

2)        读取\Plugins\BlueMarble\settings.txt文件中的数值来设置组合框中所使用的Bule Marble版本的选取索引值;

3)        设置“Blue Marble”主题的所有可渲染图层的显示窗体;

4)        遍历当前渲染窗体的所包含的子可渲染对象m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects,如果发现存在有子可渲染对象属于RenderableObjectList类型,且子可渲染对象的名称为"Images",则把名称为“The Blue Marble”的可渲染对象列表m_RenderableList添加到名称为"Images"的可渲染对象列表中的根节点中去;如果没有找到名称为"Images"的可渲染对象列表,则直接将新创建的可渲染对象列表对象m_RenderableList添加到当前星球的可渲染对象列表中去;

5)        BMNG类构造函数中构造可渲染影像图层的主要的过程用图1来阐明;

6)        获取操作系统当前的月份,来设置滑动条的当前显示值;

7)        定义定时器timer对象,绑定处理方法timer_Tick,timer按1秒间隔去监听并获取用户在滑动条“Blue Marble Next-Generation Plugin v1.0”控件上所选取月份值,接下来调用方法TurnOffLayers()先将可渲染对象列表m_RenderableLayers中的每一个子渲染对象的渲染状态IsOn设置为false,然后根据当前选取的月份值将当前月份的可渲染对象列表m_RenderableLayers中的对应的子渲染对象的渲染状态IsOn设置为true。

8)        最后,当组合框的SelectedIndex=2,即选择的是"Blue Marble (Original)"时,在数字地球上显示原始的Blue Marble影像;当组合框的SelectedIndex=0或1,即选择项为BMNG或BMNG (Bathymetry)时,将分别存储这两类影像的可渲染对象列表m_ShadedList和m_ShadedBathyList的属性IsOn设置为true。

图1 BMNG类构造函数构造可渲染影像图层的主要过程示意图

WorldWind源码剖析系列:BMNG类构造函数深入分析的更多相关文章

  1. WorldWind源码剖析系列:星球类World

    星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...

  2. WorldWind源码剖析系列:星球球体的加载与渲染

    WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...

  3. WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore

    影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...

  4. WorldWind源码剖析系列:表面影像类SurfaceImage

    表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath ...

  5. WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer

    星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...

  6. WorldWind源码剖析系列:设置类SettingsBase

    PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...

  7. WorldWind源码剖析系列:表面瓦片类SurfaceTile

    表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...

  8. WorldWind源码剖析系列:挂件类Widgets

    WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...

  9. WorldWind源码剖析系列:下载请求类DownloadRequest

    下载请求类DownloadRequest是各种下载请求的抽象基类,先派生出网络下载请求类WebDownloadRequest,再派生出地理空间下载请求类GeoSpatialDownloadReques ...

随机推荐

  1. iOS App打包流程

    1.什么是打包 将应用程序统一放在一个后缀是ipa的文件中,然后发给其他人,可以安装在手机上供用户或测试人员安装 2.可安装ipa的前提 ①说清楚是哪一个应用程序(App Id) ②可以安装在哪一台设 ...

  2. Objective-C之代理设计模式小实例

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误

    今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄 ...

  4. 使用POI实现数据导出Excel表格

    package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...

  5. js日期时间函数

    日期时间脚本库方法列表 Date.prototype.isLeapYear 判断闰年Date.prototype.Format 日期格式化Date.prototype.DateAdd 日期计算Date ...

  6. Java解决题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子。。。

    题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数.(请用Java语言作答) 样例输入: 3 样 ...

  7. SqlBulkCopy块拷贝数据时,不履行触发器和束缚 解决办法

    在new SqlBulkCopy时,设置SqlBulkCopyOptions属性即可 SqlBulkCopy bulkCopy = new SqlBulkCopy(ConStr,SqlBulkCopy ...

  8. Mac OS X 快捷键

    启动快捷键 按下按键或组合键,直到所需的功能出现(例如,在启动过程中按住 Option 直到出现“启动管理程序”,或按住 Shift 直到出现“安全启动”).提示:如果启动功能未起作用,而您使用的是第 ...

  9. Linux 安装 redis

      环境:centos7 参考:http://blog.csdn.net/lk10207160511/article/details/50364088 步骤如下: 安装redis: 打开终端 输入 s ...

  10. PHP通过串口发短信

    随技术进步,短信收发领域按时间先后产生了三种模式:BLOCK MODE,基于AT指令的TEXT MODE,基于AT指令的PDU MODE.其中,TEXT MODE比较简单,多款诺基亚手机均支持此款模式 ...