Как заставить линию прыгать, как в Visio, если линии пересекаются друг с другом - PullRequest
0 голосов
/ 27 октября 2018

Вот мой код. «Pt1» - это список начальной точки линии, а «Pt2» - это список конечных точек линии. Я уже могу нарисовать линию и определить точки пересечения. Моя единственная проблема - как нарисовать прыжок или кривую / дугу между этими двумя точками.

private void Form1_Paint(object sender, PaintEventArgs e)
{
   e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
   for (int i = 0; i < Pt1.Count; i++)
   {
      try
      {
         bool segments_intersect;
         PointF first = Intersection;
         FindIntersection(Pt1[i], Pt2[i], NewPt1, NewPt2, out LinesIntersect, out segments_intersect, out Intersection, out Close1, out Close2);

         //here is the jump event
         if (segments_intersect)
         {
            Point[] pt =
               {
                  //I would like to know the formula here how to make a curve by adding a points in these line
                  new Point(
                     Convert.ToInt32(
                        first.X * Pt1[i]
                           .X / 2),
                     Convert.ToInt32(first.Y - 5)),
                  new Point(Convert.ToInt32(first.X), Convert.ToInt32(first.Y)),
                  new Point(Convert.ToInt32(first.X - 5), Convert.ToInt32(first.Y - 5)),
               };

            e.Graphics.DrawLine(Pens.Blue, Pt1[i], Pt2[i]);
            e.Graphics.DrawCurve(Pens.Blue, pt);

         }
         else
         {
            //if there is no intersection
            e.Graphics.DrawLine(Pens.Blue, Pt1[i], Pt2[i]);
         }
      }
      catch
      {
         e.Graphics.DrawLine(Pens.Blue, Pt1[i], Pt2[i]);
      }
   }

   if (IsDrawing)
   {
      e.Graphics.DrawLine(Pens.Red, NewPt1, NewPt2);
   }
}

Вот код. У меня уже был класс для пересечения. Моя проблема только в том, как нарисовать кривую в пересекающихся точках.

...