//protected override void OnPaint(PaintEventArgs e) //{ // Graphics graphics = PolygonPanel.CreateGraphics(); // Brush blackpen = new SolidBrush(Color.Black); // Pen pen = new Pen(blackpen, 1); // Point[] point = new Point[6]; // point[0] = polygon.PointOne; // point[1] = polygon.PointTwo; // point[2] = polygon.PointThree; // point[3] = polygon.PointFour; // point[4] = polygon.PointFive; // point[5] = polygon.PointSix; // graphics.DrawPolygon(pen,point); // //base.OnPaint(e); //} protected override void OnPaint(PaintEventArgs e) { System.Drawing.Graphics graphics = PolygonPanel.CreateGraphics(); Brush blackpen = new SolidBrush(Color.Black); Pen pen = new Pen(blackpen, 1); Point[] point = new Point[6]; int cx = (int)circle.CentreX, cy = (int)circle.CentreX; int R = (int)circle.Radius, N = 6; for (int i = 0; i < 6; i++) { point[i].X = (int)(cx + R * Math.Cos(Math.PI / N * (1 + 2 * i))); point[i].Y = (int)(cy + R * Math.Sin(Math.PI / N * (1 + 2 * i))); } graphics.DrawPolygon(pen, point); //int cx = 550, cy = 550; //int R = 100, N = 6; //int[,] points = new int[6, 2]; //for (int i = 0; i < 6; i++) //{ // points[i, 0] = (int)(cx + R * Math.Cos(Math.PI / N * (1 + 2 * i))); // points[i, 1] = (int)(cy + R * Math.Sin(Math.PI / N * (1 + 2 * i))); // //po // //graphics. // //base.OnPaint(e); //} }
private void ClearButton_Click(object sender, EventArgs e) { PolygonPanel.Invalidate(); _points = new List <PointF>(); _polygonTops = new List <Vertex>(); Coordinates.Text = string.Empty; }
private void TriangulateButton_Click(object sender, EventArgs e) { Graphics g = PolygonPanel.CreateGraphics(); var polygon = new Polygon(_polygonTops); var triangulator = new Triangulator(polygon); polygon = triangulator.Triangulate(); int i = 0; foreach (var triangle in polygon.Triangles) { int j = 0; var points = new PointF[3]; foreach (Vertex top in triangle.Tops) { points[j] = new PointF((float)top.X, (float)top.Y); j++; } g.DrawPolygon(new Pen(new SolidBrush(Color.Black), 2), points); g.FillPolygon(new SolidBrush(_colorsForTriangles[i]), points); i++; i = i % 3 == 0 ? 0 : i; foreach (var point in points) { g.FillEllipse(new SolidBrush(Color.Yellow), point.X - 3, point.Y - 3, 6, 6); } //var triangleCentroid = triangle.GetCentroidForTops(); //g.FillEllipse(new SolidBrush(Color.Black), (float)triangleCentroid.X - 3, (float)triangleCentroid.Y - 3, 6, 6); } // _polygonTops = new List<Vertex>(); }
private void PolygonPanel_MouseDown(object sender, MouseEventArgs e) { var point = new Point(e.X, e.Y); var color = new SolidBrush(Color.Red); Graphics g = PolygonPanel.CreateGraphics(); g.FillEllipse(color, point.X - 2.5f, point.Y - 2.5f, 5, 5); _polygonTops.Add(new Vertex(point.X, point.Y)); Coordinates.Text += $"X: {e.X}, Y:{e.Y}\n"; if (_points.Count > 0) { g.DrawLine(new Pen(new SolidBrush(Color.Black)), point, _points.Last()); } _points.Add(e.Location); if (_points.Count >= 2) { TriangulateButton.Enabled = true; } }
private void TriangulateButton_Click(object sender, EventArgs e) { Graphics g = PolygonPanel.CreateGraphics(); var polygon = new Polygon(_polygonTops); var triangulator = new Triangulator(polygon); polygon = triangulator.Triangulate(); int i = 0; foreach (var triangle in polygon.Triangles) { int j = 0; var points = new PointF[3]; foreach (Vertex top in triangle.Tops) { points[j] = new PointF((float)top.X, (float)top.Y); j++; } g.DrawPolygon(new Pen(new SolidBrush(Color.Black), 2), points); g.FillPolygon(new SolidBrush(_colorsForTriangles[i]), points); i++; i = i % 3 == 0 ? 0 : i; foreach (var point in points) { g.FillEllipse(new SolidBrush(Color.Yellow), point.X - 3, point.Y - 3, 6, 6); } var triangleCentroid = triangle.GetCentroidForTops(); g.FillEllipse(new SolidBrush(Color.Black), (float)triangleCentroid.X - 3, (float)triangleCentroid.Y - 3, 6, 6); } var centrForFrame = polygon.GetCentroidForFrame(); var centrForBody = polygon.GetCentroidForBody(); var centrForTops = polygon.GetCentroidForTops(); g.FillEllipse(new SolidBrush(Color.YellowGreen), (float)centrForTops.X - 7, (float)centrForTops.Y - 7, 14, 14); g.FillEllipse(new SolidBrush(Color.Black), (float)centrForBody.X - 6, (float)centrForBody.Y - 6, 12, 12); g.FillEllipse(new SolidBrush(Color.Violet), (float)centrForFrame.X - 5, (float)centrForFrame.Y - 5, 10, 10); _polygonTops = new List <Vertex>(); }