private void PaintBackConnection( Graphics g, Pen pen, Point srcPos, Point tgtPos, ConnectionPoints srcConData, ConnectionPoints tgtConData) { // Line is described by srcPos,a,b,c,d,tgtPos Point a,b,c,d; float gradient; int length; int xDelta, yDelta; //----- Point a. if(tgtPos.X<=srcPos.X) { gradient = (float)Math.Min(1.0, 0.2F + (srcConData.lowerLeft*0.2F)); length = (int)(backConnectionLegLength + (backConnectionLegLength*srcConData.lowerLeft*0.05)); xDelta = -(int)(length * (1.0F - gradient)); yDelta = (int)(length * gradient); } else { gradient = (float)Math.Min(1.0, 0.2F + (srcConData.lowerRight*0.2F)); //0.23 length = (int)(backConnectionLegLength + (backConnectionLegLength*srcConData.lowerRight*0.05)); xDelta = (int)(length * (1.0F - gradient)); yDelta = (int)(length * gradient); } a = new Point(srcPos.X+xDelta, srcPos.Y+yDelta); //----- Point b. if(tgtPos.X<=srcPos.X) { length = (int)(backConnectionLegLength/4.0F + (backConnectionLegLength*srcConData.lowerLeft*0.6)); b = new Point(a.X-length,a.Y); srcConData.lowerLeft++; } else { length = (int)(backConnectionLegLength/4.0F + (backConnectionLegLength*srcConData.lowerRight*0.6)); b = new Point(a.X+length,a.Y); srcConData.lowerRight++; } //----- Point d. if(srcPos.X>tgtPos.X) { gradient = (float)Math.Min(1.0, 0.2F + (tgtConData.upperRight*0.2F)); length = (int)(backConnectionLegLength + (backConnectionLegLength*srcConData.upperRight*0.05)); xDelta = (int)(length * (1.0F - gradient)); yDelta = -(int)(length * gradient); } else { gradient = (float)Math.Min(1.0, 0.2F + (tgtConData.upperLeft*0.2F)); length = (int)(backConnectionLegLength + (backConnectionLegLength*srcConData.upperLeft*0.05)); xDelta = -(int)(length * (1.0F - gradient)); yDelta = -(int)(length * gradient); } d = new Point(tgtPos.X+xDelta, tgtPos.Y+yDelta); //----- Point c. if(srcPos.X>tgtPos.X) { length = (int)(backConnectionLegLength/4.0F + (backConnectionLegLength*tgtConData.upperRight*0.6)); c = new Point(d.X+length,d.Y); tgtConData.upperRight++; } else { length = (int)(backConnectionLegLength/4.0F + (backConnectionLegLength*srcConData.upperLeft*0.6)); c = new Point(d.X-length,d.Y); tgtConData.upperLeft++; } //----- Paint the lines. g.DrawLines(pen, new Point[]{srcPos,a,b,c,d,tgtPos}); // g.DrawLine(pen, srcPos, a); // g.DrawLine(pen, a, b); // g.DrawLine(pen, b, c); // g.DrawLine(pen, d, c); // g.DrawLine(pen, tgtPos, d); }
private void PaintBackConnection(Graphics g, Pen pen, Point srcPos, Point tgtPos, ConnectionPoints srcConData, ConnectionPoints tgtConData) { // Line is described by srcPos,a,b,c,d,tgtPos Point a, b, c, d; float gradient; int length; int xDelta, yDelta; //----- Point a. if (tgtPos.X <= srcPos.X) { gradient = (float)Math.Min(1.0, 0.2F + (srcConData.lowerLeft * 0.23F)); length = (int)(backConnectionLegLength + (backConnectionLegLength * srcConData.lowerLeft * 0.05)); xDelta = -(int)(length * (1.0F - gradient)); yDelta = (int)(length * gradient); } else { gradient = (float)Math.Min(1.0, 0.2F + (srcConData.lowerRight * 0.23F)); length = (int)(backConnectionLegLength + (backConnectionLegLength * srcConData.lowerRight * 0.05)); xDelta = (int)(length * (1.0F - gradient)); yDelta = (int)(length * gradient); } a = new Point(srcPos.X + xDelta, srcPos.Y + yDelta); //----- Point b. if (tgtPos.X <= srcPos.X) { length = (int)(backConnectionLegLength / 4.0F + (backConnectionLegLength * srcConData.lowerLeft * 0.6)); b = new Point(a.X - length, a.Y); srcConData.lowerLeft++; } else { length = (int)(backConnectionLegLength / 4.0F + (backConnectionLegLength * srcConData.lowerRight * 0.6)); b = new Point(a.X + length, a.Y); srcConData.lowerRight++; } //----- Point d. if (srcPos.X > tgtPos.X) { gradient = (float)Math.Min(1.0, 0.2F + (tgtConData.upperRight * 0.23F)); length = (int)(backConnectionLegLength + (backConnectionLegLength * srcConData.upperRight * 0.05)); xDelta = (int)(length * (1.0F - gradient)); yDelta = -(int)(length * gradient); } else { gradient = (float)Math.Min(1.0, 0.2F + (tgtConData.upperLeft * 0.23F)); length = (int)(backConnectionLegLength + (backConnectionLegLength * srcConData.upperLeft * 0.05)); xDelta = -(int)(length * (1.0F - gradient)); yDelta = -(int)(length * gradient); } d = new Point(tgtPos.X + xDelta, tgtPos.Y + yDelta); //----- Point c. if (srcPos.X > tgtPos.X) { length = (int)(backConnectionLegLength / 4.0F + (backConnectionLegLength * tgtConData.upperRight * 0.6)); c = new Point(d.X + length, d.Y); tgtConData.upperRight++; } else { length = (int)(backConnectionLegLength / 4.0F + (backConnectionLegLength * srcConData.upperLeft * 0.6)); c = new Point(d.X - length, d.Y); tgtConData.upperLeft++; } //----- Paint the lines. g.DrawLines(pen, new Point[] { srcPos, a, b, c, d, tgtPos }); // g.DrawLine(pen, srcPos, a); // g.DrawLine(pen, a, b); // g.DrawLine(pen, b, c); // g.DrawLine(pen, d, c); // g.DrawLine(pen, tgtPos, d); }