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 自定义按钮(代码实现)+九宫格

    在一些下载应用里整个页面都是按钮,有好多好多,但是仔细观察不难发现他们很有规律.就像下面一样

  2. iOS 7中实现模糊效果

    本文译自iOS 7 Blur Effects with GPUImage. iOS 7在视觉方面有许多改变,其中非常吸引人的功能之一就是在整个系统中巧妙的使用了模糊效果.许多第三方应用程序已经采用了这 ...

  3. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  4. 敏捷开发中高质量 Java 代码开发实践

    Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题. 这些问题在一个项目组初建.需 ...

  5. PHP递归创建多级目录(一道面试题的解题过程)

    今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkd ...

  6. XSLT

    一.简介 XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言. XSL(eXtensible Stylesheet Language) -- 可扩展标记语言,主要用 ...

  7. dotnet use regex two samples

    One sample is used to replace double quote from words which encapsulated by csvwriter , you know csv ...

  8. 使用jmx监控tomcat

    1.在tomcat启动过程中,开启相应的参数配置: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -D ...

  9. 我的opencv之旅:ios人脸识别

    学习opencv有一年多了,这本来是我的毕业设计的一部分,但是因为不能突出专业重点,所以换了个课题. opencv在vc.android.ios下都能用,其中vc和android下的教程和主题贴最多, ...

  10. [转载]ExtJs4 笔记(6) Ext.MessageBox 消息对话框

    作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法 ...