WorldWind源码剖析系列:可渲染对象列表类RenderableObjectList
可渲染对象列表类RenderableObjectList用来存储与一个星球体相关联的全部的可渲染对象,继承自可渲染对象类RenderableObject。RenderableObjectList的类图如下所示。

该类所包含的主要的字段、属性和方法如下:
protected ArrayList m_children = new ArrayList();//存可渲染的子对象的列表,对应属性ChildObjects不可浏览,属性Count返回可渲染的子对象的个数
string m_DataSource = null; //数据源
TimeSpan m_RefreshInterval = TimeSpan.MaxValue; //刷新时间间隔
World m_ParentWorld = null; //该可渲染对象列表类所从属的星球父类
Cache m_Cache = null; //缓冲区
System.Timers.Timer m_RefreshTimer = null; //刷新定时器
public bool ShowOnlyOneLayer; //是否只显示一个图层
private bool m_disableExpansion = false; //是否禁用扩展
bool hasSkippedFirstRefresh = false;//是否已经跳过了第一次刷新
两个构造函数RenderableObjectList()主要完成成员初始化工作
public void StartRefreshTimer()方法用来启动和刷新定时器
public virtual RenderableObject GetObject(string name)根据名称返回可渲染子对象
public virtual bool Enable(string name)禁用或启动指定名称的图层,内部通过递归的方式调用自身完成禁用或启动。其中用到的as运算符用于执行引用类型的显式类型转换。如果要转换的类型与指定的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回null(PS:is运算符可以检查对象是否与特定的类型兼容,“兼容”表示对象是该类型,或者派生于该类型)
public virtual void RemoveAll()逐个地移除全部的可渲染的子对象
public virtual void TurnOffAllChildren()关闭即禁用全部的可渲染的子对象所对应的图层
public override void Initialize(DrawArgs drawArgs)初始化
public override void Update(DrawArgs drawArgs)更新
public override void Render(DrawArgs drawArgs)渲染
public override bool PerformSelectionAction(DrawArgs drawArgs)执行选取可渲染的子对象的动作
public override void Dispose()释放全部的可渲染的子对象
public virtual void Add(RenderableObject ro) 添加一个可渲染的子对象
public virtual void Remove(string objectName) 移除一个指定名称的可渲染的子对象
public virtual void Remove(RenderableObject layer) 移除一个指定可渲染的子对象
public virtual void SortChildren()根据渲染的优先级对可渲染的子对象排序
private void UpdateRenderable(RenderableObject oldRenderable, RenderableObject newRenderable)更新可渲染的子对象的可渲染状态
private void compareRefreshLists(RenderableObjectList newList, RenderableObjectList curList) 比较一个新的和当前的可渲染的子对象列表,被UpdateRenderable()函数调用
private void m_RefreshTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 刷新定时器绑定的处理事件,内部调用ConfigurationLoader.getRenderableFromLayerFile()函数。
WorldWind源码剖析系列:可渲染对象列表类RenderableObjectList的更多相关文章
- WorldWind源码剖析系列:经纬度格网类LatLongGrid
经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示. 绘制经纬网格的主体函数为Render ...
- WorldWind源码剖析系列:配置载入器类ConfigurationLoader
配置载入器类ConfigurationLoader主要从指定的路径中加载保存星球相关参数的xml文件,从中读取数据来构造星球对象及其所关联的可渲染子对象列表并返回.该类的类图如下所示. 该类所包含的主 ...
- WorldWind源码剖析系列:视景体类Frustum
PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程.三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进 ...
- WorldWind源码剖析系列:二维点类Point2d和三维点类Point3d
PluginSDK中的点主要有二维和三维两种类型,分别用来描述平面和立体点.其类图如下. 这两个类比较简单.其字段成员主要用来描述点对象在各坐标轴上的分量. 属性Length用来返回二维和三维点的距离 ...
- WorldWind源码剖析系列:地形访问器类TerrainAccessor
地形访问器类TerrainAccessor 地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrain ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...
- WorldWind源码剖析系列:星球类World
星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
- WorldWind源码剖析系列:可渲染对象类RenderableObject
RenderableObject是WorldWind中所有需要渲染的对象的父类,继承了接口IRenderable和Icomparable.其派生类体系如下所示.RenderableObject的成员如 ...
- WorldWind源码剖析系列:窗口定制控件类WorldWindow
在WorldWindow定制控件是从Control类派生出来的,需要自己操纵GDI+绘制所需要的界面效果,这种自定义控件比较耗费精力,需要比较深厚的GDI+和DirectX 3D开发功底.(区别于用户 ...
随机推荐
- oracle上机实验内容
这是oracle实验的部分代码,我花了一中午做的. 第一次上机内容 实验目的:熟悉ORACLE11G的环境 实验内容: 第二次上机内容 实验目标:掌握oracle体系结构,掌握sqlplus的运行环境 ...
- Java - TreeSet源码解析
Java提高篇(二八)------TreeSet 与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap& ...
- html标签简介(常用)
html常识 什么是HTML htyper text markup language 即超文本标记语言 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签 ...
- python3爬虫(find_all用法等)
#read1.html文件 # <html><head><title>The Dormouse's story</title></head> ...
- chrome-Firefox-IE浏览器兼容总结
作为一名WEB前端程序员,相信每个人对浏览器的兼容都"情有独钟",下面就一些常用的浏览器的兼容列举一二. 一.块级元素(block)一般不转化为inline-block,其实是因为 ...
- WebGIS裁剪算法-线裁剪多边形
在gis系统中 经常会用到一些裁剪的方法,首先推荐一个非常好用的空间分析JavaScript库--Turf.js,不仅功能强大.使用简单,同时处理速度也很快. Turf.js中提供了一中多边形的裁剪方 ...
- 检测到在集成的托管管道模式下不适用的ASP.NET设置
解决方法是修改web.config如下: <system.webServer> <validation validateIntegratedModeConfiguration=&qu ...
- FileWriter剖析
集合这种容器存储数据,它只能在内存中临时存储,不能永久存储,这样会导致数据的丢失,所以出现了IO流. IO流用来处理设备之间的数据传输.可以用来做复制文件,上传文件,下载文件. 读数据是输入流,写数据 ...
- OpenCV 图片美化
1.彩色直方图 def ImgHist(image,type): color = (255,255,255) windowName='gray' if type==31: color=(255,0,0 ...
- Windows10+VS2017 用GLFW+GLAD 搭建OpenGL开发环境
本文参考:https://learnopengl-cn.github.io/ 一 下载GLFW(https://www.glfw.org/download.html) 和 GLAD(https:// ...