Esempio n. 1
0
        /// <summary>
        /// Serializes Renderable Objects that aren't from the top level
        /// </summary>
        /// <param name="rol">RenderableObjectList to be serialized</param>
        /// <param name="worldDoc">World Document to which node is added</param>
        /// <returns>Node for Root Layerset</returns>
        private static XmlNode saveLayer(RenderableObjectList rol, XmlDocument worldDoc)
        {
            XmlNode layerSetNode = worldDoc.CreateElement("LayerSet");

            XmlAttribute name = worldDoc.CreateAttribute("Name");

            name.Value = rol.Name;
            XmlAttribute showAtStartup = worldDoc.CreateAttribute("ShowAtStartup");

            showAtStartup.Value = rol.IsOn.ToString();
            XmlAttribute showOnlyOneLayer = worldDoc.CreateAttribute("ShowOnlyOneLayer");

            showOnlyOneLayer.Value = rol.ShowOnlyOneLayer.ToString();
            XmlAttribute xsi = worldDoc.CreateAttribute("xmlns:xsi");

            xsi.Value = "http://www.w3.org/2001/XMLSchema-instance";
            XmlAttribute xsi2 = worldDoc.CreateAttribute("xsi:noNamespaceSchemaLocation");

            xsi2.Value = "LayerSet.xsd";

            layerSetNode.Attributes.Append(name);
            layerSetNode.Attributes.Append(showAtStartup);
            layerSetNode.Attributes.Append(showOnlyOneLayer);
            layerSetNode.Attributes.Append(xsi);
            layerSetNode.Attributes.Append(xsi2);

            foreach (RenderableObject ro in rol.ChildObjects)
            {
                layerSetNode.AppendChild(ro.ToXml(worldDoc));
            }


            return(layerSetNode);
        }
Esempio n. 2
0
        /// <summary>
        /// 设置图层的透明度
        /// </summary>
        /// <param name="ro"></param>
        /// <param name="category"></param>
        /// <param name="name"></param>
        /// <param name="opacity"></param>
        private void setLayerOpacity(RenderableObject ro, string category, string name, float opacity)
        {
            foreach (string key in ro.MetaData.Keys)
            {
                if (String.Compare(key, category, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
                {
                    if (ro.MetaData[key].GetType() == typeof(String))
                    {
                        string curValue = ro.MetaData[key] as string;
                        if (String.Compare(curValue, name, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
                        {
                            ro.Opacity = (byte)(255 * opacity);
                        }
                    }
                    break;
                }
            }

            RenderableObjectList rol = ro as RenderableObjectList;

            if (rol != null)
            {
                foreach (RenderableObject childRo in rol.ChildObjects)
                {
                    setLayerOpacity(childRo, category, name, opacity);
                }
            }
        }
Esempio n. 3
0
        private void savewmsbutton_Click(object sender, EventArgs e)
        {
            string wmslayerset = "<LayerSet Name=\"" + textBox3.Text + "\" ShowOnlyOneLayer=\"false\" ShowAtStartup=\"true\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"LayerSet.xsd\">\n";

            wmslayerset += ParseNodeChildren(treeOgcCaps.Nodes[0], UsernameTextBox.Text, PasswordTextBox.Text);
            wmslayerset += "</LayerSet>";

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(wmslayerset);
            string xmlFileName = textBox1.Text + ".xml";

            string wmsSave = Path.Combine(
                Path.Combine(Global.Settings.ConfigPath, worldWindow.CurrentWorld.ToString()),
                xmlFileName);

            try
            {
                doc.Save(wmsSave);
            }
            catch (System.Xml.XmlException ex)
            {
                MessageBox.Show("Couldn't write \"" + wmsSave + "\":\n\n" + ex.Message);
            }

            RenderableObjectList layers = ConfigurationLoader.getRenderableFromLayerFile(wmsSave, worldWindow.CurrentWorld, worldWindow.Cache);

            worldWindow.CurrentWorld.RenderableObjects.Add(layers);
        }
Esempio n. 4
0
        internal BlueMarbleBuilder()
            : base("Blue Marble", MainForm.WorldWindowSingleton, null)
        {
            ImageLayer oBaseLayer = new WorldWind.Renderable.ImageLayer(
                "Blue Marble ImageLayer",
                MainForm.WorldWindowSingleton.CurrentWorld,
                0,
                String.Format(CultureInfo.InvariantCulture, "{0}\\Data\\Earth\\BmngBathy\\world.topo.bathy.2004{1:D2}.jpg", Path.GetDirectoryName(Application.ExecutablePath), 7),
                -90, 90, -180, 180, 1.0f, null);

            WorldWind.NltImageStore imageStore = new WorldWind.NltImageStore(String.Format(CultureInfo.InvariantCulture, "bmng.topo.bathy.2004{0:D2}", 7), "http://worldwind25.arc.nasa.gov/tile/tile.aspx");
            imageStore.DataDirectory            = null;
            imageStore.LevelZeroTileSizeDegrees = 36.0;
            imageStore.LevelCount     = 5;
            imageStore.ImageExtension = "jpg";
            imageStore.CacheDirectory = MainForm.WorldWindowSingleton.Cache.CacheDirectory + "\\Earth\\BMNG\\";

            WorldWind.ImageStore[] ias = new WorldWind.ImageStore[1];
            ias[0] = imageStore;

            QuadTileSet oTiledBaseLayer = new WorldWind.Renderable.QuadTileSet(
                "Blue Marble QuadTileSet",
                MainForm.WorldWindowSingleton.CurrentWorld,
                0,
                90, -90, -180, 180, true, ias);

            RenderableObjectList oRenderableList = new RenderableObjectList("This name doesn't matter, it gets rewritten");

            oRenderableList.Add(oBaseLayer);
            oRenderableList.Add(oTiledBaseLayer);
            oRenderableList.RenderPriority = RenderPriority.TerrainMappedImages;

            m_hObject = oRenderableList;
        }
Esempio n. 5
0
        /// <summary>
        /// 更新列表
        /// </summary>
        private void updateList()
        {
            if (this.isExpanded)
            {
                RenderableObjectList rol = (RenderableObjectList)m_renderableObject;
                for (int i = 0; i < rol.ChildObjects.Count; i++)
                {
                    RenderableObject childObject = (RenderableObject)rol.ChildObjects[i];
                    if (i >= m_subItems.Count)
                    {
                        LayerMenuItem newItem = new LayerMenuItem(m_parent, childObject);
                        m_subItems.Add(newItem);
                    }
                    else
                    {
                        LayerMenuItem curItem = (LayerMenuItem)m_subItems[i];

                        if (curItem != null && curItem.RenderableObject != null &&
                            childObject != null &&
                            !curItem.RenderableObject.Name.Equals(childObject.Name))
                        {
                            m_subItems.Insert(i, new LayerMenuItem(m_parent, childObject));
                        }
                    }
                }

                int extraItems = m_subItems.Count - rol.ChildObjects.Count;
                if (extraItems > 0)
                {
                    m_subItems.RemoveRange(rol.ChildObjects.Count, extraItems);
                }
            }
        }
Esempio n. 6
0
        private void nodeDownButton_Click(object sender, EventArgs e)
        {
            if (selectedNode != null && selectedNode != selectedNode.Parent.LastNode)
            {
                RenderableObjectInfo roi        = (RenderableObjectInfo)treeView1.SelectedNode.Tag;
                TreeNode             parentNode = selectedNode.Parent;
                TreeNode             belowNode  = parentNode.Nodes[selectedNode.Index + 1];
                TreeNode             cloneNode  = (TreeNode)selectedNode.Clone();
                int index = selectedNode.Index;
                parentNode.Nodes.RemoveAt(index + 1);
                parentNode.Nodes.RemoveAt(index);
                parentNode.Nodes.Insert(index, belowNode);
                parentNode.Nodes.Insert(index + 1, cloneNode);

                //Propagate to base tree
                RenderableObject     selectedRenderable = roi.Renderable;
                RenderableObjectList parentList         = selectedRenderable.ParentList;
                if (parentList != null)
                {
                    int indexRender = parentList.ChildObjects.IndexOf(selectedRenderable);
                    RenderableObject clonedRenderable = selectedRenderable;
                    RenderableObject belowRenderable  = (RenderableObject)parentList.ChildObjects[index + 1];
                    //Need to implement RemoveAt and InsertAt
                    parentList.ChildObjects.RemoveAt(indexRender + 1);
                    parentList.ChildObjects.RemoveAt(indexRender);
                    parentList.ChildObjects.Insert(indexRender, belowRenderable);
                    parentList.ChildObjects.Insert(indexRender + 1, clonedRenderable);
                }
            }
        }
Esempio n. 7
0
 /// <summary>
 /// Unloads our plugin
 /// </summary>
 public override void Unload()
 {
     if (m_wavingFlagsList != null)
     {
         Global.worldWindow.CurrentWorld.RenderableObjects.Remove(m_wavingFlagsList.Name);
         m_wavingFlagsList.Dispose();
         m_wavingFlagsList = null;
     }
 }
Esempio n. 8
0
        /// <summary>
        /// Constructor
        /// </summary>
        public GeoRssFeeds(RenderableObjectList rootLayer)
        {
            m_rootLayer = rootLayer;
            m_feeds     = new List <GeoRssFeed>();

            InitializeBackgroundWorker();

            m_form = new GeoRssForm(this);
            //m_form.Show();
        }
 public override void Load()
 {
     // Setup Drag&Drop functionality
     Global.worldWindow.DragEnter += new DragEventHandler(OgrVectorImporter_DragEnter);
     Global.worldWindow.DragDrop  += new DragEventHandler(OgrVectorImporter_DragDrop);
     world = Global.worldWindow.CurrentWorld;
     layer = new RenderableObjectList(Name);
     world.RenderableObjects.Add(layer);
     waitMessage = new WaitMessage();
     layer.Add(waitMessage);
     LoadSaveXmlConfig(true);
 }
Esempio n. 10
0
        /// <summary>
        /// 释放资源
        /// </summary>
        public override void Dispose()
        {
            if (this.RenderableObjects != null)
            {
                this.RenderableObjects.Dispose();
                this.RenderableObjects = null;
            }

            if (OuterSphere != null)
            {
                OuterSphere.Dispose();
            }
        }
Esempio n. 11
0
        public override void Load()
        {
            //拖拽事件
            Global.worldWindow.DragEnter += new DragEventHandler(WorldWindow_DragEnter);
            Global.worldWindow.DragDrop  += new DragEventHandler(WorldWindow_DragDrop);

            int mergeOrder = 0;

            //添加对应的图层
            dstileLayers = new RenderableObjectList("Dstile Layers");

            //创建GUI和背景
            frontend         = new DstileFrontEnd(this);
            frontend.Visible = false;
            Global.worldWindow.CurrentWorld.RenderableObjects.Add(dstileLayers);
        }
Esempio n. 12
0
        public override void Load()
        {
            // Setup Drag&Drop functionality
            m_Application.WorldWindow.DragEnter += new DragEventHandler(this.WorldWindow_DragEnter);
            m_Application.WorldWindow.DragDrop  += new DragEventHandler(this.WorldWindow_DragDrop);

            // Add a menu item to the File menu and the Help menu
            MenuItem loadMenuItem = new MenuItem();

            loadMenuItem.Text   = "Load Image File...";
            loadMenuItem.Click += new EventHandler(this.loadMenu_Click);
            int mergeOrder = 0;

            foreach (MenuItem menuItem in m_Application.MainMenu.MenuItems)
            {
                if (menuItem.Text.Replace("&", "") == "File")
                {
                    foreach (MenuItem subMenuItem in menuItem.MenuItems)
                    {
                        subMenuItem.MergeOrder = mergeOrder;

                        if (subMenuItem.Text == "-")
                        {
                            mergeOrder = 2;             // Everything after this should come after our new items
                        }
                    }

                    this.tempMenu.Text       = menuItem.Text;
                    this.tempMenu.MergeOrder = 1;       // MergeOrder 1 will have 0 before it and 2 after it
                    this.tempMenu.MenuItems.Add(loadMenuItem);
                    this.tempMenu.MenuItems.Add(new MenuItem("-"));
                    menuItem.MergeMenu(this.tempMenu);
                }
            }
            //TODO: Add Place Holder Dstile Layer
            this.dstileLayers = new RenderableObjectList("Dstile Layers");

            //Create GUI and keep in the background
            this.frontend         = new DstileFrontEnd(this);
            this.frontend.Visible = false;

            //TODO: Add any existing Dstile based layers
            ParentApplication.WorldWindow.CurrentWorld.RenderableObjects.Add(this.dstileLayers);
            //from the Master XML
        }
Esempio n. 13
0
        public override void Load()
        {
            // Create our whiteboard layer
            m_feedLayer = new RenderableObjectList("GeoRSS Feeds");
            ParentApplication.WorldWindow.CurrentWorld.RenderableObjects.Add(m_feedLayer);

            m_feeds = new GeoRssFeeds(m_feedLayer);

            // Add our menu button
            m_menuButton = new GeoRSSMenuButton(this.PluginDirectory + @"\Plugins\GeoRSS\georss-large.png", this);
            ParentApplication.WorldWindow.MenuBar.AddToolsMenuButton(m_menuButton);

            // Add our navigation menu item
            m_geoRSSMenuItem        = new System.Windows.Forms.MenuItem();
            m_geoRSSMenuItem.Text   = "Load GeoRSS Feed";
            m_geoRSSMenuItem.Click += new System.EventHandler(WbMenuItem_Click);
            ParentApplication.ToolsMenu.MenuItems.Add(m_geoRSSMenuItem);

            m_feeds.Add("WWC Hotspot Feed",
                        "http://www.worldwindcentral.com/hotspots/rss.php",
                        new TimeSpan(1, 0, 0),
                        this.PluginDirectory + @"\Plugins\GeoRSS\wwc.png");
            m_feeds.Add("CNN Latest News Feed",
                        "http://ws.geonames.org/rssToGeoRSS?feedUrl=http://rss.cnn.com/rss/cnn_latest.rss",
                        new TimeSpan(0, 15, 0),
                        this.PluginDirectory + @"\Plugins\GeoRSS\cnn.png");
            m_feeds.Add("CNN World News Feed",
                        "http://ws.geonames.org/rssToGeoRSS?feedUrl=http://rss.cnn.com/rss/cnn_world.rss",
                        new TimeSpan(0, 15, 0),
                        this.PluginDirectory + @"\Plugins\GeoRSS\cnn.png");
            m_feeds.Add("CNN US News Feed",
                        "http://ws.geonames.org/rssToGeoRSS?feedUrl=http://rss.cnn.com/rss/cnn_us.rss",
                        new TimeSpan(0, 15, 0),
                        this.PluginDirectory + @"\Plugins\GeoRSS\cnn.png");
            m_feeds.Add("Disaster Feed",
                        "http://www.rsoe.hu/hisz/rss/disrss-eng.php",
                        new TimeSpan(0, 15, 0),
                        this.PluginDirectory + @"\Plugins\GeoRSS\rsoe.png");


            m_feeds.Start();

            base.Load();
        }
Esempio n. 14
0
        /// <summary>
        /// Plugin entry point - All plugins must implement this function
        /// </summary>
        public override void Load()
        {
            // Setup Drag&Drop functionality
            m_Application.WorldWindow.DragEnter += new DragEventHandler(OgrVectorImporter_DragEnter);
            m_Application.WorldWindow.DragDrop  += new DragEventHandler(OgrVectorImporter_DragDrop);


            world = m_Application.WorldWindow.CurrentWorld;
            layer = new RenderableObjectList(Name);
            world.RenderableObjects.Add(layer);
            waitMessage = new WaitMessage();
            layer.Add(waitMessage);

            menuItem        = new MenuItem("Import vectors from OGR data source...");
            menuItem.Click += new EventHandler(menuItem_Click);
            ParentApplication.PluginsMenu.MenuItems.Add(menuItem);

            LoadSaveXmlConfig(true);
        }
Esempio n. 15
0
        /// <summary>
        /// 存储一些列的对象
        /// </summary>
        /// <param name="ro">存储的对象</param>
        /// <param name="file">存储位置</param>
        public static void SaveAs(RenderableObject ro, string file)
        {
            XmlDocument worldDoc = new XmlDocument();

            worldDoc.AppendChild((worldDoc.CreateXmlDeclaration("1.0", "utf-8", null)));
            if (ro is RenderableObjectList)
            {
                //worldDoc.AppendChild(saveLayer((RenderableObjectList)ro, worldDoc));
                worldDoc.AppendChild(ro.ToXml(worldDoc));
            }
            else
            {
                RenderableObjectList rol = new RenderableObjectList("Saved");
                rol.Add(ro);
                worldDoc.AppendChild(saveLayer(rol, worldDoc));
            }

            worldDoc.Save(file);
        }
Esempio n. 16
0
 /// <summary>
 /// 初始化一个地球类
 /// </summary>
 /// <param name="name"></param>
 /// <param name="position"></param>
 /// <param name="orientation"></param>
 /// <param name="equatorialRadius"></param>
 /// <param name="cacheDirectory"></param>
 /// <param name="terrainAccessor"></param>
 public World(string name, Vector3 position, Quaternion orientation, double equatorialRadius,
              string cacheDirectory,
              TerrainAccessor terrainAccessor)
     : base(name, position, orientation)
 {
     //6378137.0
     this.m_EquatorialRadius = equatorialRadius;
     //设置 数字高程 对象
     this.m_TerrainAccessor = terrainAccessor;
     //初始化world的 Renderable对象,名字是"Earth".
     this.m_RenderableObjects = new RenderableObjectList(this.Name);
     //在元数据集合里,添加 Cache的路径
     this.MetaData.Add("CacheDirectory", cacheDirectory);
     //大气光环实例
     OuterSphere = new AtmosphericScatteringSphere();
     AtmosphericScatteringSphere.m_fInnerRadius = (float)equatorialRadius;
     AtmosphericScatteringSphere.m_fOuterRadius = (float)equatorialRadius * 1.15f;
     OuterSphere.Init((float)equatorialRadius * 1.15f, 75, 75);
 }
Esempio n. 17
0
        public override void Unload()
        {
            //Dispose GUI
            if (this.frontend != null)
            {
                this.frontend.Dispose();
            }
            this.frontend = null;

            // Remove the menu items
            foreach (MenuItem menuItem in m_Application.MainMenu.MenuItems)
            {
                if (menuItem.Text.Replace("&", "") == "File")
                {
                    foreach (MenuItem subMenuItem in menuItem.MenuItems)
                    {
                        if (subMenuItem.Text == this.tempMenu.MenuItems[0].Text)
                        {
                            menuItem.MenuItems.RemoveAt(subMenuItem.Index + 1);
                            menuItem.MenuItems.RemoveAt(subMenuItem.Index);
                            break;
                        }
                    }
                }
            }
            // Disable Drag&Drop functionality
            this.Application.WorldWindow.DragEnter -= new DragEventHandler(this.WorldWindow_DragEnter);
            this.Application.WorldWindow.DragDrop  -= new DragEventHandler(this.WorldWindow_DragDrop);


            this.tempMenu.MenuItems.Clear();

            //TODO: Save if needed any present DSTile layers to
            //master xml
            //TODO: Remove Dstile added layers from Layer Manager
            ParentApplication.WorldWindow.CurrentWorld.RenderableObjects.Remove(this.dstileLayers);
            this.dstileLayers.Dispose();
            this.dstileLayers = null;


            base.Unload();
        }
Esempio n. 18
0
        /// <summary>
        /// 绘制地球对象上的图层
        /// </summary>
        /// <param name="renderable"></param>
        /// <param name="priority"></param>
        /// <param name="drawArgs"></param>
        private void Render(RenderableObject renderable, RenderPriority priority, DrawArgs drawArgs)
        {
            //若是绘制星星,则返回,因为星星图层已经绘制过了
            //if (!renderable.IsOn || (renderable.Name != null && renderable.Name.Equals("Starfield")))
            if (!renderable.IsOn || (renderable.Name != null && renderable.Name.Equals("星空")))
            {
                return;
            }

            //绘制Icon图层
            if (priority == RenderPriority.Icons && renderable is Icons)
            {
                renderable.Render(drawArgs);
            }
            else if (priority == RenderPriority.GCPs && renderable is GCPs)
            {
                renderable.Render(drawArgs);
            }
            //绘制RenderableObjectList类型图层下的所有子图层
            else if (renderable is RenderableObjectList)
            {
                RenderableObjectList rol = (RenderableObjectList)renderable;
                for (int i = 0; i < rol.ChildObjects.Count; i++)
                {
                    Render((RenderableObject)rol.ChildObjects[i], priority, drawArgs);
                }
            }
            //绘制RenderPriority.SurfaceImages类型的图层
            else if (priority == RenderPriority.TerrainMappedImages)
            {
                if (renderable.RenderPriority == RenderPriority.SurfaceImages || renderable.RenderPriority == RenderPriority.TerrainMappedImages)
                {
                    renderable.Render(drawArgs);
                }
            }
            //绘制RenderPriority.LinePaths和RenderPriority.AtmosphericImages类型的图层
            else if (renderable.RenderPriority == priority)
            {
                renderable.Render(drawArgs);
            }
        }
Esempio n. 19
0
 /// <summary>
 /// 2.绘制星星
 /// </summary>
 /// <param name="drawArgs"></param>
 /// <param name="renderable"></param>
 private void RenderStars(DrawArgs drawArgs, RenderableObject renderable)
 {
     if (renderable is RenderableObjectList)
     {
         RenderableObjectList rol = (RenderableObjectList)renderable;
         for (int i = 0; i < rol.ChildObjects.Count; i++)
         {
             RenderStars(drawArgs, (RenderableObject)rol.ChildObjects[i]);
         }
     }
     //else if (renderable.Name != null && renderable.Name.Equals("Starfield"))
     else if (renderable.Name != null && renderable.Name.Equals("星空"))
     {
         try
         {
             renderable.Render(drawArgs);
         }
         catch (Exception ex)
         {
             throw new Exception("绘制星星失败!\n" + ex.ToString());
         }
     }
 }
Esempio n. 20
0
        public override void Unload()
        {
            //Dispose GUI
            if (frontend != null)
            {
                frontend.Dispose();
            }
            frontend = null;

            // Disable Drag&Drop functionality
            Global.worldWindow.DragEnter -= new DragEventHandler(WorldWindow_DragEnter);
            Global.worldWindow.DragDrop  -= new DragEventHandler(WorldWindow_DragDrop);

            //TODO: Save if needed any present DSTile layers to
            //master xml
            //TODO: Remove Dstile added layers from Layer Manager
            Global.worldWindow.CurrentWorld.RenderableObjects.Remove(dstileLayers);
            dstileLayers.Dispose();
            dstileLayers = null;


            base.Unload();
        }
Esempio n. 21
0
        /// <summary>
        /// 渲染当前菜单项
        /// </summary>
        /// <param name="drawArgs">绘制参数</param>
        /// <param name="x">菜单项X位置</param>
        /// <param name="y">菜单项Y位置</param>
        /// <param name="yOffset">菜单项Y偏移</param>
        /// <param name="width">菜单项宽度</param>
        /// <param name="height">菜单项高度</param>
        /// <param name="drawingFont">绘制字体</param>
        /// <param name="wingdingsFont"></param>
        /// <param name="worldwinddingsFont"></param>
        /// <param name="mouseOverItem">鼠标覆盖的菜单项</param>
        /// <returns>返回本次渲染消耗的高度</returns>
        public int Render(DrawArgs drawArgs, int x, int y, int yOffset, int width, int height,
                          Microsoft.DirectX.Direct3D.Font drawingFont,
                          Microsoft.DirectX.Direct3D.Font wingdingsFont,
                          Microsoft.DirectX.Direct3D.Font worldwinddingsFont,
                          LayerMenuItem mouseOverItem)
        {
            if (ParentControl == null)
            {
                ParentControl = drawArgs.parentControl;
            }

            this._x     = x;
            this._y     = y + yOffset;
            this._width = width;

            int consumedHeight = 20;

            System.Drawing.Rectangle textRect = drawingFont.MeasureString(null,
                                                                          m_renderableObject.Name,
                                                                          DrawTextFormat.None,
                                                                          System.Drawing.Color.White.ToArgb());

            consumedHeight = textRect.Height;

            if (m_renderableObject.Description != null && m_renderableObject.Description.Length > 0 && !(m_renderableObject is QRST.WorldGlobeTool.Renderable.Icon))
            {
                System.Drawing.SizeF rectF = DrawArgs.Graphics.MeasureString(
                    m_renderableObject.Description,
                    drawArgs.DefaultSubTitleFont,
                    width - (this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset)
                    );

                consumedHeight += (int)rectF.Height + 15;
            }

            lastConsumedHeight = consumedHeight;
            // Layer manager client area height
            int totalHeight = height - y;

            updateList();

            if (yOffset >= -consumedHeight)
            {
                // Part of item or whole item visible
                int color = m_renderableObject.IsOn ? itemOnColor : itemOffColor;
                if (mouseOverItem == this)
                {
                    if (!m_renderableObject.IsOn)
                    {
                        // mouseover + inactive color (black)
                        color = 0xff << 24;
                    }
                    MenuUtils.DrawBox(m_parent.ClientLeft, _y, m_parent.ClientWidth, consumedHeight, 0,
                                      World.Settings.menuOutlineColor, drawArgs.device);
                }

                if (m_renderableObject is RenderableObjectList)
                {
                    RenderableObjectList rol = (RenderableObjectList)m_renderableObject;
                    if (!rol.DisableExpansion)
                    {
                        worldwinddingsFont.DrawText(
                            null,
                            (this.isExpanded ? "L" : "A"),
                            new System.Drawing.Rectangle(x + this._itemXOffset, _y, this._expandArrowXSize, height),
                            DrawTextFormat.None,
                            color);
                    }
                }

                string checkSymbol = null;
                if (m_renderableObject.ParentList != null && m_renderableObject.ParentList.IsShowOnlyOneLayer)
                {
                    // Radio check
                    checkSymbol = m_renderableObject.IsOn ? "O" : "P";
                }
                else
                {
                    // Normal check
                    checkSymbol = m_renderableObject.IsOn ? "N" : "F";
                }

                worldwinddingsFont.DrawText(
                    null,
                    checkSymbol,
                    new System.Drawing.Rectangle(
                        x + this._itemXOffset + this._expandArrowXSize,
                        _y,
                        this._checkBoxXOffset,
                        height),
                    DrawTextFormat.NoClip,
                    color);


                drawingFont.DrawText(
                    null,
                    m_renderableObject.Name,
                    new System.Drawing.Rectangle(
                        x + this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset,
                        _y,
                        width - (this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset),
                        height),
                    DrawTextFormat.None,
                    color);

                if (m_renderableObject.Description != null && m_renderableObject.Description.Length > 0 && !(m_renderableObject is QRST.WorldGlobeTool.Renderable.Icon))
                {
                    drawArgs.DefaultSubTitleDrawingFont.DrawText(
                        null,
                        m_renderableObject.Description,
                        new System.Drawing.Rectangle(
                            x + this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset,
                            _y + textRect.Height,
                            width - (_itemXOffset + _expandArrowXSize + _checkBoxXOffset),
                            height),
                        DrawTextFormat.WordBreak,
                        System.Drawing.Color.Gray.ToArgb());
                }

                if (m_renderableObject.MetaData.Contains("InfoUri"))
                {
                    Vector2[] underlineVerts = new Vector2[2];
                    underlineVerts[0].X = x + this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset;
                    underlineVerts[0].Y = _y + textRect.Height;
                    underlineVerts[1].X = underlineVerts[0].X + textRect.Width;
                    underlineVerts[1].Y = _y + textRect.Height;

                    MenuUtils.DrawLine(underlineVerts, color, drawArgs.device);
                }
            }

            if (isExpanded)
            {
                for (int i = 0; i < m_subItems.Count; i++)
                {
                    int yRealOffset = yOffset + consumedHeight;
                    if (yRealOffset > totalHeight)
                    {
                        // No more space for items
                        break;
                    }
                    LayerMenuItem lmi = (LayerMenuItem)m_subItems[i];
                    consumedHeight += lmi.Render(
                        drawArgs,
                        x + _subItemXIndent,
                        y,
                        yRealOffset,
                        width - _subItemXIndent,
                        height,
                        drawingFont,
                        wingdingsFont,
                        worldwinddingsFont,
                        mouseOverItem);
                }
            }

            return(consumedHeight);
        }
Esempio n. 22
0
        /// <summary>
        /// 鼠标按键弹起事件
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public bool OnMouseUp(MouseEventArgs e)
        {
            if (e.Y < this._y)
            {
                // Above
                return(false);
            }

            if (e.Y <= this._y + 20)
            {
                if (e.X > this._x + this._itemXOffset &&
                    e.X < this._x + (this._itemXOffset + this._width) &&
                    e.Button == MouseButtons.Right)
                {
                    m_parent.ShowContextMenu(e.X, e.Y, this);
                }

                if (e.X > this._x + this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset &&
                    e.X < this._x + (this._itemXOffset + this._width) &&
                    e.Button == MouseButtons.Left &&
                    m_renderableObject != null &&
                    m_renderableObject.MetaData.Contains("InfoUri"))
                {
                    string infoUri = (string)m_renderableObject.MetaData["InfoUri"];

                    //if (World.Settings.UseInternalBrowser || infoUri.StartsWith(@"worldwind://"))
                    //{
                    //    SplitContainer sc = (SplitContainer)this.ParentControl.Parent.Parent;
                    //    InternalWebBrowserPanel browser = (InternalWebBrowserPanel)sc.Panel1.Controls[0];
                    //    browser.NavigateTo(infoUri);
                    //}
                    //else
                    //{
                    ProcessStartInfo psi = new ProcessStartInfo();
                    psi.FileName        = infoUri;
                    psi.Verb            = "open";
                    psi.UseShellExecute = true;
                    psi.CreateNoWindow  = true;
                    Process.Start(psi);
                    //}
                }

                if (e.X > this._x + this._itemXOffset &&
                    e.X < this._x + (this._itemXOffset + this._expandArrowXSize) &&
                    m_renderableObject is RenderableObjectList)
                {
                    RenderableObjectList rol = (RenderableObjectList)m_renderableObject;
                    if (!rol.DisableExpansion)
                    {
                        this.isExpanded = !this.isExpanded;
                        return(true);
                    }
                }

                if (e.X > this._x + this._itemXOffset + this._expandArrowXSize &&
                    e.X < this._x + (this._itemXOffset + this._expandArrowXSize + this._checkBoxXOffset))
                {
                    if (!m_renderableObject.IsOn && m_renderableObject.ParentList != null &&
                        m_renderableObject.ParentList.IsShowOnlyOneLayer)
                    {
                        m_renderableObject.ParentList.TurnOffAllChildren();
                    }

                    m_renderableObject.IsOn = !m_renderableObject.IsOn;
                    return(true);
                }
            }

            if (isExpanded)
            {
                foreach (LayerMenuItem lmi in m_subItems)
                {
                    if (lmi.OnMouseUp(e))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 23
0
        /// <summary>
        /// Plugin entry point - All plugins must implement this function
        /// </summary>
        public override void Load()
        {
            FileInfo savedFile = new FileInfo(SavedFilePath);

            if (!savedFile.Exists)
            {
                if (!savedFile.Directory.Exists)
                {
                    savedFile.Directory.Create();
                }

                try
                {
                    // Offline check
                    if (World.Settings.WorkOffline)
                    {
                        throw new Exception("Offline mode active.");
                    }

                    MFW3D.Net.WebDownload download = new MFW3D.Net.WebDownload(DataFileUri);
                    download.DownloadFile(savedFile.FullName);
                    download.Dispose();
                }
                catch { }
            }

            m_wavingFlagsList      = new RenderableObjectList("Waving Flags");
            m_wavingFlagsList.IsOn = false;
            System.Collections.Hashtable countryHash = new System.Collections.Hashtable();

            using (StreamReader reader = savedFile.OpenText())
            {
                string   header  = reader.ReadLine();
                string[] headers = header.Split('\t');

                string line = reader.ReadLine();
                while (line != null)
                {
                    System.Collections.Hashtable fieldHash = new System.Collections.Hashtable();
                    string[] lineParts = line.Split('\t');

                    //Log.Write(string.Format("{0}\t{1}", lineParts[0], lineParts[1]));
                    try
                    {
                        if ((lineParts[3].Length > 0) && (lineParts[4].Length > 0))
                        {
                            double latitude  = double.Parse(lineParts[3], System.Globalization.CultureInfo.InvariantCulture);
                            double longitude = double.Parse(lineParts[4], System.Globalization.CultureInfo.InvariantCulture);

                            if (lineParts[1].Length == 2)
                            {
                                string   flagFileUri   = FlagTextureDirectoryUri + "/" + lineParts[1] + FlagSuffix;
                                FileInfo savedFlagFile = new FileInfo(SavedFlagsDirectory + "\\" + lineParts[1] + ".dds");

                                WavingFlagLayer flag = new WavingFlagLayer(
                                    lineParts[0],
                                    Global.worldWindow.CurrentWorld,
                                    latitude,
                                    longitude,
                                    flagFileUri);

                                flag.SavedImagePath = savedFlagFile.FullName;
                                flag.ScaleX         = 100000;
                                flag.ScaleY         = 100000;
                                flag.ScaleZ         = 100000;
                                flag.Bar3D          = new Bar3D(flag.Name, flag.World, latitude, longitude, 0, flag.ScaleZ, System.Drawing.Color.Red);
                                flag.Bar3D.ScaleX   = 0.3f * flag.ScaleX;
                                flag.Bar3D.ScaleY   = 0.3f * flag.ScaleY;
                                flag.Bar3D.IsOn     = false;
                                flag.RenderPriority = RenderPriority.Custom;

                                flag.OnMouseEnterEvent += new EventHandler(flag_OnMouseEnterEvent);
                                flag.OnMouseLeaveEvent += new EventHandler(flag_OnMouseLeaveEvent);
                                flag.OnMouseUpEvent    += new System.Windows.Forms.MouseEventHandler(flag_OnMouseUpEvent);
                                m_wavingFlagsList.Add(flag);

                                for (int i = 0; i < lineParts.Length; i++)
                                {
                                    try
                                    {
                                        double value;
                                        if (double.TryParse(lineParts[i], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out value))
                                        {
                                            fieldHash.Add(headers[i], value);
                                        }
                                        else
                                        {
                                            fieldHash.Add(headers[i], lineParts[i]);
                                        }
                                    }
                                    catch
                                    {
                                        fieldHash.Add(headers[i], lineParts[i]);
                                    }
                                }
                                countryHash.Add(lineParts[0], fieldHash);
                            }
                            else
                            {
                                //Log.Write(Log.Levels.Debug, "blank: " + lineParts[0]);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Write(Log.Levels.Warning, string.Format("Exception: {0} - {1}", lineParts[0], ex.ToString()));
                    }

                    line = reader.ReadLine();
                }
                Headers = headers;
            }

            CountryHash = countryHash;

            InitializeCiaForm();

            Global.worldWindow.CurrentWorld.RenderableObjects.Add(m_wavingFlagsList);
        }
        void LoadFile()
        {
            FileInfo f = new FileInfo(fileName);

            fileSubList = null;

            // Create the LM branch for the file...
            foreach (RenderableObject l in layer.ChildObjects)
            {
                if (l.Name == f.Name)
                {
                    fileSubList = (RenderableObjectList)l;
                    break;
                }
            }

            if (fileSubList == null)
            {
                fileSubList = new RenderableObjectList(f.Name);
            }

            layer.Add(fileSubList);


            ogr.UseExceptions();

            try
            {
                ogr.RegisterAll();
                ds       = ogr.Open(fileName, 0);
                ogrLayer = ds.GetLayerByIndex(0);
                SpatialReference inSrs = ogrLayer.GetSpatialRef();

                ArrayList fieldNames = GetFieldNames(ogrLayer);

                infoSelector = new VectorInfoSelector(ogrLayer);
                if (infoSelector.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                styleSubList      = new RenderableObjectList(infoSelector.TextStyle.Layername);
                styleSubList.IsOn = false;
                fileSubList.Add(styleSubList);

                keyFieldName   = infoSelector.TextStyle.KeyDataFieldName;
                keyDataType    = infoSelector.TextStyle.DataType;
                labelFieldName = infoSelector.TextStyle.LabelFieldName;

                if (keyDataType == DataType.Text && infoSelector.TextStyle.TextFilter)
                {
                    filterString   = infoSelector.TextStyle.TextFilterString;
                    textFilterType = infoSelector.TextStyle.TextFilterType;
                }

                maxPolygonColor    = infoSelector.NumericMaxStyle.PolygonColor;
                maxLineColor       = infoSelector.NumericMaxStyle.LineColor;
                maxLineWidth       = infoSelector.NumericMaxStyle.LineWidth;
                maxOutlinePolygons = infoSelector.NumericMaxStyle.OutlinePolygons;

                minPolygonColor    = infoSelector.NumericMinStyle.PolygonColor;
                minLineColor       = infoSelector.NumericMinStyle.LineColor;
                minLineWidth       = infoSelector.NumericMinStyle.LineWidth;
                minOutlinePolygons = infoSelector.NumericMinStyle.OutlinePolygons;

                noDataLineColor       = infoSelector.NumericNoDataStyle.LineColor;
                noDataLineWidth       = infoSelector.NumericNoDataStyle.LineWidth;
                noDataPolygonColor    = infoSelector.NumericNoDataStyle.PolygonColor;
                noDataOutlinePolygons = infoSelector.NumericNoDataStyle.OutlinePolygons;
                noDataValue           = infoSelector.NumericNoDataStyle.NoDataValue;

                textLineColor       = infoSelector.TextStyle.LineColor;
                textLineWidth       = infoSelector.TextStyle.LineWidth;
                textPolygonColor    = infoSelector.TextStyle.PolygonColor;
                textOutlinePolygons = infoSelector.TextStyle.OutlinePolygons;


                if (infoSelector.Projection.Contains("EPSG"))
                {
                    string trimString = "EPSG:";
                    string epsgString = infoSelector.Projection.Trim(trimString.ToCharArray());
                    int    epsg       = int.Parse(epsgString);
                    inSrs = new SpatialReference("");
                    inSrs.ImportFromEPSG(epsg);
                }
                else if (infoSelector.Projection == "" || infoSelector.Projection == "(unknown)")
                {
                    inSrs = null;
                }
                else
                {
                    inSrs = new SpatialReference("");
                    inSrs.ImportFromProj4(infoSelector.Projection);
                }

                OGR.SpatialReference outSrs = new OGR.SpatialReference(outWkt);
                //outSrs.ImportFromEPSG(4326);

                if (inSrs != null)
                {
                    coordTransform      = new CoordinateTransformation(inSrs, outSrs);
                    needsTransformation = true;
                    Console.WriteLine("Reprojecting...");
                }

                keyFieldIndex   = GetFieldIndexFromString(keyFieldName, fieldNames);
                labelFieldIndex = GetFieldIndexFromString(labelFieldName, fieldNames);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\nNo features imported.");
                return;
            }

            Thread t = new Thread(new System.Threading.ThreadStart(LoadVectors));

            t.IsBackground = true;
            t.Start();
        }