/// <summary> /// Is point hit by U, V coordinates /// </summary> /// <returns></returns> private bool IsHitByUV(Vertex v, Point p) { Point s = Math2DTools.GetUV(v); Rectangle r = new Rectangle(new Point(s.X - 5, s.Y - 5), new Size(10, 10)); return(r.Contains(p)); }
/// <summary> /// Draw method /// </summary> /// <param name="g">Grahpics context</param> public void Draw(Graphics g) { // draw the actual bezier curve points List <Vertex> bcp = DeCasteljau.Points(controlPoints, 0.01); if (bcp == null) { return; } // draw interconnections between control points for (int i = 0; i < controlPoints.Count - 1; i++) { g.DrawLine(Pens.Black, Math2DTools.GetUV(controlPoints[i]), Math2DTools.GetUV(controlPoints[i + 1])); } // draw draw control points using (var f = new Font("Arial", 10)) { Rectangle rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[0]).X - 5, Math2DTools.GetUV(controlPoints[0]).Y - 5), new Size(10, 10)); g.FillRectangle(Brushes.Green, rect); g.DrawRectangle(Pens.Black, rect); g.DrawString("V start", f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10)); rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[controlPoints.Count - 1]).X - 5, Math2DTools.GetUV(controlPoints[controlPoints.Count - 1]).Y - 5), new Size(10, 10)); g.FillRectangle(Brushes.Green, rect); g.DrawRectangle(Pens.Black, rect); g.DrawString("V end", f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10)); for (int i = 1; i < controlPoints.Count - 1; i++) { rect = new Rectangle(new Point(Math2DTools.GetUV(controlPoints[i]).X - 5, Math2DTools.GetUV(controlPoints[i]).Y - 5), new Size(10, 10)); g.FillRectangle(Brushes.DarkOrange, rect); g.DrawRectangle(Pens.Black, rect); g.DrawString("C" + i.ToString(), f, Brushes.Black, new Point(rect.X + 10, rect.Y + 10)); } } // draw red dots of points of bezier curve foreach (var p in bcp) { var transformedPoint = Math2DTools.GetUV(p); g.FillRectangle(Brushes.Red, new Rectangle(transformedPoint.X, transformedPoint.Y, 2, 2)); } }
/// <summary> /// Draw /// </summary> /// <param name="g">Graphics object</param> public void Draw(Graphics g) { bool first = true; foreach (var abscissa in indexBuffer) { using (Pen p = new Pen(Color.Red, 2)) { var pStart = Math2DTools.GetUV(vertexBuffer[abscissa.PointStartID]); var pEnd = Math2DTools.GetUV(vertexBuffer[abscissa.PointEndID]); if (first) { first = false; g.DrawLine(p, pStart, pEnd); } else { p.Color = Color.Black; g.DrawLine(p, pStart, pEnd); } } } }