internal override RenderableObject GetLayer() { if (m_blnIsChanged) { ImageStore[] aImageStore = new ImageStore[1]; aImageStore[0] = new ArcIMSImageStore(m_szServiceName, m_szLayerID, m_oServerUri as ArcIMSServerUri, TileSize, m_oCultureInfo, m_dMinScale, m_dMaxScale); aImageStore[0].DataDirectory = null; aImageStore[0].LevelZeroTileSizeDegrees = LevelZeroTileSize; aImageStore[0].LevelCount = m_iLevels; aImageStore[0].ImageExtension = ".png"; aImageStore[0].CacheDirectory = GetCachePath(); m_oQuadTileSet = new QuadTileSet(m_szTreeNodeText, m_oWorldWindow.CurrentWorld, 0, Extents.North, Extents.South, Extents.West, Extents.East, true, aImageStore); m_oQuadTileSet.AlwaysRenderBaseTiles = true; m_oQuadTileSet.IsOn = m_IsOn; m_oQuadTileSet.Opacity = m_bOpacity; m_blnIsChanged = false; } return m_oQuadTileSet; }
/// <summary> /// Initializes a new instance of the <see cref= "T:WorldWind.Renderable.QuadTileSet"/> class. /// </summary> /// <param name="name"></param> /// <param name="parentWorld"></param> /// <param name="distanceAboveSurface"></param> /// <param name="north"></param> /// <param name="south"></param> /// <param name="west"></param> /// <param name="east"></param> /// <param name="terrainAccessor"></param> /// <param name="imageAccessor"></param> public QuadTileSet( string name, World parentWorld, double distanceAboveSurface, double north, double south, double west, double east, bool terrainMapped, ImageStore[] imageStores) : base(name, parentWorld) { float layerRadius = (float)(parentWorld.EquatorialRadius + distanceAboveSurface); m_north = north; m_south = south; m_west = west; m_east = east; // Layer center position Position = MathEngine.SphericalToCartesian( (north + south) * 0.5f, (west + east) * 0.5f, layerRadius); m_layerRadius = layerRadius; m_tileDrawDistance = 3.5f; m_tileDrawSpread = 2.9f; m_imageStores = imageStores; m_terrainMapped = terrainMapped; // Default terrain mapped imagery to terrain mapped priority if (terrainMapped) m_renderPriority = RenderPriority.TerrainMappedImages; }
private static void addQuadTileLayersFromXPathNodeIterator(XPathNodeIterator iter, World parentWorld, RenderableObjectList parentRenderable, Cache cache) { while(iter.MoveNext()) { string name = getInnerTextFromFirstChild(iter.Current.Select("Name")); double distanceAboveSurface = ParseDouble(getInnerTextFromFirstChild(iter.Current.Select("DistanceAboveSurface"))); bool showAtStartup = ParseBool(iter.Current.GetAttribute("ShowAtStartup", "")); Log.Write(Log.Levels.Debug+1, "CONF", "adding QuadTileSet "+name); double north = 0; double south = 0; double west = 0; double east = 0; XPathNodeIterator boundingBoxIter = iter.Current.Select("BoundingBox"); if(boundingBoxIter.Count > 0) { boundingBoxIter.MoveNext(); north = ParseDouble(getInnerTextFromFirstChild(boundingBoxIter.Current.Select("North"))); south = ParseDouble(getInnerTextFromFirstChild(boundingBoxIter.Current.Select("South"))); west = ParseDouble(getInnerTextFromFirstChild(boundingBoxIter.Current.Select("West"))); east = ParseDouble(getInnerTextFromFirstChild(boundingBoxIter.Current.Select("East"))); } string terrainMappedString = getInnerTextFromFirstChild(iter.Current.Select("TerrainMapped")); string renderStrutsString = getInnerTextFromFirstChild(iter.Current.Select("RenderStruts")); TimeSpan dataExpiration = getCacheExpiration(iter.Current.Select("CacheExpirationTime")); bool terrainMapped = true; if(terrainMappedString != null) { terrainMapped = ParseBool(terrainMappedString); } XPathNodeIterator imageAccessorIter = iter.Current.Select("descendant::ImageAccessor"); if (imageAccessorIter.Count == 0) { Log.Write(Log.Levels.Warning, "CONF", "skipping QuadTileSet without any ImageAccessor"); return; } int currentStore = 0; ImageStore[] imageStores = new ImageStore[imageAccessorIter.Count]; while (imageAccessorIter.MoveNext()) { imageStores[currentStore] = getImageStoreFromXPathNodeIterator(name, imageAccessorIter, parentRenderable, cache); currentStore++; } QuadTileSet qts = null; qts = new QuadTileSet( name, parentWorld, distanceAboveSurface, north, south, west, east, terrainMapped, imageStores ); if(imageStores[0].IsDownloadableLayer) qts.ServerLogoFilePath = imageStores[0].ServerLogo; qts.CacheExpirationTime = dataExpiration; string infoUri = iter.Current.GetAttribute("InfoUri", ""); if(infoUri != null && infoUri.Length > 0) { if(qts.MetaData.Contains("InfoUri")) { qts.MetaData["InfoUri"] = infoUri; } else { qts.MetaData.Add("InfoUri", infoUri); } } string effectFile = getInnerTextFromFirstChild(iter.Current.Select("Effect")); if (effectFile != null && effectFile.Length > 0) { Log.Write(Log.Levels.Debug, "CONF", "QuadTileSet with effect " + effectFile); if (qts.MetaData.Contains("EffectPath")) { qts.MetaData["EffectPath"] = effectFile; } else { qts.MetaData.Add("EffectPath", effectFile); } } string description = getInnerTextFromFirstChild(iter.Current.Select("Description")); if(description != null && description.Length > 0) qts.Description = description; if(iter.Current.Select("TransparentColor").Count > 0) { System.Drawing.Color c = getColor(iter.Current.Select("TransparentColor")); qts.ColorKey = c.ToArgb(); } if(iter.Current.Select("TransparentMinValue").Count > 0) { qts.ColorKey = int.Parse(getInnerTextFromFirstChild(iter.Current.Select("TransparentMinValue"))); } if(iter.Current.Select("TransparentMaxValue").Count > 0) { qts.ColorKeyMax = int.Parse(getInnerTextFromFirstChild(iter.Current.Select("TransparentMaxValue"))); } if(renderStrutsString != null) { qts.RenderStruts = ParseBool(renderStrutsString); } qts.ParentList = parentRenderable; if(World.Settings.useDefaultLayerStates) { qts.IsOn = showAtStartup; } else { qts.IsOn = IsLayerOn(qts); } qts.MetaData.Add("XmlSource", (string)parentRenderable.MetaData["XmlSource"]); addExtendedInformation(iter.Current.Select("ExtendedInformation"), qts); parentRenderable.Add(qts); } }
private static ImageStore getImageStoreFromXPathNodeIterator(string name, XPathNodeIterator imageAccessorIter, RenderableObjectList parentRenderable, Cache cache) { double levelZeroTileSizeDegrees = ParseDouble(getInnerTextFromFirstChild(imageAccessorIter.Current.Select("LevelZeroTileSizeDegrees"))); int numberLevels = Int32.Parse(getInnerTextFromFirstChild(imageAccessorIter.Current.Select("NumberLevels"))); int textureSizePixels = Int32.Parse(getInnerTextFromFirstChild(imageAccessorIter.Current.Select("TextureSizePixels"))); string imageFileExtension = getInnerTextFromFirstChild(imageAccessorIter.Current.Select("ImageFileExtension")); string permanentDirectory = getInnerTextFromFirstChild(imageAccessorIter.Current.Select("PermanentDirectory")); if(permanentDirectory == null || permanentDirectory.Length == 0) permanentDirectory = getInnerTextFromFirstChild(imageAccessorIter.Current.Select("PermanantDirectory")); TimeSpan dataExpiration = getCacheExpiration(imageAccessorIter.Current.Select("DataExpirationTime")); string duplicateTilePath = getInnerTextFromFirstChild(imageAccessorIter.Current.Select("DuplicateTilePath")); string cacheDir = getInnerTextFromFirstChild(imageAccessorIter.Current.Select("CacheDirectory")); if(cacheDir == null || cacheDir.Length == 0) { cacheDir = String.Format("{0}{1}{2}{1}{3}", cache.CacheDirectory, Path.DirectorySeparatorChar, getRenderablePathString(parentRenderable), name); } else { cacheDir = Path.Combine(cache.CacheDirectory, cacheDir); } if(permanentDirectory != null && permanentDirectory.IndexOf(":") < 0) { permanentDirectory = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), permanentDirectory); } if(duplicateTilePath != null && duplicateTilePath.IndexOf(":") < 0) { duplicateTilePath = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), duplicateTilePath); } byte opacity = 255; // case 1 : permanent directory specified. if(permanentDirectory != null) { ImageStore ia = new ImageStore(); ia.DataDirectory = permanentDirectory; ia.LevelZeroTileSizeDegrees = levelZeroTileSizeDegrees; ia.LevelCount = numberLevels; ia.ImageExtension = imageFileExtension; //doesn't work when this is set //ia.CacheDirectory = cacheDir; if(duplicateTilePath != null && duplicateTilePath.Length > 0) { ia.DuplicateTexturePath = duplicateTilePath; } return ia; } // case 2: ImageTileService specified XPathNodeIterator imageTileServiceIter = imageAccessorIter.Current.Select("ImageTileService"); if(imageTileServiceIter.Count > 0) { imageTileServiceIter.MoveNext(); string serverUrl = getInnerTextFromFirstChild(imageTileServiceIter.Current.Select("ServerUrl")); string dataSetName = getInnerTextFromFirstChild(imageTileServiceIter.Current.Select("DataSetName")); string serverLogoFilePath = getInnerTextFromFirstChild(imageTileServiceIter.Current.Select("ServerLogoFilePath")); TimeSpan cacheExpiration = getCacheExpiration(imageTileServiceIter.Current.Select("CacheExpirationTime")); if(serverLogoFilePath != null && serverLogoFilePath.Length > 0 && !Path.IsPathRooted(serverLogoFilePath)) { serverLogoFilePath = Path.Combine( Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), serverLogoFilePath); } string opacityString = getInnerTextFromFirstChild(imageTileServiceIter.Current.Select("Opacity")); if(opacityString != null) opacity = byte.Parse(opacityString); ImageStore ia = new NltImageStore(dataSetName, serverUrl); ia.DataDirectory = null; ia.LevelZeroTileSizeDegrees = levelZeroTileSizeDegrees; ia.LevelCount = numberLevels; ia.ImageExtension = imageFileExtension; ia.CacheDirectory = cacheDir; ia.ServerLogo = serverLogoFilePath; return ia; } // case 3: WMSAccessor specified XPathNodeIterator wmsAccessorIter = imageAccessorIter.Current.Select("WMSAccessor"); if(wmsAccessorIter.Count > 0) { wmsAccessorIter.MoveNext(); WorldWind.Net.Wms.WmsImageStore wmsLayerStore = new WorldWind.Net.Wms.WmsImageStore(); wmsLayerStore.ImageFormat = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("ImageFormat")); wmsLayerStore.ImageExtension = imageFileExtension; wmsLayerStore.CacheDirectory = cacheDir; //wmsLayerAccessor.IsTransparent = ParseBool(getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("UseTransparency"))); wmsLayerStore.ServerGetMapUrl = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("ServerGetMapUrl")); wmsLayerStore.Version = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("Version")); wmsLayerStore.WMSLayerName = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("WMSLayerName")); string username = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("Username")); string password = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("Password")); string wmsStyleName = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("WMSLayerStyle")); string serverLogoPath = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("ServerLogoFilePath")); string opacityString = getInnerTextFromFirstChild(wmsAccessorIter.Current.Select("Opacity")); if(serverLogoPath != null && serverLogoPath.Length > 0 && !Path.IsPathRooted(serverLogoPath)) { serverLogoPath = Path.Combine( Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), serverLogoPath); } if(opacityString != null) opacity = byte.Parse(opacityString); TimeSpan cacheExpiration = getCacheExpiration(imageAccessorIter.Current.Select("CacheExpirationTime")); //if(username != null && username.Length > 0) // wmsLayerStore.Username = username; //if(password != null) // wmsLayerAccessor.Password = password; if(wmsStyleName != null && wmsStyleName.Length > 0) wmsLayerStore.WMSLayerStyle = wmsStyleName; else wmsLayerStore.WMSLayerStyle = ""; wmsLayerStore.LevelCount = numberLevels; wmsLayerStore.LevelZeroTileSizeDegrees = levelZeroTileSizeDegrees; return wmsLayerStore; } Log.Write(Log.Levels.Warning, "CONF", "WARNING: no valid image store found!"); return null; }
private QuadTileSet GetQuadTileSet() { if (m_layer == null) { SwitchToUseTiles(); string strCachePath = GetCachePath(); System.IO.Directory.CreateDirectory(strCachePath); // Determine the needed levels (function of tile size and resolution if available) // Shared code in DappleUtils of dapxmlclient try { if (m_iLevels == 0) m_iLevels = DappleUtils.Levels(m_oServer.Command, m_hDataSet); } catch { m_iLevels = 15; } ImageStore[] imageStores = new ImageStore[1]; imageStores[0] = new DAPImageStore(m_hDataSet, m_oServer) { DataDirectory = null, LevelZeroTileSizeDegrees = LevelZeroTileSize, LevelCount = m_iLevels, ImageExtension = ".png", CacheDirectory = strCachePath, TextureSizePixels = m_iTextureSizePixels }; m_layer = new QuadTileSet(m_hDataSet.Title, m_oWorldWindow.CurrentWorld, 0, m_hDataSet.Boundary.MaxY, m_hDataSet.Boundary.MinY, m_hDataSet.Boundary.MinX, m_hDataSet.Boundary.MaxX, true, imageStores) { AlwaysRenderBaseTiles = true, IsOn = m_IsOn, Opacity = m_bOpacity }; } return m_layer; }
private QuadTileSet GetQuadTileSet() { if (m_layer == null) { ImageStore[] imageStores = new ImageStore[1]; imageStores[0] = new DAPImageStore(null, m_oServer); imageStores[0].DataDirectory = null; imageStores[0].LevelZeroTileSizeDegrees = 22.5; imageStores[0].LevelCount = 10; imageStores[0].ImageExtension = ".png"; imageStores[0].CacheDirectory = GetCachePath(); imageStores[0].TextureSizePixels = 256; m_layer = new QuadTileSet(this.Title, m_oWorldWindow.CurrentWorld, 0, m_oServer.ServerExtents.MaxY, m_oServer.ServerExtents.MinY, m_oServer.ServerExtents.MinX, m_oServer.ServerExtents.MaxX, true, imageStores); m_layer.AlwaysRenderBaseTiles = true; m_layer.IsOn = m_IsOn; m_layer.Opacity = m_bOpacity; } return m_layer; }