WorldWind系列十一:Virtual Earth插件学习

学习WorldWind有很长时间了,理论学习算是基本完成了。我体会是WW的学习主要分为两大步:WW框架体系学习和WW插件学习。学习WW插件逐步深入后,必然要首先学习Direct3D编程,这也算是我的经验之谈吧。今天Virtual Earth插件学习完成,也标志着我可以从WW理论转向WW实践啦。虽然我总结介绍的是Virtual Earth插件,但是希望网友阅读下面的内容前,最好能够先深入学习Direct3D编程、BMNG和Globe Icon插件的底层渲染,这些都是学习Virtual Earth的基础。

Virtual Earth插件包括以下几个类:

VirtualEarthForm 窗体类

VirtualEarthPlugin插件类,继承自Plugin(重要)

VeReprojectTilesLayer 渲染对象类,继承自Renderable Object(重要)

VeTile 瓦片对象类(真正实现大部分功能的)(重要)

Projection投影变换类(重要)

Search类

PushPin类

我们先看看VirtualEarthPlugin,所有的插件类必须继承自Plugin.cs,必须重写Load()和Unload()方法。这两个方法分别实现插件的加载和卸载。

Load()方法一般是实现添加菜单和添加工具按钮,跟前面介绍插件都很类似的,自己开发插件时模仿着这套路写就行。

public override void Load()
         {
             try
             {
           //判断当前World为Earth(注:其他星体可通过名字判断)
                 if (ParentApplication.WorldWindow.CurrentWorld.IsEarth)
                 {  //初始化VE插件控制窗体
                     m_Form = new VirtualEarthForm(ParentApplication);
                     m_Form.Owner = ParentApplication;
            //添加VE插件菜单
                     m_MenuItem = new MenuItem("MicroSoft VirtualEarth");
                     m_MenuItem.Click += new EventHandler(menuItemClicked);
                     ParentApplication.PluginsMenu.MenuItems.Add(m_MenuItem);
                     //#if DEBUG
                     string imgPath = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Plugins\\VirtualEarth\\VirtualEarthPlugin.png";
                     //#else
                     //                    _pluginDir = this.PluginDirectory;
                     //                    string imgPath = this.PluginDirectory + @"\VirtualEarthPlugin.png";
                     //#endif
                     if (File.Exists(imgPath) == false)
                     {
                         Utility.Log.Write(new Exception("imgPath not found " + imgPath));
                     }
             //添加工具按钮,会出现工具栏里
                     m_ToolbarItem = new WorldWind.WindowsControlMenuButton(
                         "MicroSoft VirtualEarth",
                         imgPath,
                         m_Form);
                     ParentApplication.WorldWindow.MenuBar.AddToolsMenuButton(m_ToolbarItem);
                     base.Load();
                 }
             }
             catch (Exception ex)
             {
                 Utility.Log.Write(ex);
                 throw;
             }
         }

时间: 2024-08-02 03:34:04

WorldWind系列十一:Virtual Earth插件学习的相关文章

WorldWind系列九:Blue Marble插件学习

有两三天没更新博客了,感觉自己又偷懒啦!周五其实主要还是看了研究WorldWind中的Virtual Earth插件功能,我以后准备开发的跟VirtualEarth很类似的,一定得把它攻下.当时Virtual Earth学习没太有大的进展,遇到的难题是:1.图片如何叠加到球体上?(包括投影变换.定位.缩放等)2.Direct 3D开发 .因为Virtual Earth是在Blue Marble插件的基础上开发,所以周六我主要是看了Direct X的基础知识和研究Blue Marble.现在与大家

WorldWind系列七:Load/Unload Plugins——投石问路篇

今天原计划把Load/Unload Plugins完全弄明白,可是分析该功能的过程时发现Load/Unload Plugins没有想象的简单,而且它的实现代码中有很多重点知识点值得深入学习.所以,将该部分分两次总结.这次主要是为明天的深入学习做些铺垫,准备分两部分:World Wind Plugin基础知识.展示插件DEMO帮大家坚定信心. World Wind Plugin基础知识 WorldWind魅力不仅是因为它是开源的三维软件,而且在于它更是一个开源的三维框架.很多朋友都想基于World

WorldWind系列二:擒贼先擒王篇1

有了WorldWind系列一的基础,我们已经可以进行正常调试运行啦!可以先操作看看软件的功能吧,这样我们才可以知道WorldWind有哪些功能等待我们学习的. 开始我们的"WorldWind系列二:擒贼先擒王"分析WorldWind主窗体,从Main函数入口一步步解析学习.至少对于我来说,里面有很多知识要学的.(补充一下:无法进入WorldWind.cs窗体的设计界面,这个问题我早就发现了,但没解决,我们根据功能直接看代码吧) 1.使用System.Version在内部,读取软件版本信

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一 前言:前面我们基本已经完成了一个Demo,我们在后面的

在Silverlight 2应用程序中集成Virtual Earth

概述 Virtual Earth是什么,我想不用多做解释了.微软在推出自己的Virtual Earth之后,开放了大量的 APIs,使得我们可以方便集成到自己的应用程序中. 在HTML中集成 在开始之前,我们先来简单看一下如何在HTML中集成Virtual Earth,大家可以去这里查询相关APIs, 我们来看看如何加载默认地图,如下代码所示: <html> <head> <title></title> <meta http-equiv="C

一个用Windows Azure和Virtual Earth打造的毕业小设计和消遣工具

毕业论文的主题是云计算,为此最近这段时间看了无数相关理论文献和观点.上个礼拜结了题,但是自己偷懒了一把,本来是计划用 Azure写个小Sample的,后来想想论文字数到了就算了. 结果答辩前两天,导师说这样你的毕业论文很不饱满,创新什么的都没有,索然无味,还是把本来设想的程序给加进去吧!想想也是,毕竟有个亮点,娱乐娱乐答辩老师也好. 然后便连夜装好开发环境,找Sample, 看教程,因为本来就是想写个小应用,代码写起来很快.因为几个月前就拿到了Azure的测试邀请,写好就能直接往云端部署了. 这

WorldWind系列三

简单功能分析--主窗体的键盘监听处理及拷贝和粘贴位置坐标功能 在分析功能时发现,各功能都有自己的快捷键相应,比如今天要分析的 Copy Coordinates (Ctrl+C)和Paste Coordinates (Ctrl+P),以及主窗体的全屏功能也是通过快捷键(Alt+Enter).这就使我需要彻底分析一下主窗体的键盘监听处理啦. 主窗体的键盘监听处理 与WorldWind系列三:功能分析--截屏功能和"关于"窗体分析 中AboutDialog.cs分析类似,WorldWind主

【Xamarin开发 Android 系列 3】循序渐进的学习顺序

原文:[Xamarin开发 Android 系列 3]循序渐进的学习顺序 指定合理的学习步骤,将各个技术点进行强化.慢慢 的就从点到线 到面的飞跃,一切仅仅是时间问题,开始前,请记住,学习是最佳的投资方式.风险成本极小,但是收货极佳. 用最小的杠杠,撬动爆发力极强的财富,那就是学习和经验的累积的过程!      [学习顺序-1 国内篇] [Xamarin Android开发实战基础篇] 第1章 Xamarin开发Anroid应用介绍 11.1 Xamarin基本知识 11.1.1 Xamarin

xen虚拟化实战系列(十一)之xen虚拟机磁盘文件挂载

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1286477 xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装xen虚拟化实战系列(二)之xen虚拟机安装xen虚拟化实战系列(三)之xen虚拟机复制xen虚拟化实战系列(四)之xen虚拟机扩展磁盘空间一法xen虚拟化实战系列(五)之xen虚拟机扩展磁盘空间再一法xen虚拟化实战系列(六)之x