Beispiel #1
0
            public void AddUIGraphWayWithUnmark(UIGraphWay way)
            {
                AddUIGraphWay(way);

                way.To.Unmark();
                way.From.Unmark();
            }
Beispiel #2
0
        private void graphCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            UIGraphNode underMouseUIGraphNode = graphCanvas.GetUnderMouseUIGraphNode();
            UIGraphWay  underMouseUIGraphWay  = graphCanvas.GetUnderMouseUIGraphWay();

            if (underMouseUIGraphWay == null)
            {
                if (underMouseUIGraphNode == null)
                {
                    graphCanvas.AddUIGraphNode(new UIGraphNode(e.GetPosition(graphCanvas)));

                    HistorySnapshop();
                }
                else
                {
                    graphCanvas.Draging       = underMouseUIGraphNode;
                    graphCanvas.DragingOffset = new Point(e.GetPosition(graphCanvas).X - underMouseUIGraphNode.GetCenter().X, e.GetPosition(graphCanvas).Y - underMouseUIGraphNode.GetCenter().Y);
                    graphCanvas.Draging.CaptureMouse();
                }
            }
            else
            {
                var wayEditor = new WayEditorWindow(underMouseUIGraphWay);

                wayEditor.Owner = this;
                wayEditor.ShowDialog();

                if (wayEditor.Modified)
                {
                    underMouseUIGraphWay.Update();

                    HistorySnapshop();
                }
            }
        }
Beispiel #3
0
            public void AddUIGraphWay(UIGraphWay way)
            {
                if (Graph.FindWay(way.From, way.To, true) == null)
                {
                    var reverseWay = Graph.FindWay(way.To, way.From, true);

                    if (reverseWay != null)
                    {
                        // make a non-oriented way, because exist way From->To and To->From
                        RemoveUIGraphWay(reverseWay as UIGraphWay);
                        AddUIGraphWay(new UIGraphWay(way.From, way.To, false));
                    }
                    else
                    {
                        Graph.AddWay(way);
                        DrawGraph();
                    }
                }
            }
Beispiel #4
0
            public void LoadFromGraph(Graph graph)
            {
                // предотвращаем ошибки из за загрузки из себя же
                if (this == graph)
                {
                    return;
                }

                Clear();

                var nodeDictionary = new Dictionary <GraphNode, UIGraphNode>();

                foreach (GraphNode node in graph.Nodes)
                {
                    var newNode = new UIGraphNode(node.Position, node.Name, node.Info);
                    nodeDictionary[node] = newNode;

                    AddNode(newNode);
                }

                for (int i = 0; i < graph.MarkedNodes.Count; i++)
                {
                    nodeDictionary[graph.MarkedNodes[i]].Style = graph.MarkedNodes[i].Style;
                }

                foreach (GraphWay way in graph.Ways)
                {
                    var newWay = new UIGraphWay(nodeDictionary[way.From], nodeDictionary[way.To], way.Oriented);

                    if (!way.WeightIsLen)
                    {
                        newWay.WeightIsLen = false;
                        newWay.Weight      = way.Weight;
                    }
                    newWay.Style = way.Style;

                    AddWay(newWay);
                }
            }
Beispiel #5
0
        private void graphCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            UIGraphNode underMouseUIGraphNode = graphCanvas.GetUnderMouseUIGraphNode();
            UIGraphWay  underMouseUIGraphWay  = graphCanvas.GetUnderMouseUIGraphWay();

            if (underMouseUIGraphNode != null)
            {
                if (underMouseUIGraphNode.ToggleMark()) // если вернется true значит вершина помечается, иначе пометка снимается
                {
                    if (AutomatAddWayMode.IsChecked && Commands.AppCommands.AddWay.CanExecute(null, this))
                    {
                        Commands.AppCommands.AddWay.Execute(null, this);
                    }
                }

                HistorySnapshop();
            }
            else if (underMouseUIGraphWay != null)
            {
                graphCanvas.RemoveUIGraphWay(underMouseUIGraphWay);

                HistorySnapshop();
            }
        }
Beispiel #6
0
            public void RemoveUIGraphWay(UIGraphWay way)
            {
                Graph.RemoveWay(way);

                DrawGraph(true);
            }