Exemple #1
0
        /// <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);
                }
            }
        }
Exemple #2
0
        /// <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);
        }