Moving examples, mapgenerator, and VisualParamGenerator to Programs folder (SVN is seriously ruined still, don't check out yet)
git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@1961 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
145
Programs/examples/GUITestClient/Interfaces/MinimapInterface.cs
Normal file
145
Programs/examples/GUITestClient/Interfaces/MinimapInterface.cs
Normal file
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using OpenMetaverse;
|
||||
using System.Net;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace OpenMetaverse.GUITestClient
|
||||
{
|
||||
public class MinimapInterface : Interface
|
||||
{
|
||||
//A magic number to calculate index sim y coord from actual coord
|
||||
private const int GRID_Y_OFFSET = 1279;
|
||||
//Base URL for web map api sim images
|
||||
private const String MAP_IMG_URL = "http://secondlife.com/apps/mapapi/grid/map_image/";
|
||||
private PictureBox world = new PictureBox();
|
||||
private Button cmdRefresh = new Button();
|
||||
private System.Drawing.Image mMapImage = null;
|
||||
private string oldSim = String.Empty;
|
||||
|
||||
public MinimapInterface(frmTestClient testClient)
|
||||
{
|
||||
Name = "Minimap";
|
||||
Description = "Displays a graphical minimap of the current simulator";
|
||||
}
|
||||
|
||||
private void map_onclick(object sender, System.EventArgs e)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
private void cmdRefresh_onclick(object sender, System.EventArgs e)
|
||||
{
|
||||
printMap();
|
||||
}
|
||||
|
||||
public void printMap()
|
||||
{
|
||||
Bitmap map = new Bitmap(256, 256, PixelFormat.Format32bppRgb);
|
||||
Font font = new Font("Tahoma", 8, FontStyle.Bold);
|
||||
Pen mAvPen = new Pen(Brushes.GreenYellow, 1);
|
||||
Brush mAvBrush = new SolidBrush(Color.Green);
|
||||
String strInfo = String.Empty;
|
||||
|
||||
// Get new background map if necessary
|
||||
if (mMapImage == null || oldSim != Client.Network.CurrentSim.Name)
|
||||
{
|
||||
oldSim = Client.Network.CurrentSim.Name;
|
||||
mMapImage = DownloadWebMapImage();
|
||||
}
|
||||
|
||||
// Create in memory bitmap
|
||||
using (Graphics g = Graphics.FromImage(map))
|
||||
{
|
||||
// Draw background map
|
||||
g.DrawImage(mMapImage, new Rectangle(0, 0, 256, 256), 0, 0, 256, 256, GraphicsUnit.Pixel);
|
||||
|
||||
// Draw all avatars
|
||||
Client.Network.CurrentSim.AvatarPositions.ForEach(
|
||||
delegate(LLVector3 pos)
|
||||
{
|
||||
Rectangle rect = new Rectangle((int)Math.Round(pos.X, 0) - 2, 255 - ((int)Math.Round(pos.Y, 0) - 2), 4, 4);
|
||||
g.FillEllipse(mAvBrush, rect);
|
||||
g.DrawEllipse(mAvPen, rect);
|
||||
}
|
||||
);
|
||||
|
||||
// Draw self ;)
|
||||
Rectangle myrect = new Rectangle((int)Math.Round(Client.Self.SimPosition.X, 0) - 3, 255 - ((int)Math.Round(Client.Self.SimPosition.Y, 0) - 3), 6, 6);
|
||||
g.FillEllipse(new SolidBrush(Color.Yellow), myrect);
|
||||
g.DrawEllipse(new Pen(Brushes.Goldenrod, 1), myrect);
|
||||
|
||||
// Draw region info
|
||||
strInfo = string.Format("Sim {0}/{1}/{2}/{3}\nAvatars {4}", Client.Network.CurrentSim.Name,
|
||||
Math.Round(Client.Self.SimPosition.X, 0),
|
||||
Math.Round(Client.Self.SimPosition.Y, 0),
|
||||
Math.Round(Client.Self.SimPosition.Z, 0),
|
||||
Client.Network.CurrentSim.AvatarPositions.Count);
|
||||
g.DrawString(strInfo, font, Brushes.DarkOrange, 4, 4);
|
||||
}
|
||||
// update picture box with new map bitmap
|
||||
world.BackgroundImage = map;
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
((System.ComponentModel.ISupportInitialize)(world)).BeginInit();
|
||||
world.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
world.Size = new System.Drawing.Size(256, 256);
|
||||
world.Visible = true;
|
||||
world.Click += new System.EventHandler(this.map_onclick);
|
||||
((System.ComponentModel.ISupportInitialize)(world)).EndInit();
|
||||
|
||||
//((System.ComponentModel.ISupportInitialize)(cmdRefresh)).BeginInit();
|
||||
cmdRefresh.Text = "Refresh";
|
||||
cmdRefresh.Size = new System.Drawing.Size(80, 24);
|
||||
cmdRefresh.Left = world.Left + world.Width + 20;
|
||||
cmdRefresh.Click += new System.EventHandler(this.cmdRefresh_onclick);
|
||||
cmdRefresh.Visible = true;
|
||||
//((System.ComponentModel.ISupportInitialize)(world)).EndInit();
|
||||
|
||||
TabPage.Controls.Add(world);
|
||||
TabPage.Controls.Add(cmdRefresh);
|
||||
}
|
||||
|
||||
// Ripped from "Terrain Sculptor" by Cadroe with minors changes
|
||||
// http://spinmass.blogspot.com/2007/08/terrain-sculptor-maps-sims-and-creates.html
|
||||
private System.Drawing.Image DownloadWebMapImage()
|
||||
{
|
||||
HttpWebRequest request = null;
|
||||
HttpWebResponse response = null;
|
||||
String imgURL = "";
|
||||
GridRegion currRegion;
|
||||
|
||||
Client.Grid.GetGridRegion(Client.Network.CurrentSim.Name, GridLayerType.Terrain, out currRegion);
|
||||
try
|
||||
{
|
||||
//Form the URL using the sim coordinates
|
||||
imgURL = MAP_IMG_URL + currRegion.X.ToString() + "-" +
|
||||
(GRID_Y_OFFSET - currRegion.Y).ToString() + "-1-0";
|
||||
//Make the http request
|
||||
request = (HttpWebRequest)HttpWebRequest.Create(imgURL);
|
||||
request.Timeout = 5000;
|
||||
request.ReadWriteTimeout = 20000;
|
||||
response = (HttpWebResponse)request.GetResponse();
|
||||
|
||||
return System.Drawing.Image.FromStream(response.GetResponseStream());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.ToString(), "Error Downloading Web Map Image");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user