private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east) { if (m_parentProjectedLayer.Bounds.Equals(GeographicBoundingBox.NullBox()) || !m_parentProjectedLayer.Bounds.Intersects(new GeographicBoundingBox(north, south, west, east))) { return null; } Bitmap b = null; Graphics g = null; Renderable.ImageLayer result = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; if (m_parentProjectedLayer.LineStrings != null) { for (int i = 0; i < m_parentProjectedLayer.LineStrings.Length; i++) { if (!m_parentProjectedLayer.LineStrings[i].Visible) continue; GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.LineStrings[i].GetGeographicBoundingBox(); if (currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if (g == null) { b = new Bitmap(TileSize, TileSize, System.Drawing.Imaging.PixelFormat.Format32bppArgb); g = Graphics.FromImage(b); } drawLineString(m_parentProjectedLayer.LineStrings[i], g, geoBB, b.Size); numberPolygonsInTile++; } } } if (m_parentProjectedLayer.Polygons != null) { for (int i = 0; i < m_parentProjectedLayer.Polygons.Length; i++) { if (!m_parentProjectedLayer.Polygons[i].Visible) continue; GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.Polygons[i].GetGeographicBoundingBox(); if (currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if (g == null) { b = new Bitmap(TileSize, TileSize, System.Drawing.Imaging.PixelFormat.Format32bppArgb); g = Graphics.FromImage(b); } drawPolygon(m_parentProjectedLayer.Polygons[i], g, geoBB, b.Size); numberPolygonsInTile++; } } } if (b != null) { System.Drawing.Imaging.BitmapData srcInfo = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); bool isBlank = true; unsafe { int* srcPointer = (int*)srcInfo.Scan0; for (int i = 0; i < b.Height; i++) { for (int j = 0; j < b.Width; j++) { int color = *srcPointer++; if (((color >> 24) & 0xff) > 0) { isBlank = false; break; } } srcPointer += (srcInfo.Stride >> 2) - b.Width; } } b.UnlockBits(srcInfo); if (isBlank) numberPolygonsInTile = 0; } if (b != null && numberPolygonsInTile > 0) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Png); ms.Seek(0, SeekOrigin.Begin); result = new WorldWind.Renderable.ImageLayer(String.Format("PVT ImageLayer L{0} R{1} C{2}", Level, Row, Col), m_parentProjectedLayer.World, 0, ms, (float)south, (float)north, (float)west, (float)east, 1.0f, m_parentProjectedLayer.World.TerrainAccessor); result.Opacity = this.Opacity; } if (g != null) { g.Dispose(); b.Dispose(); } return result; }
private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east, DrawArgs drawArgs) { Bitmap b = null; Graphics g = null; Renderable.ImageLayer imageLayer = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; for(int i = 0; i < m_ShapeTileArgs.ShapeRecords.Count; i++) { ShapeRecord currentRecord = (ShapeRecord)m_ShapeTileArgs.ShapeRecords[i]; if(currentRecord.Null != null || currentRecord.Point != null || currentRecord.MultiPoint != null || !isShapeRecordInBounds(geoBB, currentRecord)) { continue; } else { if(b == null) { b = new Bitmap(m_ShapeTileArgs.TilePixelSize.Width, m_ShapeTileArgs.TilePixelSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if(g == null) { g = Graphics.FromImage(b); } System.Drawing.Color color = m_ShapeTileArgs.PolygonColor; //Fix Black Tiles g.DrawLine(new Pen(color),0,0,1,1); if(m_ShapeTileArgs.UseScalar && m_ShapeTileArgs.ScaleColors) { double red = 1.0; double green = 1.0; double blue = 1.0; try { //TODO: make this a function and abstract to allow multiple gradient mappings double dv; double curScalar = double.Parse(currentRecord.Value.ToString()); if (curScalar < m_ShapeTileArgs.ScaleMin) curScalar = m_ShapeTileArgs.ScaleMin; if (curScalar > m_ShapeTileArgs.ScaleMax) curScalar = m_ShapeTileArgs.ScaleMax; dv = m_ShapeTileArgs.ScaleMax - m_ShapeTileArgs.ScaleMin; if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.25 * dv)) { red = 0; green = 4 * (curScalar - m_ShapeTileArgs.ScaleMin) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.5 * dv)) { red = 0; blue = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.25 * dv - curScalar) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.75 * dv)) { red = 4 * (curScalar - m_ShapeTileArgs.ScaleMin - 0.5 * dv) / dv; blue = 0; } else { green = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.75 * dv - curScalar) / dv; blue = 0; } color = System.Drawing.Color.FromArgb((int)(255*red), (int)(255*green), (int)(255*blue)); } catch(Exception) { // Log.Write((string)currentPoly.ScalarHash[m_ShapeTileArgs.ColorKey]); // Log.Write(String.Format("Min: {0}, Max: {1}", m_ShapeTileArgs.ScaleMin, m_ShapeTileArgs.ScaleMax)); // Log.Write(String.Format("{0},{1},{2}", red, green, blue)); // Log.Write(ex); } } else { if(m_ShapeTileArgs.ColorAssignments.Count > 0 && m_ShapeTileArgs.ScaleColors) { try { string colorAssignmentKey = (string)currentRecord.Value; foreach(string cak in m_ShapeTileArgs.ColorAssignments.Keys) { if(String.Compare(cak, colorAssignmentKey, true) == 0) { color = (System.Drawing.Color)m_ShapeTileArgs.ColorAssignments[cak]; break; } } } catch(Exception) { } } } if(currentRecord.Polygon != null) { drawPolygon(currentRecord.Polygon, g, color, geoBB, b.Size); } if(m_ShapeTileArgs.ColorAssignments.Count == 0 || !m_ShapeTileArgs.ScaleColors) { color = m_ShapeTileArgs.LineColor; } if(currentRecord.PolyLine != null) { drawPolyLine(currentRecord.PolyLine, g, color, geoBB, b.Size); } numberPolygonsInTile++; } } if(numberPolygonsInTile > 0) { string id = System.DateTime.Now.Ticks.ToString(); MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Png); //b.Save("Shapefiles\\imagecache\\"+north+""+south+""+east+""+west+ ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); // Texture texture = TextureLoader.FromStream( // drawArgs.device, mss, 0, 0, 1, // Usage.None, World.Settings.TextureFormat, Pool.Managed, Filter.Box, Filter.Box, System.Drawing.Color.Black.ToArgb()); imageLayer = new WorldWind.Renderable.ImageLayer( id, m_ShapeTileArgs.ParentWorld, 0,// should be distance above surface m_ImageStream, System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, (float)m_ShapeTileArgs.ParentShapeFileLayer.Opacity / 255.0f, m_ShapeTileArgs.ParentWorld.TerrainAccessor); //mss.Close(); ms.Close(); } if(b != null) { b.Dispose(); } if(g != null) { g.Dispose(); } b = null; g = null; //might not be necessary //GC.Collect(); return imageLayer; }
/*public byte Opacity { get { return m_parentProjectedLayer.Opacity; } set { if(m_NwImageLayer != null) { m_NwImageLayer.Opacity = value; } if(m_NeImageLayer != null) { m_NeImageLayer.Opacity = value; } if(m_SwImageLayer != null) { m_SwImageLayer.Opacity = value; } if(m_SeImageLayer != null) { m_SeImageLayer.Opacity = value; } if(m_NorthWestChild != null) { m_NorthWestChild.Opacity = value; } if(m_NorthEastChild != null) { m_NorthEastChild.Opacity = value; } if(m_SouthWestChild != null) { m_SouthWestChild.Opacity = value; } if(m_SouthEastChild != null) { m_SouthEastChild.Opacity = value; } } }*/ private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east, DrawArgs drawArgs, string imagePath) { Bitmap b = null; Graphics g = null; Renderable.ImageLayer imageLayer = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; FileInfo imageFile = new FileInfo(imagePath); if(!m_parentProjectedLayer.EnableCaching || !imageFile.Exists ) { if(m_parentProjectedLayer.LineStrings != null) { for(int i = 0; i < m_parentProjectedLayer.LineStrings.Length; i++) { if(!m_parentProjectedLayer.LineStrings[i].Visible) continue; GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.LineStrings[i].GetGeographicBoundingBox(); if(currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if(b == null) { b = new Bitmap( m_parentProjectedLayer.TileSize.Width, m_parentProjectedLayer.TileSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if(g == null) { g = Graphics.FromImage(b); } drawLineString( m_parentProjectedLayer.LineStrings[i], g, geoBB, b.Size ); numberPolygonsInTile++; } } } if(m_parentProjectedLayer.Polygons != null) { for(int i = 0; i < m_parentProjectedLayer.Polygons.Length; i++) { if(!m_parentProjectedLayer.Polygons[i].Visible) continue; GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.Polygons[i].GetGeographicBoundingBox(); if(currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if(b == null) { b = new Bitmap( m_parentProjectedLayer.TileSize.Width, m_parentProjectedLayer.TileSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if(g == null) { g = Graphics.FromImage(b); } drawPolygon( m_parentProjectedLayer.Polygons[i], g, geoBB, b.Size); numberPolygonsInTile++; } } } } if(b != null) { System.Drawing.Imaging.BitmapData srcInfo = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); bool isBlank = true; unsafe { int* srcPointer = (int*)srcInfo.Scan0; for(int i = 0; i < b.Height; i++) { for(int j = 0; j < b.Width; j++) { int color = *srcPointer++; if(((color >> 24) & 0xff) > 0) { isBlank = false; break; } } srcPointer += (srcInfo.Stride>>2) - b.Width; } } b.UnlockBits(srcInfo); if(isBlank) numberPolygonsInTile = 0; } // if(!m_parentProjectedLayer.EnableCaching) // { string id = System.DateTime.Now.Ticks.ToString(); if(b != null && numberPolygonsInTile > 0) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Png); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); imageLayer = new WorldWind.Renderable.ImageLayer( id, m_parentProjectedLayer.World, 0, m_ImageStream, System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, 1.0f//(float)m_parentProjectedLayer.Opacity / 255.0f , m_parentProjectedLayer.World.TerrainAccessor); ms.Close(); } /* } else if(imageFile.Exists || numberPolygonsInTile > 0) { string id = System.DateTime.Now.Ticks.ToString(); if(b != null) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); if(!imageFile.Directory.Exists) imageFile.Directory.Create(); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); ImageHelper.ConvertToDxt3(m_ImageStream, imageFile.FullName); ms.Close(); } imageLayer = new WorldWind.Renderable.ImageLayer( id, m_parentProjectedLayer.World, 0, imageFile.FullName, //System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, 1.0f,//(float)m_parentProjectedLayer.Opacity / 255.0f, m_parentProjectedLayer.World.TerrainAccessor); imageLayer.TransparentColor = System.Drawing.Color.Black.ToArgb(); } */ if(b != null) { b.Dispose(); } if(g != null) { g.Dispose(); } b = null; g = null; //might not be necessary //GC.Collect(); return imageLayer; }
private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east, DrawArgs drawArgs, string imagePath) { Bitmap b = null; Graphics g = null; Renderable.ImageLayer imageLayer = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; FileInfo imageFile = new FileInfo(imagePath); FileInfo shapeFile = new FileInfo(m_ShapeTileArgs.ParentShapeFileLayer.ShapeFilePath); FileInfo shapeXmlFile = null; if (m_ShapeTileArgs.ParentShapeFileLayer.MetaData.Contains("SourceXml")) { string sourceXml = (string)m_ShapeTileArgs.ParentShapeFileLayer.MetaData["SourceXml"]; if (!sourceXml.ToLower().StartsWith("http://")) { shapeXmlFile = new FileInfo(sourceXml); } } if (!m_ShapeTileArgs.ParentShapeFileLayer.EnableCaching || !imageFile.Exists || shapeXmlFile == null || shapeXmlFile.LastWriteTimeUtc > imageFile.LastWriteTimeUtc || shapeFile.LastWriteTimeUtc > imageFile.LastWriteTimeUtc ) { for (int i = 0; i < m_ShapeTileArgs.ShapeRecords.Count; i++) { ShapeRecord currentRecord = (ShapeRecord)m_ShapeTileArgs.ShapeRecords[i]; if (currentRecord.Null != null || currentRecord.Point != null || currentRecord.MultiPoint != null || !isShapeRecordInBounds(geoBB, currentRecord)) { continue; } else { if (b == null) { b = new Bitmap(m_ShapeTileArgs.TilePixelSize.Width, m_ShapeTileArgs.TilePixelSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if (g == null) { g = Graphics.FromImage(b); } System.Drawing.Color color = m_ShapeTileArgs.PolygonColor; //Fix Black Tiles g.DrawLine(new Pen(color), 0, 0, 1, 1); if (m_ShapeTileArgs.UseScalar && m_ShapeTileArgs.ScaleColors) { double red = 1.0; double green = 1.0; double blue = 1.0; try { //TODO: make this a function and abstract to allow multiple gradient mappings double dv; double curScalar = double.Parse(currentRecord.Value.ToString()); if (curScalar < m_ShapeTileArgs.ScaleMin) { curScalar = m_ShapeTileArgs.ScaleMin; } if (curScalar > m_ShapeTileArgs.ScaleMax) { curScalar = m_ShapeTileArgs.ScaleMax; } dv = m_ShapeTileArgs.ScaleMax - m_ShapeTileArgs.ScaleMin; if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.25 * dv)) { red = 0; green = 4 * (curScalar - m_ShapeTileArgs.ScaleMin) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.5 * dv)) { red = 0; blue = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.25 * dv - curScalar) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.75 * dv)) { red = 4 * (curScalar - m_ShapeTileArgs.ScaleMin - 0.5 * dv) / dv; blue = 0; } else { green = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.75 * dv - curScalar) / dv; blue = 0; } color = System.Drawing.Color.FromArgb((int)(255 * red), (int)(255 * green), (int)(255 * blue)); } catch (Exception) { // Utility.Log.Write((string)currentPoly.ScalarHash[m_ShapeTileArgs.ColorKey]); // Utility.Log.Write(String.Format("Min: {0}, Max: {1}", m_ShapeTileArgs.ScaleMin, m_ShapeTileArgs.ScaleMax)); // Utility.Log.Write(String.Format("{0},{1},{2}", red, green, blue)); // Utility.Log.Write(ex); } } else { if (m_ShapeTileArgs.ColorAssignments.Count > 0 && m_ShapeTileArgs.ScaleColors) { try { string colorAssignmentKey = (string)currentRecord.Value; foreach (string cak in m_ShapeTileArgs.ColorAssignments.Keys) { if (String.Compare(cak, colorAssignmentKey, true) == 0) { color = (System.Drawing.Color)m_ShapeTileArgs.ColorAssignments[cak]; break; } } } catch (Exception) { } } } if (currentRecord.Polygon != null) { drawPolygon(currentRecord.Polygon, g, color, geoBB, b.Size); } if (m_ShapeTileArgs.ColorAssignments.Count == 0 || !m_ShapeTileArgs.ScaleColors) { color = m_ShapeTileArgs.LineColor; } if (currentRecord.PolyLine != null) { drawPolyLine(currentRecord.PolyLine, g, color, geoBB, b.Size); } numberPolygonsInTile++; } } } if (!m_ShapeTileArgs.ParentShapeFileLayer.EnableCaching) { string id = System.DateTime.Now.Ticks.ToString(); if (b != null) { MemoryStream ms = new MemoryStream(); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); imageLayer = new WorldWind.Renderable.ImageLayer( id, m_ShapeTileArgs.ParentWorld, 0, m_ImageStream, System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, (float)m_ShapeTileArgs.ParentShapeFileLayer.Opacity / 255.0f, m_ShapeTileArgs.ParentWorld.TerrainAccessor); ms.Close(); } } else if (imageFile.Exists || numberPolygonsInTile > 0) { string id = System.DateTime.Now.Ticks.ToString(); if (b != null) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); if (!imageFile.Directory.Exists) { imageFile.Directory.Create(); } //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); ImageHelper.ConvertToDxt3(m_ImageStream, imageFile.FullName); ms.Close(); } imageLayer = new WorldWind.Renderable.ImageLayer( id, m_ShapeTileArgs.ParentWorld, 0, // should be distance above surface imageFile.FullName, //m_ImageStream, //0,//System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, (float)m_ShapeTileArgs.ParentShapeFileLayer.Opacity / 255.0f, m_ShapeTileArgs.ParentWorld.TerrainAccessor); } if (b != null) { b.Dispose(); } if (g != null) { g.Dispose(); } b = null; g = null; //might not be necessary //GC.Collect(); return(imageLayer); }
/*public byte Opacity * { * get * { * return m_parentProjectedLayer.Opacity; * } * set * { * if(m_NwImageLayer != null) * { * m_NwImageLayer.Opacity = value; * } * if(m_NeImageLayer != null) * { * m_NeImageLayer.Opacity = value; * } * if(m_SwImageLayer != null) * { * m_SwImageLayer.Opacity = value; * } * if(m_SeImageLayer != null) * { * m_SeImageLayer.Opacity = value; * } * * if(m_NorthWestChild != null) * { * m_NorthWestChild.Opacity = value; * } * if(m_NorthEastChild != null) * { * m_NorthEastChild.Opacity = value; * } * if(m_SouthWestChild != null) * { * m_SouthWestChild.Opacity = value; * } * if(m_SouthEastChild != null) * { * m_SouthEastChild.Opacity = value; * } * } * }*/ private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east, DrawArgs drawArgs, string imagePath) { Bitmap b = null; Graphics g = null; Renderable.ImageLayer imageLayer = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; FileInfo imageFile = new FileInfo(imagePath); if (!m_parentProjectedLayer.EnableCaching || !imageFile.Exists ) { if (m_parentProjectedLayer.LineStrings != null) { for (int i = 0; i < m_parentProjectedLayer.LineStrings.Length; i++) { if (!m_parentProjectedLayer.LineStrings[i].Visible) { continue; } GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.LineStrings[i].GetGeographicBoundingBox(); if (currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if (b == null) { b = new Bitmap( m_parentProjectedLayer.TileSize.Width, m_parentProjectedLayer.TileSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if (g == null) { g = Graphics.FromImage(b); } drawLineString( m_parentProjectedLayer.LineStrings[i], g, geoBB, b.Size ); numberPolygonsInTile++; } } } if (m_parentProjectedLayer.Polygons != null) { for (int i = 0; i < m_parentProjectedLayer.Polygons.Length; i++) { if (!m_parentProjectedLayer.Polygons[i].Visible) { continue; } GeographicBoundingBox currentBoundingBox = m_parentProjectedLayer.Polygons[i].GetGeographicBoundingBox(); if (currentBoundingBox != null && !currentBoundingBox.Intersects(geoBB)) { continue; } else { if (b == null) { b = new Bitmap( m_parentProjectedLayer.TileSize.Width, m_parentProjectedLayer.TileSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if (g == null) { g = Graphics.FromImage(b); } drawPolygon( m_parentProjectedLayer.Polygons[i], g, geoBB, b.Size); numberPolygonsInTile++; } } } } if (b != null) { System.Drawing.Imaging.BitmapData srcInfo = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); bool isBlank = true; unsafe { int *srcPointer = (int *)srcInfo.Scan0; for (int i = 0; i < b.Height; i++) { for (int j = 0; j < b.Width; j++) { int color = *srcPointer++; if (((color >> 24) & 0xff) > 0) { isBlank = false; break; } } srcPointer += (srcInfo.Stride >> 2) - b.Width; } } b.UnlockBits(srcInfo); if (isBlank) { numberPolygonsInTile = 0; } } // if(!m_parentProjectedLayer.EnableCaching) // { string id = System.DateTime.Now.Ticks.ToString(); if (b != null && numberPolygonsInTile > 0) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Png); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); imageLayer = new WorldWind.Renderable.ImageLayer( id, m_parentProjectedLayer.World, 0, m_ImageStream, System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, 1.0f //(float)m_parentProjectedLayer.Opacity / 255.0f , m_parentProjectedLayer.World.TerrainAccessor); ms.Close(); } /* } * else if(imageFile.Exists || numberPolygonsInTile > 0) * { * string id = System.DateTime.Now.Ticks.ToString(); * * if(b != null) * { * MemoryStream ms = new MemoryStream(); * b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); * if(!imageFile.Directory.Exists) * imageFile.Directory.Create(); * * //must copy original stream into new stream, if not, error occurs, not sure why * m_ImageStream = new MemoryStream(ms.GetBuffer()); * ImageHelper.ConvertToDxt3(m_ImageStream, imageFile.FullName); * * ms.Close(); * } * * imageLayer = new WorldWind.Renderable.ImageLayer( * id, * m_parentProjectedLayer.World, * 0, * imageFile.FullName, * //System.Drawing.Color.Black.ToArgb(), * (float)south, * (float)north, * (float)west, * (float)east, * 1.0f,//(float)m_parentProjectedLayer.Opacity / 255.0f, * m_parentProjectedLayer.World.TerrainAccessor); * * imageLayer.TransparentColor = System.Drawing.Color.Black.ToArgb(); * } */ if (b != null) { b.Dispose(); } if (g != null) { g.Dispose(); } b = null; g = null; //might not be necessary //GC.Collect(); return(imageLayer); }
public BMNG(WorldWind.WorldWindow worldWindow, MenuItem menuItem) { // // Required for Windows Form Designer support // InitializeComponent(); this.m_MenuItem = menuItem; // Plugin menu item ref int lastSelectedDatasetIndex = 1; try { using (StreamReader reader = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + "\\Plugins\\BlueMarble\\settings.txt")) { lastSelectedDatasetIndex = int.Parse(reader.ReadLine().Trim()); } } catch { } comboBoxBmngVersion.SelectedIndex = lastSelectedDatasetIndex; m_WorldWindow = worldWindow; m_RenderableList.ShowOnlyOneLayer = true; bool foundImagesObject = false; lock (m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects.SyncRoot) { foreach (WorldWind.Renderable.RenderableObject ro in m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects) { if (ro is WorldWind.Renderable.RenderableObjectList && (ro.Name == "Images")) // SF FIX: don't add to layers called 'xxxx images'! { WorldWind.Renderable.RenderableObjectList imagesList = ro as WorldWind.Renderable.RenderableObjectList; imagesList.ChildObjects.Insert(0, m_RenderableList); foundImagesObject = true; break; } } } if (!foundImagesObject) { m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects.Add(m_RenderableList); } m_BlueMarbleBase = new WorldWind.Renderable.ImageLayer( "Blue Marble Base Image", m_WorldWindow.CurrentWorld, 0, null, -90, 90, -180, 180, 1.0f, null); m_BlueMarbleBase.ImageUrl = "http://worldwind.arc.nasa.gov/downloads/land_shallow_topo_2048.dds"; WorldWind.NltImageStore ia = new WorldWind.NltImageStore("106", "http://nww.terraserver-usa.com/nwwtile.ashx"); ia.DataDirectory = null; ia.LevelZeroTileSizeDegrees = 36.0; ia.LevelCount = 4; ia.ImageExtension = "jpg"; ia.CacheDirectory = String.Format("{0}\\Blue Marble", m_WorldWindow.Cache.CacheDirectory); WorldWind.ImageStore[] ias = new WorldWind.ImageStore[1]; ias[0] = ia; m_BlueMarbleTiled = new WorldWind.Renderable.QuadTileSet( "Blue Marble Tiled", m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_BlueMarbleTiled.ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_BlueMarbleList = new WorldWind.Renderable.RenderableObjectList("Blue Marble"); m_BlueMarbleList.IsOn = false; m_BlueMarbleList.Add(m_BlueMarbleBase); m_BlueMarbleList.Add(m_BlueMarbleTiled); m_ShadedList = new WorldWind.Renderable.RenderableObjectList("BMNG"); m_ShadedList.ShowOnlyOneLayer = true; m_ShadedList.IsOn = false; for (int i = 0; i < 12; i++) { m_ImageLayers[0, i] = new WorldWind.Renderable.ImageLayer( String.Format("Base Image - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, null, -90, 90, -180, 180, 1.0f, null); m_ImageLayers[0, i].ImageUrl = String.Format("{0}world.topo.2004{1:D2}.jpg", m_BmngBaseImageUrl, i + 1); WorldWind.NltImageStore imageStore = new WorldWind.NltImageStore(String.Format("bmng.topo.2004{0:D2}", i + 1), "http://worldwind25.arc.nasa.gov/tile/tile.aspx"); imageStore.DataDirectory = null; imageStore.LevelZeroTileSizeDegrees = 36.0; imageStore.LevelCount = 5; imageStore.ImageExtension = "jpg"; imageStore.CacheDirectory = String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (Shaded) Tiled - {0}.2004", i + 1)); ias = new WorldWind.ImageStore[1]; ias[0] = imageStore; m_QuadTileLayers[0, i] = new WorldWind.Renderable.QuadTileSet( String.Format("Tiled - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_QuadTileLayers[0, i].ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_RenderableLayers[0, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i + 1)); m_RenderableLayers[0, i].IsOn = false; m_RenderableLayers[0, i].Add(m_ImageLayers[0, i]); m_RenderableLayers[0, i].Add(m_QuadTileLayers[0, i]); m_ShadedList.Add(m_RenderableLayers[0, i]); } m_ShadedBathyList = new WorldWind.Renderable.RenderableObjectList("BMNG (Bathymetry)"); m_ShadedBathyList.ShowOnlyOneLayer = true; m_ShadedBathyList.IsOn = false; for (int i = 0; i < 12; i++) { m_ImageLayers[1, i] = new WorldWind.Renderable.ImageLayer( String.Format("Base Image - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, String.Format("{0}\\Data\\Earth\\BmngBathy\\world.topo.bathy.2004{1:D2}.jpg", Path.GetDirectoryName(Application.ExecutablePath), i + 1), -90, 90, -180, 180, 1.0f, null); // m_ImageLayers[1, i].ImageUrl = String.Format("{0}world.topo.bathy.2004{1:D2}.jpg", m_BmngBaseImageUrl, i+1); WorldWind.NltImageStore imageStore = new WorldWind.NltImageStore(String.Format("bmng.topo.bathy.2004{0:D2}", i + 1), "http://worldwind25.arc.nasa.gov/tile/tile.aspx"); imageStore.DataDirectory = null; imageStore.LevelZeroTileSizeDegrees = 36.0; imageStore.LevelCount = 5; imageStore.ImageExtension = "jpg"; imageStore.CacheDirectory = String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (Shaded + Bathymetry) Tiled - {0}.2004", i + 1)); ias = new WorldWind.ImageStore[1]; ias[0] = imageStore; m_QuadTileLayers[1, i] = new WorldWind.Renderable.QuadTileSet( String.Format("Tiled - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_QuadTileLayers[0, i].ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_RenderableLayers[1, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i + 1)); m_RenderableLayers[1, i].IsOn = false; m_RenderableLayers[1, i].Add(m_ImageLayers[1, i]); m_RenderableLayers[1, i].Add(m_QuadTileLayers[1, i]); m_ShadedBathyList.Add(m_RenderableLayers[1, i]); } /* m_UnShadedList = new WorldWind.Renderable.RenderableObjectList("BMNG (UnShaded)"); * m_UnShadedList.ShowOnlyOneLayer = true; * m_UnShadedList.IsOn = false; * * for(int i = 0; i < 12; i++) * { * m_ImageLayers[2, i] = new WorldWind.Renderable.ImageLayer( * String.Format("Base Image - {0}.2004 un", i+1), * m_WorldWindow.CurrentWorld, * 0, * null, * -90, 90, -180, 180, 1.0f, m_WorldWindow.CurrentWorld.TerrainAccessor); * * m_ImageLayers[2, i].ImageUrl = String.Format("{0}world.2004{1:D2}.jpg", m_BmngBaseImageUrl, i+1); * m_ImageLayers[2, i].IsOn = false; * * m_QuadTileLayers[2, i] = new WorldWind.Renderable.QuadTileSet( * String.Format("Tiled - {0}.2004", i+1), * m_WorldWindow.CurrentWorld, * 0, * 90, -90, -180, 180, m_WorldWindow.CurrentWorld.TerrainAccessor, * new WorldWind.ImageAccessor( * null, 512, 36.0, 5, "jpg", * String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (UnShaded) Tiled - {0}.2004", i+1)), * new WorldWind.ImageTileService( * String.Format("bmng.2004{0:D2}", i+1), "http://worldwind28.arc.nasa.gov/TestWebApp/WebForm1.aspx", * Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png") * )); * * m_RenderableLayers[2, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i+1)); * m_RenderableLayers[2, i].IsOn = false; * * m_RenderableLayers[2, i].Add(m_ImageLayers[1, i]); * m_RenderableLayers[2, i].Add(m_QuadTileLayers[1, i]); * m_UnShadedList.Add(m_RenderableLayers[2, i]); * }*/ m_RenderableList.Add(m_BlueMarbleList); m_RenderableList.Add(m_ShadedList); m_RenderableList.Add(m_ShadedBathyList); // m_RenderableList.Add(m_UnShadedList); this.trackBarMonth.Value = System.DateTime.Now.Month - 1; timer = new Timer(); timer.Interval = 1000; timer.Tick += new EventHandler(timer_Tick); timer.Start(); }
private Renderable.ImageLayer CreateImageLayer(double north, double south, double west, double east, DrawArgs drawArgs, string imagePath) { Bitmap b = null; Graphics g = null; Renderable.ImageLayer imageLayer = null; GeographicBoundingBox geoBB = new GeographicBoundingBox(north, south, west, east); int numberPolygonsInTile = 0; FileInfo imageFile = new FileInfo(imagePath); FileInfo shapeFile = new FileInfo(m_ShapeTileArgs.ParentShapeFileLayer.ShapeFilePath); FileInfo shapeXmlFile = null; if(m_ShapeTileArgs.ParentShapeFileLayer.MetaData.Contains("SourceXml")) { string sourceXml = (string)m_ShapeTileArgs.ParentShapeFileLayer.MetaData["SourceXml"]; if(!sourceXml.ToLower().StartsWith("http://")) { shapeXmlFile = new FileInfo(sourceXml); } } if(!m_ShapeTileArgs.ParentShapeFileLayer.EnableCaching || !imageFile.Exists || shapeXmlFile == null || shapeXmlFile.LastWriteTimeUtc > imageFile.LastWriteTimeUtc || shapeFile.LastWriteTimeUtc > imageFile.LastWriteTimeUtc ) { for(int i = 0; i < m_ShapeTileArgs.ShapeRecords.Count; i++) { ShapeRecord currentRecord = (ShapeRecord)m_ShapeTileArgs.ShapeRecords[i]; if(currentRecord.Null != null || currentRecord.Point != null || currentRecord.MultiPoint != null || !isShapeRecordInBounds(geoBB, currentRecord)) { continue; } else { if(b == null) { b = new Bitmap(m_ShapeTileArgs.TilePixelSize.Width, m_ShapeTileArgs.TilePixelSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } if(g == null) { g = Graphics.FromImage(b); } System.Drawing.Color color = m_ShapeTileArgs.PolygonColor; //Fix Black Tiles g.DrawLine(new Pen(color),0,0,1,1); if(m_ShapeTileArgs.UseScalar && m_ShapeTileArgs.ScaleColors) { double red = 1.0; double green = 1.0; double blue = 1.0; try { //TODO: make this a function and abstract to allow multiple gradient mappings double dv; double curScalar = double.Parse(currentRecord.Value.ToString()); if (curScalar < m_ShapeTileArgs.ScaleMin) curScalar = m_ShapeTileArgs.ScaleMin; if (curScalar > m_ShapeTileArgs.ScaleMax) curScalar = m_ShapeTileArgs.ScaleMax; dv = m_ShapeTileArgs.ScaleMax - m_ShapeTileArgs.ScaleMin; if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.25 * dv)) { red = 0; green = 4 * (curScalar - m_ShapeTileArgs.ScaleMin) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.5 * dv)) { red = 0; blue = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.25 * dv - curScalar) / dv; } else if (curScalar < (m_ShapeTileArgs.ScaleMin + 0.75 * dv)) { red = 4 * (curScalar - m_ShapeTileArgs.ScaleMin - 0.5 * dv) / dv; blue = 0; } else { green = 1 + 4 * (m_ShapeTileArgs.ScaleMin + 0.75 * dv - curScalar) / dv; blue = 0; } color = System.Drawing.Color.FromArgb((int)(255*red), (int)(255*green), (int)(255*blue)); } catch(Exception) { // Utility.Log.Write((string)currentPoly.ScalarHash[m_ShapeTileArgs.ColorKey]); // Utility.Log.Write(String.Format("Min: {0}, Max: {1}", m_ShapeTileArgs.ScaleMin, m_ShapeTileArgs.ScaleMax)); // Utility.Log.Write(String.Format("{0},{1},{2}", red, green, blue)); // Utility.Log.Write(ex); } } else { if(m_ShapeTileArgs.ColorAssignments.Count > 0 && m_ShapeTileArgs.ScaleColors) { try { string colorAssignmentKey = (string)currentRecord.Value; foreach(string cak in m_ShapeTileArgs.ColorAssignments.Keys) { if(String.Compare(cak, colorAssignmentKey, true) == 0) { color = (System.Drawing.Color)m_ShapeTileArgs.ColorAssignments[cak]; break; } } } catch(Exception) { } } } if(currentRecord.Polygon != null) { drawPolygon(currentRecord.Polygon, g, color, geoBB, b.Size); } if(m_ShapeTileArgs.ColorAssignments.Count == 0 || !m_ShapeTileArgs.ScaleColors) { color = m_ShapeTileArgs.LineColor; } if(currentRecord.PolyLine != null) { drawPolyLine(currentRecord.PolyLine, g, color, geoBB, b.Size); } numberPolygonsInTile++; } } } if(!m_ShapeTileArgs.ParentShapeFileLayer.EnableCaching) { string id = System.DateTime.Now.Ticks.ToString(); if(b != null) { MemoryStream ms = new MemoryStream(); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); imageLayer = new WorldWind.Renderable.ImageLayer( id, m_ShapeTileArgs.ParentWorld, 0, m_ImageStream, System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, (float)m_ShapeTileArgs.ParentShapeFileLayer.Opacity / 255.0f, m_ShapeTileArgs.ParentWorld.TerrainAccessor); ms.Close(); } } else if(imageFile.Exists || numberPolygonsInTile > 0) { string id = System.DateTime.Now.Ticks.ToString(); if(b != null) { MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); if(!imageFile.Directory.Exists) imageFile.Directory.Create(); //must copy original stream into new stream, if not, error occurs, not sure why m_ImageStream = new MemoryStream(ms.GetBuffer()); ImageHelper.ConvertToDxt3(m_ImageStream, imageFile.FullName); ms.Close(); } imageLayer = new WorldWind.Renderable.ImageLayer( id, m_ShapeTileArgs.ParentWorld, 0,// should be distance above surface imageFile.FullName,//m_ImageStream, //0,//System.Drawing.Color.Black.ToArgb(), (float)south, (float)north, (float)west, (float)east, (float)m_ShapeTileArgs.ParentShapeFileLayer.Opacity / 255.0f, m_ShapeTileArgs.ParentWorld.TerrainAccessor); } if(b != null) { b.Dispose(); } if(g != null) { g.Dispose(); } b = null; g = null; //might not be necessary //GC.Collect(); return imageLayer; }
public BMNG(WorldWind.WorldWindow worldWindow, MenuItem menuItem) { // // Required for Windows Form Designer support // InitializeComponent(); this.m_MenuItem = menuItem; // Plugin menu item ref int lastSelectedDatasetIndex = 1; try { using (StreamReader reader = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + "\\Plugins\\BlueMarble\\settings.txt")) { lastSelectedDatasetIndex = int.Parse(reader.ReadLine().Trim()); } } catch { } comboBoxBmngVersion.SelectedIndex = lastSelectedDatasetIndex; m_WorldWindow = worldWindow; m_RenderableList.ShowOnlyOneLayer = true; bool foundImagesObject = false; lock (m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects.SyncRoot) { foreach (WorldWind.Renderable.RenderableObject ro in m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects) { if (ro is WorldWind.Renderable.RenderableObjectList && (ro.Name == "Images")) // SF FIX: don't add to layers called 'xxxx images'! { WorldWind.Renderable.RenderableObjectList imagesList = ro as WorldWind.Renderable.RenderableObjectList; imagesList.ChildObjects.Insert(0, m_RenderableList); foundImagesObject = true; break; } } } if (!foundImagesObject) { m_WorldWindow.CurrentWorld.RenderableObjects.ChildObjects.Add(m_RenderableList); } m_BlueMarbleBase = new WorldWind.Renderable.ImageLayer( "Blue Marble Base Image", m_WorldWindow.CurrentWorld, 0, null, -90, 90, -180, 180, 1.0f, null); m_BlueMarbleBase.ImageUrl = "http://worldwind.arc.nasa.gov/downloads/land_shallow_topo_2048.dds"; WorldWind.NltImageStore ia = new WorldWind.NltImageStore("106", "http://nww.terraserver-usa.com/nwwtile.ashx"); ia.DataDirectory = null; ia.LevelZeroTileSizeDegrees = 36.0; ia.LevelCount = 4; ia.ImageExtension = "jpg"; ia.CacheDirectory = String.Format("{0}\\Blue Marble", m_WorldWindow.Cache.CacheDirectory); WorldWind.ImageStore[] ias = new WorldWind.ImageStore[1]; ias[0] = ia; m_BlueMarbleTiled = new WorldWind.Renderable.QuadTileSet( "Blue Marble Tiled", m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_BlueMarbleTiled.ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_BlueMarbleList = new WorldWind.Renderable.RenderableObjectList("Blue Marble"); m_BlueMarbleList.IsOn = false; m_BlueMarbleList.Add(m_BlueMarbleBase); m_BlueMarbleList.Add(m_BlueMarbleTiled); m_ShadedList = new WorldWind.Renderable.RenderableObjectList("BMNG"); m_ShadedList.ShowOnlyOneLayer = true; m_ShadedList.IsOn = false; for (int i = 0; i < 12; i++) { m_ImageLayers[0, i] = new WorldWind.Renderable.ImageLayer( String.Format("Base Image - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, null, -90, 90, -180, 180, 1.0f, null); m_ImageLayers[0, i].ImageUrl = String.Format("{0}world.topo.2004{1:D2}.jpg", m_BmngBaseImageUrl, i + 1); WorldWind.NltImageStore imageStore = new WorldWind.NltImageStore(String.Format("bmng.topo.2004{0:D2}", i + 1), "http://worldwind25.arc.nasa.gov/tile/tile.aspx"); imageStore.DataDirectory = null; imageStore.LevelZeroTileSizeDegrees = 36.0; imageStore.LevelCount = 5; imageStore.ImageExtension = "jpg"; imageStore.CacheDirectory = String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (Shaded) Tiled - {0}.2004", i + 1)); ias = new WorldWind.ImageStore[1]; ias[0] = imageStore; m_QuadTileLayers[0, i] = new WorldWind.Renderable.QuadTileSet( String.Format("Tiled - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_QuadTileLayers[0, i].ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_RenderableLayers[0, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i + 1)); m_RenderableLayers[0, i].IsOn = false; m_RenderableLayers[0, i].Add(m_ImageLayers[0, i]); m_RenderableLayers[0, i].Add(m_QuadTileLayers[0, i]); m_ShadedList.Add(m_RenderableLayers[0, i]); } m_ShadedBathyList = new WorldWind.Renderable.RenderableObjectList("BMNG (Bathymetry)"); m_ShadedBathyList.ShowOnlyOneLayer = true; m_ShadedBathyList.IsOn = false; for (int i = 0; i < 12; i++) { m_ImageLayers[1, i] = new WorldWind.Renderable.ImageLayer( String.Format("Base Image - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, String.Format("{0}\\Data\\Earth\\BmngBathy\\world.topo.bathy.2004{1:D2}.jpg", Path.GetDirectoryName(Application.ExecutablePath), i + 1), -90, 90, -180, 180, 1.0f, null); // m_ImageLayers[1, i].ImageUrl = String.Format("{0}world.topo.bathy.2004{1:D2}.jpg", m_BmngBaseImageUrl, i+1); WorldWind.NltImageStore imageStore = new WorldWind.NltImageStore(String.Format("bmng.topo.bathy.2004{0:D2}", i + 1), "http://worldwind25.arc.nasa.gov/tile/tile.aspx"); imageStore.DataDirectory = null; imageStore.LevelZeroTileSizeDegrees = 36.0; imageStore.LevelCount = 5; imageStore.ImageExtension = "jpg"; imageStore.CacheDirectory = String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (Shaded + Bathymetry) Tiled - {0}.2004", i + 1)); ias = new WorldWind.ImageStore[1]; ias[0] = imageStore; m_QuadTileLayers[1, i] = new WorldWind.Renderable.QuadTileSet( String.Format("Tiled - {0}.2004", i + 1), m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, true, ias); m_QuadTileLayers[0, i].ServerLogoFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png"; m_RenderableLayers[1, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i + 1)); m_RenderableLayers[1, i].IsOn = false; m_RenderableLayers[1, i].Add(m_ImageLayers[1, i]); m_RenderableLayers[1, i].Add(m_QuadTileLayers[1, i]); m_ShadedBathyList.Add(m_RenderableLayers[1, i]); } /* m_UnShadedList = new WorldWind.Renderable.RenderableObjectList("BMNG (UnShaded)"); m_UnShadedList.ShowOnlyOneLayer = true; m_UnShadedList.IsOn = false; for(int i = 0; i < 12; i++) { m_ImageLayers[2, i] = new WorldWind.Renderable.ImageLayer( String.Format("Base Image - {0}.2004 un", i+1), m_WorldWindow.CurrentWorld, 0, null, -90, 90, -180, 180, 1.0f, m_WorldWindow.CurrentWorld.TerrainAccessor); m_ImageLayers[2, i].ImageUrl = String.Format("{0}world.2004{1:D2}.jpg", m_BmngBaseImageUrl, i+1); m_ImageLayers[2, i].IsOn = false; m_QuadTileLayers[2, i] = new WorldWind.Renderable.QuadTileSet( String.Format("Tiled - {0}.2004", i+1), m_WorldWindow.CurrentWorld, 0, 90, -90, -180, 180, m_WorldWindow.CurrentWorld.TerrainAccessor, new WorldWind.ImageAccessor( null, 512, 36.0, 5, "jpg", String.Format("{0}\\BMNG\\{1}", m_WorldWindow.Cache.CacheDirectory, String.Format("BMNG (UnShaded) Tiled - {0}.2004", i+1)), new WorldWind.ImageTileService( String.Format("bmng.2004{0:D2}", i+1), "http://worldwind28.arc.nasa.gov/TestWebApp/WebForm1.aspx", Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\meatball.png") )); m_RenderableLayers[2, i] = new WorldWind.Renderable.RenderableObjectList(String.Format("{0}.2004", i+1)); m_RenderableLayers[2, i].IsOn = false; m_RenderableLayers[2, i].Add(m_ImageLayers[1, i]); m_RenderableLayers[2, i].Add(m_QuadTileLayers[1, i]); m_UnShadedList.Add(m_RenderableLayers[2, i]); }*/ m_RenderableList.Add(m_BlueMarbleList); m_RenderableList.Add(m_ShadedList); m_RenderableList.Add(m_ShadedBathyList); // m_RenderableList.Add(m_UnShadedList); this.trackBarMonth.Value = System.DateTime.Now.Month - 1; timer = new Timer(); timer.Interval = 1000; timer.Tick += new EventHandler(timer_Tick); timer.Start(); }