谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 218|回复: 0

[WorldWind技术] 分析一般性的插件加载全过程

[复制链接]
  • TA的每日心情
    无聊
    2015-8-7 10:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-17 10:27 | 显示全部楼层 |阅读模式

    我们先看看Plugin类的继承图,看看到底都有些什么插件,然后在分析一般性的插件加载全过程。


    哦,原来这么多插件,我们要基于WW开发自己的应用,只需继承Plugin类写出自己的插件功能即可的。

    我们现在分析插件加载过程,请确保你看过WorldWind学习系列二:擒贼先擒王篇2 中的(5.加载上次使用的配置信息)。加载的插件入口就是WorldWind.cs的Main()中调用的LoadSettings()静态方法。

    1.读取WorldWind的配置中插件信息

    加载WorldWind配置

    private static void LoadSettings()
             {
                 try
                 {
         //先读取上次使用时保存的“使用插件配置文件”,如果存在,则从文件中读取配置实例化WorldWindSettings
                     Settings = (WorldWindSettings) SettingsBase.Load(Settings, SettingsBase.LocationType.User);
                     if(!File.Exists(Settings.FileName))
                     {
                //我们假定是配置文件不存在,这就是一个个地加载插件,保存到ArrayList中 
                         Settings.PluginsLoadedOnStartup.Add("ShapeFileInfoTool");
                         //Settings.PluginsLoadedOnStartup.Add("OverviewFormLoader");
                         //Settings.PluginsLoadedOnStartup.Add("Atmosphere");
                         Settings.PluginsLoadedOnStartup.Add("SkyGradient");
                         Settings.PluginsLoadedOnStartup.Add("BmngLoader");
                         //Settings.PluginsLoadedOnStartup.Add("Compass");
                         //Settings.PluginsLoadedOnStartup.Add("ExternalLayerManagerLoader");
                         Settings.PluginsLoadedOnStartup.Add("MeasureTool");
                         //Settings.PluginsLoadedOnStartup.Add("MovieRecorder");
                         Settings.PluginsLoadedOnStartup.Add("NRLWeatherLoader");
                         Settings.PluginsLoadedOnStartup.Add("ShapeFileLoader");
                         Settings.PluginsLoadedOnStartup.Add("Stars3D");
                         Settings.PluginsLoadedOnStartup.Add("GlobalClouds");
                         Settings.PluginsLoadedOnStartup.Add("PlaceFinderLoader");
                         Settings.PluginsLoadedOnStartup.Add("LightController");
                         Settings.PluginsLoadedOnStartup.Add("Earthquake_2.0.2.1");
                         Settings.PluginsLoadedOnStartup.Add("Historical_Earthquake_2.0.2.2");
                         Settings.PluginsLoadedOnStartup.Add("KMLImporter");
                         //Settings.PluginsLoadedOnStartup.Add("doublezoom");
                         //Settings.PluginsLoadedOnStartup.Add("PlanetaryRings");
                         Settings.PluginsLoadedOnStartup.Add("TimeController");
                         //Settings.PluginsLoadedOnStartup.Add("WavingFlags");
                         Settings.PluginsLoadedOnStartup.Add("ScaleBarLegend");
                         Settings.PluginsLoadedOnStartup.Add("Compass3D");
                         Settings.PluginsLoadedOnStartup.Add("AnaglyphStereo");
                         Settings.PluginsLoadedOnStartup.Add("GlobeIcon");
                     }
                     // decrypt encoded user credentials
                     DataProtector dp = new DataProtector(DataProtector.Store.USE_USER_STORE);
                     if(Settings.ProxyUsername.Length > 0) Settings.ProxyUsername = dp.TransparentDecrypt(Settings.ProxyUsername);
                     if(Settings.ProxyPassword.Length > 0) Settings.ProxyPassword = dp.TransparentDecrypt(Settings.ProxyPassword);
                 }
                 catch(Exception caught)
                 {
                     Log.Write(caught);
                 }
             }


    2.Main()中后面调用MainApplication()方法,该MainApplication()调用 OpenStartupWorld(),用来初始化启动World对象。OpenStartupWorld()方法首先确定加载的是Earth/Moon 等,然后开始加载一个星球。

    加载一个星球代码

    /// 


             /// Loads a new planet
             /// 
             private void OpenWorld(string worldXmlFile)
             {

                 if(this.worldWindow.CurrentWorld != null)
                 {
                     try
                     {
                         this.worldWindow.ResetToolbar();
                     }
                     catch
                     {}
                     try
                     {
                         foreach(PluginInfo p in this.compiler.Plugins)
                         {
                             try
                             {
                                 if(p.Plugin.IsLoaded)
                                     p.Plugin.Unload();
                             }
                             catch
                             {}
                         }
                     }
                     catch
                     {}

                     try
                     {
                         this.worldWindow.CurrentWorld.Dispose();


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    申请友链|手机版|小黑屋|Archiver|谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论 ( 蜀ICP备05030520号

    返回顶部
    x

    扫描二维码加群

    GMT+8, 2019-12-12 05:34 , Processed in 15.123679 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表