private Rectangle2D Rebuild(List <Rectangle2D> targets) { Rectangle2D rec1 = targets[0]; Rectangle2D rec2 = targets[1]; List <Line2D> recEdges = new List <Line2D> { rec1.Bottom, rec1.Top, rec1.Left, rec1.Right, rec2.Bottom, rec2.Top, rec2.Left, rec2.Right }; List <Line2D> leftLines = new List <Line2D>(); List <Rectangle2D> newRec = new List <Rectangle2D>(targets); List <Line2D> sortedLines = new List <Line2D>(recEdges); foreach (var edge in recEdges) { if (IsRectangleEdge(edge, rec1) && IsRectangleEdge(edge, rec2)) { sortedLines.Remove(edge); } } GraphicAlgorithm.MergeLine(sortedLines); GraphicAlgorithm.HuntCurveByStartPoint(sortedLines, sortedLines.First().Start, leftLines); return(new Rectangle2D(leftLines)); }