可渲染对象列表类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的更多相关文章

  1. WorldWind源码剖析系列:经纬度格网类LatLongGrid

    经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示. 绘制经纬网格的主体函数为Render ...

  2. WorldWind源码剖析系列:配置载入器类ConfigurationLoader

    配置载入器类ConfigurationLoader主要从指定的路径中加载保存星球相关参数的xml文件,从中读取数据来构造星球对象及其所关联的可渲染子对象列表并返回.该类的类图如下所示. 该类所包含的主 ...

  3. WorldWind源码剖析系列:视景体类Frustum

    PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程.三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进 ...

  4. WorldWind源码剖析系列:二维点类Point2d和三维点类Point3d

    PluginSDK中的点主要有二维和三维两种类型,分别用来描述平面和立体点.其类图如下. 这两个类比较简单.其字段成员主要用来描述点对象在各坐标轴上的分量. 属性Length用来返回二维和三维点的距离 ...

  5. WorldWind源码剖析系列:地形访问器类TerrainAccessor

    地形访问器类TerrainAccessor 地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrain ...

  6. WorldWind源码剖析系列:星球球体的加载与渲染

    WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...

  7. WorldWind源码剖析系列:星球类World

    星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...

  8. WorldWind源码剖析系列:可渲染对象类RenderableObject

    RenderableObject是WorldWind中所有需要渲染的对象的父类,继承了接口IRenderable和Icomparable.其派生类体系如下所示.RenderableObject的成员如 ...

  9. WorldWind源码剖析系列:窗口定制控件类WorldWindow

    在WorldWindow定制控件是从Control类派生出来的,需要自己操纵GDI+绘制所需要的界面效果,这种自定义控件比较耗费精力,需要比较深厚的GDI+和DirectX 3D开发功底.(区别于用户 ...

随机推荐

  1. Failed to unregister the JMX name: org.apache.commons.dbcp2:name=xxx,type=BasicDataSource

    把datesource的bean的class由 org.apache.commons.dbcp2.BasicDataSource 改成 org.apache.tomcat.dbcp.dbcp.Basi ...

  2. Substrings(hdu1238)字符串匹配

    Substrings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. 背景平铺(兼容IE8)

    标准浏览器通过background-size属性设置;IE8以下通过滤镜实现. 代码如下: /* IE8 */ filter: progid:DXImageTransform.Microsoft.Al ...

  4. 集合框架四(Map)

    Map的主要实现类: --HashMap:Map的主要实现类(掌握) --LinkedHashMap:使用链表维护添加进Map中的顺序,遍历时按添加时的顺序遍历 --TreeMap:按照添加进Map中 ...

  5. js-对象深度克隆方法

    学习收藏. 1.来自http://www.cnblogs.com/yxz-turing/p/4784861.html function cloneObj(obj){ var str, newobj = ...

  6. Python Django框架笔记(六):模板

    (一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...

  7. python常用模块之-random模块

    random模块顾名思义就是生成随机数的模块. random模块有以下常见方法: 1,打印0-1之间的任意随机浮点数,不能指定区间. print(random.random()) 2,打印随机符点数, ...

  8. python函数-匿名函数

    1,匿名函数,故名思意,就是没有名字的函数. def fun(x): return x+x 上述代码的作用就是求x+x的和的函数.如果调用该函数的话,可以使用fun(1)即可.那么lambda函数和上 ...

  9. windows10如何打开vhd文件

    本人电脑安装了Visual Studio 2017,但是由于项目需求需要Core SDK(2.0)的版本支持,也就是2017最新版.所以现在需要利用visual Studio 2017最新版本的安装包 ...

  10. 如何避免SHRINKDATABASE & SHRINKFILE 产生索引碎片(转载)

    1. TRUNCATEONLY参数的使用我们在建立的Job中通常使用如下的语法DBCC SHRINKDATABASE (N'DB', 10,TruncateOnly)其中TruncateOnly的用处 ...