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;
        }
Exemple #2
0
        /// <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;
        }