WorldWind源码剖析系列:BMNG类构造函数深入分析
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类构造函数深入分析的更多相关文章
- WorldWind源码剖析系列:星球类World
星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...
- WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore
影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...
- WorldWind源码剖析系列:表面影像类SurfaceImage
表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath ...
- WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer
星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...
- WorldWind源码剖析系列:设置类SettingsBase
PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...
- WorldWind源码剖析系列:表面瓦片类SurfaceTile
表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...
- WorldWind源码剖析系列:挂件类Widgets
WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...
- WorldWind源码剖析系列:下载请求类DownloadRequest
下载请求类DownloadRequest是各种下载请求的抽象基类,先派生出网络下载请求类WebDownloadRequest,再派生出地理空间下载请求类GeoSpatialDownloadReques ...
随机推荐
- 可展开的列表组件——ExpandableListView深入解析
可展开的列表组件--ExpandableListView深入解析 一.知识点 1.ExpandableListView常用XML属性 2.ExpandableListView继承BaseExpanda ...
- 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
一.static关键字 1.1.static关键字 静态:static用法:是一个修饰符,用于修饰成员(成员变量,成员函数)static 修饰的内容,所有对象共享当成员被静态修饰后,就多了一个调用方式 ...
- vector,arraylist, linkedlist的区别是什么
LinkedList类 LinkedList实现了List接口,允许null元素. 此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部. Lin ...
- [windows]利用IPSec对指定的ip进行访问限制
以win2003系统为例: 操作(看图): 1.任务:现在192.168.2.200可访问;目的;本地禁止对其访问 2.进入:管理工具->本地安全设置->IP安全策略 3.右键创建IP安全 ...
- LightSpeed 相关问题处理
1. 关于KeyTable 配置文件中有一个节点 lightSpeedContexts 该节点下存放的是一些使用LightSpeed的配置,如 <add name="myDB&quo ...
- Eclipse EE 发布项目导致 Tomcate 的配置文件 server.xml 还原
在server.xml中配置SSL时,发现了每次发布项目都导致server.xml被还原了: <Connector port="8443" protocol="or ...
- 深入PHP内核之in_array
无意中看到一段代码 1.a.php <?php $y="12"; $x = array(); for($j=0;$j<50000;$j++){ $x[]= " ...
- 烂泥:KVM、kickstart与NFS集成
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 其实这篇文章原本是可以不写的,不过为了学习NFS的使用形式还是写下,算是作为一个笔记. 有关NFS的搭建与配置,可以参考我以前的文档<烂泥:NFS ...
- CentOS 6.5上MySQL安装部署与入门。
centos 6.5 yum 安装mysql1. 安装软件:yum install -y mysql-server mysql mysql-devel2.启动服务:service mysqld sta ...
- myeclipse中运行tomcat报错java.lang.NoClassDefFoundError
有关myeclipse的小问题,在myeclipse中运行tomcat时显示已启动,但是无法访问localhost:8080/,显示404错误.在控制台中发现报错代码如下: java.lang.NoC ...