public override void Update(DrawArgs drawArgs) { if (drawArgs.WorldCamera.ViewMatrix != lastView && drawArgs.CurrentWorld.TerrainAccessor != null && drawArgs.WorldCamera.Altitude < 300000) { double samplesPerDegree = 50.0 / drawArgs.WorldCamera.ViewRange.Degrees; double elevation = drawArgs.CurrentWorld.TerrainAccessor.GetElevationAt(m_latitude, m_longitude, samplesPerDegree); double altitude = World.Settings.VerticalExaggeration * Altitude + World.Settings.VerticalExaggeration * elevation; Position = MathEngine.SphericalToCartesian(m_latitude, m_longitude, altitude + drawArgs.WorldCamera.WorldRadius); lastView = drawArgs.WorldCamera.ViewMatrix; } if (overlays != null) { for (int i = 0; i < overlays.Count; i++) { ScreenOverlay curOverlay = (ScreenOverlay)overlays[i]; if (curOverlay != null) { curOverlay.Update(drawArgs); } } } }
public void AddOverlay(ScreenOverlay overlay) { if (overlay != null) { overlays.Add(overlay); } }
public void RemoveOverlay(ScreenOverlay overlay) { for (int i = 0; i < overlays.Count; i++) { ScreenOverlay curOverlay = (ScreenOverlay)overlays[i]; if (curOverlay.IconImagePath == overlay.IconImagePath && overlay.Name == curOverlay.Name) { overlays.RemoveAt(i); } } }
public override void Render(DrawArgs drawArgs) { if (overlays != null) { for (int i = 0; i < overlays.Count; i++) { ScreenOverlay curOverlay = (ScreenOverlay)overlays[i]; if (curOverlay != null && curOverlay.IsOn) { curOverlay.Render(drawArgs); } } } }
public void RemoveOverlay(ScreenOverlay overlay) { for(int i = 0; i < overlays.Count; i++) { ScreenOverlay curOverlay = (ScreenOverlay)overlays[i]; if(curOverlay.IconImagePath == overlay.IconImagePath && overlay.Name == curOverlay.Name) { overlays.RemoveAt(i); } } }
public void AddOverlay(ScreenOverlay overlay) { if(overlay != null) overlays.Add(overlay); }
private static void addScreenOverlaysToIcon(XPathNodeIterator iter, World parentWorld, Icon icon, Cache cache) { if(iter.Count > 0) { while(iter.MoveNext()) { string name = getInnerTextFromFirstChild(iter.Current.Select("Name")); string imageUri = getInnerTextFromFirstChild(iter.Current.Select("ImageUri")); string startXString = getInnerTextFromFirstChild(iter.Current.Select("StartX")); string startYString = getInnerTextFromFirstChild(iter.Current.Select("StartY")); string widthString = getInnerTextFromFirstChild(iter.Current.Select("Width")); string heightString = getInnerTextFromFirstChild(iter.Current.Select("Height")); string opacityString = getInnerTextFromFirstChild(iter.Current.Select("Opacity")); string showHeaderString = getInnerTextFromFirstChild(iter.Current.Select("ShowHeader")); string refreshTimeString = iter.Current.GetAttribute("Refresh", ""); string alignmentString = getInnerTextFromFirstChild(iter.Current.Select("Alignment")); string clickableUrl = getInnerTextFromFirstChild(iter.Current.Select("ClickableUrl")); string hideBorderString = getInnerTextFromFirstChild(iter.Current.Select("HideBorder")); if(startXString != null && startYString != null) { int startX = int.Parse(startXString); int startY = int.Parse(startYString); WorldWind.Renderable.ScreenOverlay overlay = new ScreenOverlay(name, startX, startY, imageUri); if(widthString != null) { overlay.Width = int.Parse(widthString); } if(heightString != null) { overlay.Height = int.Parse(heightString); } if(alignmentString != null) { if (alignmentString.ToLower(System.Globalization.CultureInfo.InvariantCulture).Equals("left")) { overlay.Alignment = ScreenAlignment.Left; } else if (alignmentString.ToLower(System.Globalization.CultureInfo.InvariantCulture).Equals("right")) { overlay.Alignment = ScreenAlignment.Right; } } if(clickableUrl != null && clickableUrl.Length > 0) { overlay.ClickableUrl = clickableUrl; } if(hideBorderString != null && hideBorderString.Length > 0) overlay.HideBorder = ParseBool(hideBorderString); string cachePath = String.Format("{0}{1}{2}{1}{3}{1}{3}", cache.CacheDirectory, Path.DirectorySeparatorChar, getRenderablePathString(icon), name); if(refreshTimeString != null && refreshTimeString.Length > 0) { overlay.RefreshTimeSec = ParseDouble(refreshTimeString); } string description = getInnerTextFromFirstChild(iter.Current.Select("Description")); if(description != null && description.Length > 0) overlay.Description = description; overlay.SaveFilePath = cachePath; addExtendedInformation(iter.Current.Select("ExtendedInformation"), overlay); string infoUri = iter.Current.GetAttribute("InfoUri", ""); if(infoUri != null && infoUri.Length > 0) { if(overlay.MetaData.Contains("InfoUri")) { overlay.MetaData["InfoUri"] = infoUri; } else { overlay.MetaData.Add("InfoUri", infoUri); } } overlay.MetaData.Add("XmlSource", (string)icon.MetaData["XmlSource"]); overlay.ParentList = icon.ParentList; if(opacityString != null) { overlay.Opacity = byte.Parse(opacityString); } if(showHeaderString != null) { overlay.ShowHeader = ParseBool(showHeaderString); } if(World.Settings.useDefaultLayerStates) { overlay.IsOn = ParseBool(iter.Current.GetAttribute("ShowAtStartup", "")); } else { overlay.IsOn = IsLayerOn(overlay); } icon.AddOverlay(overlay); } } } }
/// <summary> /// This Method parses screen overlays and adds to renderables /// using ScreenOverlay Object /// </summary> /// <param name="inNode">The node containing the Screen Overlay</param> /// <param name="layer">The layer to add the resulting Screen Overlay to</param> private void ParseScreenOverlays(XmlNode inNode, RIcons layer) { XmlNodeList screenOverlays = inNode.SelectNodes("ScreenOverlay"); if(screenOverlays!=null) { foreach(XmlNode screenOverlayNode in screenOverlays) { XmlNode nameNode = screenOverlayNode.SelectSingleNode("name"); String name = ""; if(nameNode != null) name = nameNode.InnerText; XmlNode uriNode = screenOverlayNode.SelectSingleNode("Icon/href"); String uri = "http://www.apogee.com.au/logo_topleft.gif"; if (uriNode != null) { uri = uriNode.InnerText; } float posX = 0; float posY = 0; ScreenUnits posXUnits = ScreenUnits.Pixels; ScreenUnits posYUnits = ScreenUnits.Pixels; XmlNode positionNode = screenOverlayNode.SelectSingleNode("screenXY"); if (positionNode != null) { if (positionNode.Attributes["x"] != null) { posX = float.Parse(positionNode.Attributes["x"].InnerText, CultureInfo.InvariantCulture); if (positionNode.Attributes["xunits"].InnerText.ToLower() == "fraction") { posXUnits = ScreenUnits.Fraction; } } if (positionNode.Attributes["y"] != null) { posY = float.Parse(positionNode.Attributes["y"].InnerText, CultureInfo.InvariantCulture); if (positionNode.Attributes["yunits"].InnerText.ToLower() == "fraction") { posYUnits = ScreenUnits.Fraction; } } } ScreenOverlay scoverlay = new ScreenOverlay(name, posX, posY, uri); scoverlay.PositionXUnits = posXUnits; scoverlay.PositionYUnits = posYUnits; scoverlay.ShowHeader = false; XmlNode sizeNode = screenOverlayNode.SelectSingleNode("size"); if (sizeNode != null) { if (sizeNode.Attributes["x"] != null) { scoverlay.Width = float.Parse(sizeNode.Attributes["x"].InnerText, CultureInfo.InvariantCulture); if(sizeNode.Attributes["xunits"].InnerText.ToLower() == "fraction") { scoverlay.SizeXUnits = ScreenUnits.Fraction; } } if (sizeNode.Attributes["y"] != null) { scoverlay.Height = float.Parse(sizeNode.Attributes["y"].InnerText, CultureInfo.InvariantCulture); if (sizeNode.Attributes["yunits"].InnerText.ToLower() == "fraction") { scoverlay.SizeYUnits = ScreenUnits.Fraction; } } } layer.Add(scoverlay); } } }