Exemplo n.º 1
0
        public override StateController LeftMouseDownAt(Point point, int times)
        {
            var(closestEllipse, distanceEllipse) = GraphVisual.ClosestEllipseFrom(point);
            var(closestLine, distanceLine)       = GraphVisual.ClosestLineFrom(point);

            var minDistance = Math.Min(distanceLine, distanceEllipse);

            var valueRange = new Range(GraphVisual.NodeWidth / 2.0, GraphVisual.CanvasWidth - GraphVisual.NodeWidth / 2.0);

            if (valueRange.Contains(point.X) && valueRange.Contains(point.Y))
            {
                if (times == 2 && minDistance > GraphVisual.NodeWidth)
                {
                    var nodeValue = Enumerable.Range(1, int.MaxValue).First(x => !GraphVisual.Nodes.ContainsKey(x));
                    GraphVisual.AddNode(nodeValue, point);
                    return(this);
                }
            }

            if (times == 1 && distanceEllipse < GraphVisual.NodeWidth)
            {
                return(StartedLineState.Create(GraphVisual, closestEllipse, point));
            }

            return(this);
        }
Exemplo n.º 2
0
        public override StateController RightMouseDownAt(Point point, int times)
        {
            if (times == 2)
            {
                var(closestEllipse, distanceEllipse) = GraphVisual.ClosestEllipseFrom(point);
                if (distanceEllipse < GraphVisual.NodeWidth / 2)
                {
                    GraphVisual.RemoveNode(GraphVisual.Nodes.GetKeyOf(closestEllipse, ReferenceEquals));
                }
            }

            return(this);
        }
Exemplo n.º 3
0
 public override StateController LeftMouseUpAt(Point point)
 {
     GraphVisual.Canvas.Children.Remove(WorkingLine);
     var(closestEllipse, distance) = GraphVisual.ClosestEllipseFrom(point);
     if (distance < GraphVisual.NodeWidth && closestEllipse != StartingEllipse)
     {
         var startingNode = GraphVisual.Nodes.GetKeyOf(StartingEllipse, ReferenceEquals);
         var endingNode   = GraphVisual.Nodes.GetKeyOf(closestEllipse, ReferenceEquals);
         var edge         = Edge.Create(startingNode, endingNode, Weight);
         if (!GraphVisual.Edges.ContainsKey(edge))
         {
             GraphVisual.AddEdge(edge);
         }
     }
     return(new IdleState(GraphVisual));
 }