public IPoint OffSetPointForArrow(IPoint point, ConnectorDirectionEnum direction) { switch (direction) { case ConnectorDirectionEnum.Left: return(new Point(point.X + ARROW_LN, point.Y)); case ConnectorDirectionEnum.Right: return(new Point(point.X - ARROW_LN, point.Y)); case ConnectorDirectionEnum.Up: return(new Point(point.X, point.Y + ARROW_LN)); case ConnectorDirectionEnum.Down: return(new Point(point.X, point.Y - ARROW_LN)); } return(point); }
public IEnumerable <IPoint> GenerateArrow(IPoint p, ConnectorDirectionEnum direction) { switch (direction) { case ConnectorDirectionEnum.Left: yield return(new Point(p.X, p.Y - ARROW_LN)); yield return(new Point(p.X - ARROW_LN, p.Y)); yield return(new Point(p.X, p.Y + ARROW_LN)); break; case ConnectorDirectionEnum.Right: yield return(new Point(p.X, p.Y - ARROW_LN)); yield return(new Point(p.X + ARROW_LN, p.Y)); yield return(new Point(p.X, p.Y + ARROW_LN)); break; case ConnectorDirectionEnum.Up: yield return(new Point(p.X - ARROW_LN, p.Y)); yield return(new Point(p.X, p.Y - ARROW_LN)); yield return(new Point(p.X + ARROW_LN, p.Y)); break; case ConnectorDirectionEnum.Down: yield return(new Point(p.X - ARROW_LN, p.Y)); yield return(new Point(p.X, p.Y + ARROW_LN)); yield return(new Point(p.X + ARROW_LN, p.Y)); break; } }
private IEnumerable <IPoint> GeneratePath(IPoint start, IPoint end, ConnectorDirectionEnum dirStart, ConnectorDirectionEnum dirEnd) { yield return(start); if (dirStart == dirEnd) { if (dirStart == ConnectorDirectionEnum.Right || dirStart == ConnectorDirectionEnum.Left) { var halfDeltaX = (end.X - start.X) / 2; yield return(new Point(start.X + halfDeltaX, start.Y)); yield return(new Point(start.X + halfDeltaX, end.Y)); } if (dirStart == ConnectorDirectionEnum.Up || dirStart == ConnectorDirectionEnum.Down) { var halfDeltaY = (end.Y - start.Y) / 2; yield return(new Point(start.X, start.Y + halfDeltaY)); yield return(new Point(end.X, start.Y + halfDeltaY)); } } yield return(end); }