internal override void CalcLink()
{
if (needCalcLink == false) return;
if (lines == null)
return;
LineElement lastLine = lines[lines.Length - 1];
//Otimization - Get prop. value only one time
Point connector1Location = connector1.Location;
Point connector2Location = connector2.Location;
Size connector1Size = connector1.Size;
Size connector2Size = connector2.Size;
lines[0].Point1 = new Point(connector1Location.X + connector1Size.Width / 2, connector1Location.Y + connector1Size.Height / 2);
lastLine.Point2 = new Point(connector2Location.X + connector2Size.Width / 2, connector2Location.Y + connector2Size.Height / 2);
if (lines.Length == 3)
{
if (orientation == Orientation.Horizontal)
{
lines[0].Point2 = new Point(lines[0].Point2.X, lines[0].Point1.Y);
lastLine.Point1 = new Point(lastLine.Point1.X, lastLine.Point2.Y);
lines[1].Point1 = lines[0].Point2;
lines[1].Point2 = lines[2].Point1;
}
else if (orientation == Orientation.Vertical)
{
lines[0].Point2 = new Point(lines[0].Point1.X, lines[0].Point2.Y);
lastLine.Point1 = new Point(lastLine.Point2.X, lastLine.Point1.Y);
lines[1].Point1 = lines[0].Point2;
lines[1].Point2 = lines[2].Point1;
}
}
else if (lines.Length == 2)
{
if ((conn1Dir == CardinalDirection.North) || (conn1Dir == CardinalDirection.South))
lines[0].Point2 = new Point(lines[0].Point1.X, lastLine.Point2.Y);
else
lines[0].Point2 = new Point(lastLine.Point2.X, lines[0].Point1.Y);
lastLine.Point1 = lines[0].Point2;
}
needCalcLinkLocation = true;
needCalcLinkSize = true;
needCalcLink = false;
}