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
        void thumbDragThumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            Point mouse = Mouse.GetPosition(this);

            if (!_changeTarget)
            {
                //拖拽的量比较大,则进入变更目标模式
                if (_designerCanvas.CanChangeConnection && LeftDraggingItem(mouse))
                {
                    _changeTarget       = true;
                    _rawStrokeDashArray = _connection.StrokeDashArray;
                    this._connection.StrokeDashArray = ChangeTargetLineStrokeDashArray;
                }
            }

            if (!_changeTarget)
            {
                //小幅度在元素的边上移动
                var rect     = _draggingItem.GetRect();
                var point    = RectAlgorithm.NearestPointOnLine(rect, mouse);
                var relative = RectAlgorithm.GetRectRelative(rect, point);

                if (_connection.Source == _draggingItem)
                {
                    _connection.SourceRelativePos = relative;
                }
                else
                {
                    _connection.SinkRelativePos = relative;
                }
            }
            else
            {
                this.HitTesting(mouse);

                //变换目标时,需要绘制一根临时的连接连
                var start = _connection.Source == _startItem ? _connection.SourceConnectorInfo : _connection.SinkConnectorInfo;
                this._pathGeometry = PathHelper.DarwGeometry(start, mouse);
            }

            this.InvalidateVisual();
        }