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类构造函数构造可渲染影像图层的主要过程示意图
转载于:https://www.cnblogs.com/rainbow70626/p/5260406.html
WorldWind源码剖析系列:BMNG类构造函数深入分析相关推荐
- WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer
星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...
- WorldWind源码剖析系列:外包围盒类BoundingBox和外包围球类BoundingSphere
PluginSDK中的外包围盒.外包围球分别用类 BoundingBox和BoundingSphere描述,其类图如下所示. 外包围盒BoundingBox类的corners字段用来存储外包围盒的8个 ...
- WorldWind源码剖析系列:可渲染对象类RenderableObject
RenderableObject是WorldWind中所有需要渲染的对象的父类,继承了接口IRenderable和Icomparable.其派生类体系如下所示.RenderableObject的成员如 ...
- WorldWind源码剖析系列:大气层散射球类AtmosphericScatteringSphere
大气层散射球类AtmosphericScatteringSphere代表地球外面的大气层散射球模型,可以控制开启/关闭渲染该对象.该类的类图如下. 该类所包含的主要字段.属性和方法如下: public ...
- 【java集合框架源码剖析系列】java源码剖析之ArrayList
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...
- React 源码剖析系列 - 不可思议的 react diff
目前,前端领域中 React 势头正盛,使用者众多却少有能够深入剖析内部实现机制和原理.本系列文章希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. React diff 作 ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- ChartCtrl源码剖析之——CChartAxis类
CChartAxis类用来绘制波形控件的坐标轴,这个源码相对较复杂,当初阅读的时候耗费了不少精力来理解源码中的一些实现细节. CChartAxis类的头文件. #if !defined(AFX_CHA ...
- React 源码剖析系列 - 解密 setState
this.setState() 方法应该是每一位使用 React 的同学最先熟悉的 API.然而,你真的了解 setState 么?先看看下面这个小问题,你能否正确回答. 引子 class Examp ...
最新文章
- 疫后“反弹式”增长,AI营销或为广告业打开一扇新窗
- XStream xml与javabean之间的互转
- [转载] 快速学习-Mybatis框架概述
- 关于 LDTP 操纵 windows 控件。
- 本地更新github项目_【图文说明】将本地项目上传到github上
- linux系统装psp,Linux上的PSP模拟器PPSSPP 1.7 发布了
- 如何看待 Kotlin 成为 Android 官方支持开发语言?
- C# ToString()格式笔记
- 显卡煲机测试软件,铁三角耳机煲机方法三分钟让您学会煲耳机
- 由公式抽样检查所想到的...
- kudu之tablet设计原理
- KVM安装+vlan配置(超详细)
- Because you loved me
- SpringSecurity简单集成
- 数据挖掘中所需的概率论与数理统计知识
- CuraEngine引擎命令行调用方法
- 【NOIP2015】洛谷2668 斗地主
- Fabric.js 自由绘制椭圆
- linux任务调度框架,任务调度框架Hangfire 简介
- spring-mybatis源码解析
热门文章
- Docker镜像操作相关
- 使用requests库
- java人体识别_基于安卓Android的人体动作行为识别系统APP设计(Android studio)
- Propertynbsp;#039;XXX#039;amp;nb…
- django2.0用python_blog: 利用6天下班业余时间使用django2.0+python3.6搭建属于自己的个人博客...
- 手机信号推流到rtmp服务器,大概是最简单的 rtmp 推流服务器搭建方法
- 在计算机网络术语中wan的中文意思是什么,男生聊天中wan是什么意思 wan是什么的缩写...
- 范凯谈Ruby on Rails项目实践
- 智能网联汽车硬件设备相关资料(取证用)
- 工业网关智能应用:基于PLC控制的智能大棚自动灌溉系统