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 ...
随机推荐
- HTML5 -1- 简介
在介绍HTML5之前我们应该先了解一下HTML5 我想从下面开始简单了解一下HTML5 什么是HTML5??? HTML5 即HTML 5.0 版本 正式制定时间是在2014年 遵循着移动先行(前四个 ...
- Objective-C之@类别小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 深入理解java虚拟机(3)---类的结构
计算机在开始的时候,只认识0和1,所以汇编语言是和机器结构或者说CPU绑定的.ARM体系结构就是这样一种体现,指令集的概念. 随着高级语言的出现,从字编码发展到了字节编码,计算机的先驱希望能够让语言能 ...
- navicat 连接sqlserver提示要安装 sql server native client
navicat 连接sqlserver提示要安装 sql server native client 解决方法:其实navicat自带sqlncli_x64.msi,就在安装目录下,安装后问题解决!
- python简单的爬虫,网页图片
1 #!/usr/bin/python 2 #coding=utf-8 3 import urllib 4 import re 5 6 def gethtml(url): 7 page=urllib. ...
- Profile 分析 Erlang 虚拟机源码时要注意的一个问题
最近用 Intel Vtune 剖析 Erlang 虚拟机的运行,想看看那些函数和语句耗时最多,遇到一个小问题,那就是 Vtune 给出的源码和汇编码对应有问题.这个问题在 profile 或 deb ...
- 设计模式C#实现(九)——工厂方法模式和简单工厂
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 构成: 1.Product工厂方法创建的对象的接口 2.Concrete ...
- JS高级程序设计2nd部分知识要点7
例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- java帮助文档下载
JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和 ...
- lvs realserver 配置VIP
# $# 表示提供到shell脚本或者函数的参数总数: # 1表示只有一个参数. #/bin/bash #file: tun_RS.sh if [ $# -ne 1 ]; then echo “usa ...