/// <summary> /// 自动计算指定端点的相对位置。 /// </summary> private void AutoResetRelativePos() { if (_autoPositionPoints == AutoPositionPoints.None) { return; } var from = Source.GetRect(); var to = Sink.GetRect(); if ((_autoPositionPoints & AutoPositionPoints.Source) != 0) { var toCenter = to.GetCenterPoint(); if (!from.Contains(toCenter)) { var point = RectAlgorithm.CalcCrossPoint(from, toCenter); this._sourceRelativePos = RectAlgorithm.GetRectRelative(from, point); } } if ((_autoPositionPoints & AutoPositionPoints.Sink) != 0) { var fromCenter = from.GetCenterPoint(); if (!to.Contains(fromCenter)) { var point = RectAlgorithm.CalcCrossPoint(to, fromCenter); this._sinkRelativePos = RectAlgorithm.GetRectRelative(to, point); } } }
/// <summary> /// 为某个指定的目标位置导航 /// </summary> /// <param name="source">起始连接器</param> /// <param name="sinkPoint">目标位置</param> /// <param name="preferredOrientation">目标连接器的方向</param> /// <returns></returns> internal List <Point> Route(ConnectorInfo source, ConnectorInfo sink) { var linePoints = new List <Point>(); var start = RectAlgorithm.CalcCrossPoint(source.DesignerItemRect, sink.Position); var end = RectAlgorithm.CalcCrossPoint(sink.DesignerItemRect, source.Position); linePoints.Insert(0, start); linePoints.Add(end); return(linePoints); }