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()函数。

时间: 2024-10-22 08:57:57

WorldWind源码剖析系列:可渲染对象列表类RenderableObjectList的相关文章

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

经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示. 绘制经纬网格的主体函数为Render(),其内部主要调用以下函数完成绘制: ComputeGridValues()//计算格网值 RenderTropicLine()//绘制回归线 计算格网值ComputeGridValues()内部通过相机的真实视场角drawArgs.WorldCamera.TrueViewRange.Radian

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

配置载入器类ConfigurationLoader主要从指定的路径中加载保存星球相关参数的xml文件,从中读取数据来构造星球对象及其所关联的可渲染子对象列表并返回.该类的类图如下所示. 该类所包含的主要的方法基本都是静态的,功能说明如下: public static double ParseDouble(string s)将字符串s解析为Double型数字 private static bool ParseBool(string booleanString) 将字符串s解析为bool型 publ

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

PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程.三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进行世界变换,再通过设置观察矩阵以在场景中安置一个虚拟相机,构建一个视景体来裁剪场景的可见区域,然后在通过投影变换(平行投影或透视投影),获取三维场景的“像”,最后再通过视口变换,将场景的“像”光栅化输出到二维显示屏幕上.如下图所示. 其中投影变换主要有透视投影和平行投影两类.视景体类Frustum正

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

地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrainAccessor类的基类.该类类图如下. 基类TerrainAccessor提供的主要处理方法简要描述如下: protected string m_name; //地形模型名称 protected double m_north; //地形北部边界 protected double m_south; //地形南部边界 protected dou

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

WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()依次作以下几个事情: 1.  使用System.Version在内部,读取软件版本信息,并格式化输出.我们在外面配置软件版本,“关于”部分中版本自动更改. 获取格式化版本号 // Establish the version number string used for user display, // such as the Splash and 

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

星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染过程请参见文章<WorldWind源码剖析系列:星球经纬度格网的绘制>,是通过Form.OnPaint()函数激活.刷新和绘制的.星球球体的渲染过程请参见文章<WorldWind源码剖析系列:星球球体的加载与渲染>.而星球类World是绘制过程中从XML配置文件中读取参数构造的用来代表

WorldWind源码剖析系列:BMNG类构造函数深入分析

BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像.从NASA服务器上下载的经过分层分级过的瓦片影像.根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList.m_ShadedList

WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer

星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int RenderSurfaceSize = 256;//定义渲染表面尺寸的常量 RenderToSurface m_Rts = null;//D3D定义的类型 const int m_NumberRootTilesHigh = 5;//根瓦片高度数,即纬度方向上划分的瓦片数.经度方向上划分的瓦片数为该值

WorldWind源码剖析系列:表面影像类SurfaceImage

表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath;//影像文件的路径 double m_North;//影像文件的北部边界 double m_South;//影像文件的南部边界 double m_West;//影像文件的西部边界 double m_East; //影像文件的东部边界 Texture m_Texture = null;//用影像文件