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);
        }