Created
June 25, 2016 21:25
-
-
Save thebecwar/c7891893f893e4117e3c82882d644d3e to your computer and use it in GitHub Desktop.
Code for answer to http://stackoverflow.com/questions/28958106/tooltip-in-picturebox-fillpie-coordinates-c-sharp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Drawing; | |
using System.Linq; | |
using System.Windows.Forms; | |
namespace ScratchApp | |
{ | |
public partial class Form1 : Form | |
{ | |
List<int> values = Enumerable.Range(0, 360).ToList(); | |
int Rescale(int x) => (int)(((double)x / 360.0) * 255.0); | |
public Form1() | |
{ | |
InitializeComponent(); | |
this.pictureBox1.BorderStyle = BorderStyle.Fixed3D; | |
this.pictureBox1.Size = new Size(50, 50); | |
this.Size = new Size(450, 450); | |
this.DoubleBuffered = true; | |
this.Paint += Form1_Paint; | |
this.MouseMove += Form1_MouseMove; | |
} | |
private void Form1_Paint(object sender, PaintEventArgs e) | |
{ | |
e.Graphics.Clear(Color.Black); | |
for (int i = 0; i < values.Count; i++) | |
{ | |
Brush b = new SolidBrush(Color.FromArgb(255, Rescale(i), 0, 0)); | |
e.Graphics.FillPie(b, 0, 0, 400, 400, (float)i, 1.0f); | |
} | |
} | |
private void Form1_MouseMove(object sender, MouseEventArgs e) | |
{ | |
this.pictureBox1.Location = new Point(e.X + 5, e.Y - 5); | |
int segment = (int)GetAngle(new Rectangle(0, 0, 400, 400), e.Location); | |
this.pictureBox1.BackColor = Color.FromArgb(255, Rescale(segment), 0, 0); | |
} | |
float GetAngle(Rectangle rect, Point pTo) | |
{ | |
int cx = (rect.Width + rect.X) / 2; | |
int cy = (rect.Height + rect.Y) / 2; | |
float x = pTo.X - cx; | |
float y = (cy - pTo.Y); | |
if ((int)x == 0) | |
{ | |
if (y > 0) return 270; | |
else return 90; | |
} | |
else if ((int)y == 0) | |
{ | |
if (x > 0) return 0; | |
else return 180; | |
} | |
float ccwAngle = (float)Math.Atan(Math.Abs(y) / Math.Abs(x)); | |
if (x > 0 && y > 0) | |
{ | |
} | |
else if (x < 0 && y > 0) | |
{ | |
ccwAngle = (float)Math.PI - ccwAngle; | |
} | |
else if (x < 0 && y < 0) | |
{ | |
ccwAngle = ccwAngle + (float)Math.PI; | |
} | |
else if (x > 0 && y < 0) | |
{ | |
ccwAngle *= -1f; | |
} | |
ccwAngle *= (float)(180 / Math.PI); | |
while (ccwAngle > 360) ccwAngle -= 360; | |
while (ccwAngle < 0) ccwAngle += 360; | |
return 360f - ccwAngle; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment