示例#1
0
文件: Edge.cs 项目: Raz1el/FSMProject
        private void Target_PositionChanged(object sender, VertexMoveEventArg e)
        {
            if (!_isSelfLoop)
            {
                var p1 = GetPosition(Source);
                var p2 = GetPosition(Target);



                var offset = new Vector(p2.X - p1.X, p2.Y - p1.Y);
                offset.Normalize();
                offset = offset * Target.Width / 2;

                Arrow.X1 = p1.X + offset.X;
                Arrow.Y1 = p1.Y + offset.Y;
                Arrow.X2 = p2.X - offset.X;
                Arrow.Y2 = p2.Y - offset.Y;

                if (p1.X < p2.X)
                {
                    Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2);
                }
                else
                {
                    Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2 - 2 * MarkOffsetY);
                }
                Canvas.SetLeft(EdgeTag, (p1.X + p2.X) / 2 - MarkOffsetY);
            }
        }
示例#2
0
文件: Edge.cs 项目: Raz1el/FSMProject
        private void Source_PositionChanged(object sender, VertexMoveEventArg e)
        {
            if (!_isSelfLoop)
            {
                var p1 = GetPosition(Source);
                var p2 = GetPosition(Target);



                var offset = new Vector(p2.X - p1.X, p2.Y - p1.Y);
                offset.Normalize();
                offset = offset * Source.Width / 2;

                Arrow.X1 = p1.X + offset.X;
                Arrow.Y1 = p1.Y + offset.Y;
                Arrow.X2 = p2.X - offset.X;
                Arrow.Y2 = p2.Y - offset.Y;


                if (p1.X < p2.X)
                {
                    Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2);
                }
                else
                {
                    Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2 - 2 * MarkOffsetY);
                }
                Canvas.SetLeft(EdgeTag, (p1.X + p2.X) / 2 - MarkOffsetY);
            }
            else
            {
                Arrow.X1 += e.Offset.X;
                Arrow.Y1 += e.Offset.Y;
                Arrow.X2 += e.Offset.X;
                Arrow.Y2 += e.Offset.Y;

                var position = VisualTreeHelper.GetOffset(SelfLoopPath);
                Canvas.SetLeft(SelfLoopPath, position.X + e.Offset.X);
                Canvas.SetTop(SelfLoopPath, position.Y + e.Offset.Y);

                var markPosition = VisualTreeHelper.GetOffset(EdgeTag);
                Canvas.SetLeft(EdgeTag, markPosition.X + e.Offset.X);
                Canvas.SetTop(EdgeTag, markPosition.Y + e.Offset.Y);
            }
        }