/// <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); }
/// <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); } } }
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); }
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; }
/// <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); } } }
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); } } }
/// <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; } }
/// <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); }
/// <summary> /// 释放资源 /// </summary> public override void Dispose() { if (this.RenderableObjects != null) { this.RenderableObjects.Dispose(); this.RenderableObjects = null; } if (OuterSphere != null) { OuterSphere.Dispose(); } }
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); }
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 }
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(); }
/// <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); }
/// <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); }
/// <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); }
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(); }
/// <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); } }
/// <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()); } } }
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(); }
/// <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); }
/// <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); }
/// <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(); }