private void Click() { var ScreenRectangle = new System.Drawing.Rectangle( new System.Drawing.Point(0, 0), new System.Drawing.Size((int)(pB_Map.Width), (int)(pB_Map.Height))); var MousePosition = pB_Map.PointToClient(Control.MousePosition); foreach (var system in GlobalData.Systems) { var Options = new SystemDrawOptions(); if (Style.ContainsKey(system)) { Options = Style[system]; } int Value = ((int)(((WorldOffset - system.Coordinates).Length * ViewDistance) * -1) + 255).Clamp(0, 255); var WorldPosition = (system.Coordinates - WorldOffset).RotateY(WorldRotationY); var DrawSize = (int)(Value / 50); if (Options.Size > 0) { DrawSize = Options.Size; } var ScreenPos = Translate(WorldPosition) + new Vector((ScreenRectangle.Width), (ScreenRectangle.Height)); //new Vector(system.Coordinates.Z, system.Coordinates.X) - Position; var DrawRect = new Rectangle((int)((ScreenPos.X - ScreenRectangle.Width / 2)), (int)((ScreenPos.Y - ScreenRectangle.Height / 2)), DrawSize, DrawSize); if (DrawRect.Contains(MousePosition)) { WorldOffset = system.Coordinates; if (!Style.ContainsKey(system)) { Style.Add(system, new SystemDrawOptions() { ShowName = true, Color = Color.Blue }); } CameraPosition = /*UserData.System.Coordinates + */ new Data.Vector3(0, 0, 40); } } timer_Tick(null, null); }
private int DrawSystems(List <Data.System> Systems, Rectangle ScreenRectangle) { var DefaultOption = new SystemDrawOptions(); int DrawnSystems = 0; List <Data.System> SystemsWithText = new List <Data.System>(); var bitmap = new Bitmap(img); var bitmapData = bitmap.LockBits( new Rectangle(System.Drawing.Point.Empty, img.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); var bitsPerPixel = (((int)bitmapData.PixelFormat >> 8) & 0xFF) / 8; int bWidth = bitmap.Width, bHeight = bitmap.Height; unsafe { var pixelDataPointer = (byte *)bitmapData.Scan0; foreach (var system in Systems) { var Options = DefaultOption; if (Style.ContainsKey(system)) { Options = Style[system]; } /*int Value = ((int)(((WorldOffset - system.Coordinates).Length * ViewDistance) * -2) + 255).Clamp(50, 255); * if (Value == 0) * return false; * * var DrawSize = (int)((double)Value / 255 * 20); * if (DrawSize < 10) * DrawSize = 10;*/ int DrawSize = 2; if (Options.Size > 0) { DrawSize = Options.Size; } var DrawRect = GetSystemScreenRect(system, ScreenRectangle, DrawSize); var CheckRect = new Rectangle(new System.Drawing.Point(ScreenRectangle.X - DrawSize, ScreenRectangle.Y - DrawSize), new System.Drawing.Size(ScreenRectangle.Width + DrawSize * 2, ScreenRectangle.Height + DrawSize * 2)); if (DrawRect.IntersectsWith(CheckRect)) { // (DrawRect.X < 0 || DrawRect.Y < 0 || DrawRect.Width < 0 || DrawRect.Height < 0) return false; //var sColor = Color.FromArgb(255, 255, 255, 255); //if (Options.Color.A != 0) // sColor = Options.Color; if (DrawRect.X > 0 && DrawRect.X < bWidth && DrawRect.Y > 0 && DrawRect.Y < bHeight) { var target = bitmapData.Stride * DrawRect.Y + 0 + DrawRect.X * bitsPerPixel; pixelDataPointer[target] = (byte)(255 + pixelDataPointer[target]); //Blue pixelDataPointer[target + 1] = (byte)(255 + pixelDataPointer[target + 1]); //Green pixelDataPointer[target + 2] = (byte)(255 + pixelDataPointer[target + 2]); //Red } //System.Drawing. //graphics.DrawImage(StarImage, DrawRect, ); //graphics.FillRectangle(StarBrush, DrawRect); /*for(int x = -(DrawRect.Width / 2); x < DrawRect.Width / 2; x++) * { * for (int y = -(DrawRect.Height / 2); y < DrawRect.Height / 2; y++) * { * int tX = DrawRect.X + x, * tY = DrawRect.Y + y; * * if (tX > 0 && tX < bWidth && * tY > 0 && tY < bHeight) * { * var target = bitmapData.Stride * tY + 0 + tX * bitsPerPixel; * pixelDataPointer[target] = 255; //Blue * pixelDataPointer[target + 1] = 255; //Green * pixelDataPointer[target + 2] = 255; //Red * } * } * }*/ //pixelDataPointer[target + 3] = 0; // Alpha //img. if (Options.ShowName || Options.Text != null) { SystemsWithText.Add(system); } DrawnSystems++; } } const int BlurSize = 3; const int BlurHalf = 1; double[,] blurMatrix = new double[BlurSize, BlurSize] { { 0, 0.5, 0 }, { 0.5, 1, 0.5 }, { 0, 0.5, 0 } }; // Blur /*for (int x = 0; x < bWidth; x++) * { * for (int y = 0; y < bHeight; y++) * { * for(int sX = 0; sX < BlurSize; sX++) * { * for(int sY = 0; sY < BlurSize; sY++) * { * int tX = x + (sX - BlurHalf), * tY = y + (sY - BlurHalf); * * if (tX < 0 || tX >= bWidth || * tY < 0 || tY >= bHeight) * continue; * * var target = bitmapData.Stride * tY + 0 + tX * bitsPerPixel; * var value = blurMatrix[sX, sY] * 255; * pixelDataPointer[target] = (byte)(value + pixelDataPointer[target]); //Blue * pixelDataPointer[target + 1] = (byte)(value + pixelDataPointer[target + 1]); //Green * pixelDataPointer[target + 2] = (byte)(value + pixelDataPointer[target + 2]); //Red * } * } * } * }*/ } bitmap.UnlockBits(bitmapData); img = bitmap; graphics = Graphics.FromImage(img); foreach (var system in SystemsWithText) { var Options = DefaultOption; if (Style.ContainsKey(system)) { Options = Style[system]; } /*int Value = ((int)(((WorldOffset - system.Coordinates).Length * ViewDistance) * -2) + 255).Clamp(50, 255); * if (Value == 0) * return false; * * var DrawSize = (int)((double)Value / 255 * 20); * if (DrawSize < 10) * DrawSize = 10;*/ int DrawSize = 1; if (Options.Size > 0) { DrawSize = Options.Size; } var DrawRect = GetSystemScreenRect(system, ScreenRectangle, DrawSize); var CheckRect = new Rectangle(new System.Drawing.Point(ScreenRectangle.X - DrawSize, ScreenRectangle.Y - DrawSize), new System.Drawing.Size(ScreenRectangle.Width + DrawSize * 2, ScreenRectangle.Height + DrawSize * 2)); if (DrawRect.IntersectsWith(CheckRect)) { var Pos = DrawRect.Location + DrawRect.Size; if (Options.ShowName) { graphics.DrawString(system.name, System.Drawing.SystemFonts.DefaultFont, StarBrush, Pos); Pos.Y += 15; } if (Options.Text != null) { graphics.DrawString(Options.Text, System.Drawing.SystemFonts.DefaultFont, StarBrush, Pos); } } } return(DrawnSystems); }