/// <summary>
        /// Создает ребро и его визуальную часть.
        /// </summary>
        /// <param name="targetVertex">Вершина, инцидентная ребру.</param>
        private void CreateEdgeControl(VertexControl targetVertex)
        {
            if (sourceVertex == null)
            {
                sourceVertex = targetVertex;
                HighlightBehaviour.SetHighlighted(sourceVertex, true);
                return;
            }
            if (sourceVertex == targetVertex)
            {
                return;
            }
            if (!isUniqueEdge(sourceVertex, targetVertex))
            {
                return;
            }

            var dlg = new AddEdgeWigthDialog(this);

            if (dlg.ShowDialog() == false)
            {
                return;
            }

            double weidthR = dlg.RoadLength;

            var data    = new DataEdge((DataVertex)sourceVertex.Vertex, (DataVertex)targetVertex.Vertex, weidthR);
            var control = new EdgeControl(sourceVertex, targetVertex, data);

            graphArea.InsertEdgeAndData(data, control, 0, false);

            HighlightBehaviour.SetHighlighted(sourceVertex, false);
            sourceVertex = null;
        }
Example #2
0
        private void CreateEdgeControl(VertexControl vc)
        {
            if (_ecFrom == null)
            {
                _editorManager.CreateVirtualEdge(vc, vc.GetPosition());
                _ecFrom = vc;
                HighlightBehaviour.SetHighlighted(_ecFrom, true);
                return;
            }
            if (_ecFrom == vc)
            {
                return;
            }

            var data = new DataEdge((DataVertex)_ecFrom.Vertex, (DataVertex)vc.Vertex);

            graphArea.LogicCore.Graph.AddEdge(data);
            var ec = new EdgeControl(_ecFrom, vc, data);

            graphArea.InsertEdge(data, ec);

            HighlightBehaviour.SetHighlighted(_ecFrom, false);
            _ecFrom = null;
            _editorManager.DestroyVirtualEdge();
        }
Example #3
0
        private void calculateMinSpanTreePrim()
        {
            for (var i = 0; i < edgeCollection.Count; i++)
            {
                edgeCollection[i].index = i;
            }

            var pathTable = graphToTable();

            resetEdgesHighligh();

            Prim       prim        = new Prim();
            List <int> resultEdges = prim.main(edgeCollection, pathTable, nodeCollection.Nodes.Count);

            foreach (var edge in resultEdges)
            {
                Console.WriteLine("Result edge: " + edge);
            }

            foreach (var edgeIndex in resultEdges)
            {
                highlightTheEdge(edgeCollection[edgeIndex].srcNode, edgeCollection[edgeIndex].destNode);
                highlightTheEdge(edgeCollection[edgeIndex].destNode, edgeCollection[edgeIndex].srcNode);
            }

            foreach (var vertex in _gArea.VertexList)
            {
                HighlightBehaviour.SetHighlighted(vertex.Value, true);
            }

            totalJarak = prim.totalJarak;
        }
        private void UpdateIsInEditing(bool value)
        {
            if (View == null)
            {
                return;
            }

            var area            = View.Area;
            var highlightEnable = !value;
            var highlighted     = false;

            foreach (var v in area.VertexList)
            {
                v.Key.IsEditing = value;
                //if (value)
                //{
                //    v.Key.ChangedCommited += ChangedCommited;
                //}
                //else
                //{
                //    v.Key.ChangedCommited -= ChangedCommited;
                //}

                HighlightBehaviour.SetIsHighlightEnabled(v.Value, highlightEnable);
                HighlightBehaviour.SetHighlighted(v.Value, highlighted);
            }

            foreach (var edge in area.EdgesList)
            {
                HighlightBehaviour.SetIsHighlightEnabled(edge.Value, highlightEnable);
                HighlightBehaviour.SetHighlighted(edge.Value, highlighted);
            }
        }
        private void UpdateHighlightBehaviour(bool clearSelectedVertices)
        {
            if (clearSelectedVertices)
            {
                _selectedVertices.Clear();
            }

            if (tbtnCanEdit.IsChecked.Value)
            {
                foreach (var v in Area.VertexList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(v.Value, false);
                    HighlightBehaviour.SetHighlighted(v.Value, false);
                }
                foreach (var edge in Area.EdgesList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(edge.Value, false);
                    HighlightBehaviour.SetHighlighted(edge.Value, false);
                }
            }
            else
            {
                foreach (var v in Area.VertexList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(v.Value, true);
                    HighlightBehaviour.SetHighlighted(v.Value, false);
                }
                foreach (var edge in Area.EdgesList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(edge.Value, true);
                    HighlightBehaviour.SetHighlighted(edge.Value, false);
                }
            }
        }
 /// <summary>
 /// Очищает режим создания.
 /// </summary>
 private void ClearCreateMode()
 {
     if (sourceVertex != null)
     {
         HighlightBehaviour.SetHighlighted(sourceVertex, false);
     }
     sourceVertex = null;
 }
Example #7
0
 private void ClearEditMode()
 {
     if (_ecFrom != null)
     {
         HighlightBehaviour.SetHighlighted(_ecFrom, false);
     }
     _editorManager.DestroyVirtualEdge();
     _ecFrom = null;
 }
Example #8
0
        private void highlightTheEdge(Nodes currentNode, Nodes nextNode)
        {
            Neighbor currentNeighbor = null;

            currentNeighbor = currentNode.getNeighborByName(nextNode.name);

            if (currentNeighbor != null)
            {
                HighlightBehaviour.SetHighlighted(_gArea.EdgesList[currentNeighbor.edge], true);
            }
        }
Example #9
0
        private void resetEdgesHighligh()
        {
            foreach (var edge in _gArea.EdgesList)
            {
                HighlightBehaviour.SetHighlighted(edge.Value, false);
            }

            foreach (var vertex in _gArea.VertexList)
            {
                HighlightBehaviour.SetHighlighted(vertex.Value, false);
            }
        }
Example #10
0
 private static void SelectVertex(DependencyObject vc)
 {
     if (DragBehaviour.GetIsTagged(vc))
     {
         HighlightBehaviour.SetHighlighted(vc, false);
         DragBehaviour.SetIsTagged(vc, false);
     }
     else
     {
         HighlightBehaviour.SetHighlighted(vc, true);
         DragBehaviour.SetIsTagged(vc, true);
     }
 }
Example #11
0
 private void SelectVertex(VertexControl vc)
 {
     if (_selectedVertices.Contains(vc))
     {
         _selectedVertices.Remove(vc);
         HighlightBehaviour.SetHighlighted(vc, false);
         DragBehaviour.SetIsTagged(vc, false);
     }
     else
     {
         _selectedVertices.Add(vc);
         HighlightBehaviour.SetHighlighted(vc, true);
         DragBehaviour.SetIsTagged(vc, true);
     }
 }
Example #12
0
        /// <summary>
        /// Очищает режим выделения.
        /// </summary>
        /// <param name="soft"></param>
        private void ClearSelectMode(bool soft = false)
        {
            graphArea.VertexList.Values
            .Where(DragBehaviour.GetIsTagged)
            .ToList()
            .ForEach(a =>
            {
                HighlightBehaviour.SetHighlighted(a, false);
                DragBehaviour.SetIsTagged(a, false);
            });

            if (!soft)
            {
                graphArea.SetVerticesDrag(false);
            }
        }
Example #13
0
 private void ClearSelectMode(bool soft = false)
 {
     if (_selectedVertices != null && _selectedVertices.Any())
     {
         _selectedVertices.ForEach(a =>
         {
             HighlightBehaviour.SetHighlighted(a, false);
             DragBehaviour.SetIsTagged(a, false);
         });
         _selectedVertices.Clear();
     }
     if (!soft)
     {
         graphArea.SetVerticesDrag(false);
     }
 }
Example #14
0
 /// <summary>
 /// Select vertex by setting its tag and highlight value
 /// </summary>
 /// <param name="vc">VertexControl object</param>
 private void SelectVertex(DependencyObject vc)
 {
     if (DragBehaviour.GetIsTagged(vc))
     {
         HighlightBehaviour.SetHighlighted(vc, false);
         DragBehaviour.SetIsTagged(vc, false);
         vc.ClearValue(DragBehaviour.XSnapModifierProperty);
         vc.ClearValue(DragBehaviour.YSnapModifierProperty);
     }
     else
     {
         HighlightBehaviour.SetHighlighted(vc, true);
         DragBehaviour.SetIsTagged(vc, true);
         DragBehaviour.SetXSnapModifier(vc, ExaggeratedSnappingXModifier);
         DragBehaviour.SetYSnapModifier(vc, ExaggeratedSnappingYModifier);
     }
 }
Example #15
0
        private void highlightPath(List <int> indexs)
        {
            if (indexs == null)
            {
                return;
            }

            Console.WriteLine("indexs:");
            foreach (var ind in indexs)
            {
                Console.WriteLine("indexs: " + ind);
            }
            _gArea.SetVerticesHighlight(false, (GraphControlType)1);

            foreach (var edge in _gArea.EdgesList)
            {
                HighlightBehaviour.SetHighlighted(edge.Value, false);
            }

            var index       = 0;
            var currentNode = nodeCollection.Nodes[0];
            var nextNode    = nodeCollection.Nodes[0];

            for (int i = 0; i < indexs.Count; i++)
            {
                index       = indexs[i];
                currentNode = nodeCollection.Nodes[index];

                Console.WriteLine("Current Node: " + currentNode.name);

                if (i + 1 < indexs.Count)
                {
                    nextNode = nodeCollection.Nodes[indexs[i + 1]];

                    highlightTheEdge(currentNode, nextNode);
                    highlightTheEdge(nextNode, currentNode);
                }

                HighlightBehaviour.SetHighlighted(_gArea.VertexList[currentNode.vertex], true);
            }
        }
Example #16
0
        private void calculateMinSpanTreeBoruvka()
        {
            resetEdgesHighligh();

            List <Edge> validEdges = new List <Edge>();
            List <Edge> usedEdges  = new List <Edge>();

            foreach (var edge in edgeCollection)
            {
                if (!isInUsedEdgelist(edge.src, edge.dest, usedEdges))
                {
                    validEdges.Add(edge);
                    validEdges[validEdges.Count - 1].index = validEdges.Count - 1;
                    usedEdges.Add(edge);
                }
            }

            Boruvka boruvka = new Boruvka();

            List <int> resultEdges = boruvka.start(validEdges, nodeCollection.Nodes.Count, validEdges.Count);

            foreach (var edge in validEdges)
            {
                Console.WriteLine("Valid edges: " + edge.index);
            }

            foreach (var edgeIndex in resultEdges)
            {
                highlightTheEdge(validEdges[edgeIndex].srcNode, validEdges[edgeIndex].destNode);
                highlightTheEdge(validEdges[edgeIndex].destNode, validEdges[edgeIndex].srcNode);
            }

            foreach (var vertex in _gArea.VertexList)
            {
                HighlightBehaviour.SetHighlighted(vertex.Value, true);
            }

            totalJarak = boruvka.totalJarak;
        }
        private void SelectVertex(VertexControl vc)
        {
            var v = vc.Vertex as DataVertex;

            if (v == null)
            {
                return;
            }

            if (_selectedVertices.Contains(v.Id))
            {
                _selectedVertices.Remove(v.Id);
                HighlightBehaviour.SetHighlighted(vc, false);
                //DragBehaviour.SetIsTagged(vc, false);
            }
            else
            {
                _selectedVertices.Add(v.Id);
                HighlightBehaviour.SetHighlighted(vc, true);
                //DragBehaviour.SetIsTagged(vc, true);
            }
        }
        private void CreateVertex(GraphArea area, ZoomControl zoom, DataVertex data = null, double x = double.MinValue, double y = double.MinValue)
        {
            _viewmodel.Do(new CreateVertexOperation(Area, data, x, y,
                                                    (v, vc) =>
            {
                _selectedVertices.Add(v.Id);

                //area.RelayoutGraph(true);

                UpdateHighlightBehaviour(false);

                foreach (var selectedV in _selectedVertices)
                {
                    var localvc = area.VertexList.Where(pair => pair.Key.Id == selectedV).Select(pair => pair.Value).FirstOrDefault();
                    HighlightBehaviour.SetHighlighted(localvc, true);
                }

                if (tbtnCanDrag.IsChecked.Value)
                {
                    DragBehaviour.SetIsDragEnabled(vc, true);
                }
                else
                {
                    DragBehaviour.SetIsDragEnabled(vc, false);
                }

                v.IsEditing          = true;
                v.OnPositionChanged -= v_OnPositionChanged;
                v.OnPositionChanged += v_OnPositionChanged;
            },
                                                    (v) =>
            {
                _selectedVertices.Remove(v.Id);
                //on vertex recreated
            }));
            //FitToBounds(area.Dispatcher, zoom);
        }
        public void CreateEdge(int fromId, int toId)
        {
            if (View == null)
            {
                return;
            }

            var area   = View.Area;
            var source = area.VertexList.Where(pair => pair.Key.Id == fromId).Select(pair => pair.Key).FirstOrDefault();
            var target = area.VertexList.Where(pair => pair.Key.Id == toId).Select(pair => pair.Key).FirstOrDefault();

            if (source == null || target == null)
            {
                return;
            }

            Do(new CreateEdgeOperation(area, source, target,
                                       (e) =>
            {
                //on vertex created
                //_selectedVertices.Add(v.Id);

                HighlightBehaviour.SetIsHighlightEnabled(e, false);
                HighlightBehaviour.SetHighlighted(e, false);

                HighlightBehaviour.SetHighlighted(area.VertexList[source], false);
                HighlightBehaviour.SetHighlighted(area.VertexList[target], false);

                //UpdateIsInEditing(true);
            },
                                       (e) =>
            {
                //_selectedVertices.Remove(v.Id);
                //on vertex recreated
            }));
        }
        public void ConnectEdges(VertexControl vc, double length = 0)
        {
            if (_ecFrom == null)
            {
                CreateVirtualEdge(vc, vc.GetPosition());
                _ecFrom = vc;
                HighlightBehaviour.SetHighlighted(_ecFrom, true);
                return;
            }

            if (_ecFrom == vc)
            {
                return;
            }

            if ((DataVertex)_ecFrom.Vertex == null)
            {
                return;
            }

            var data = new DataEdge((DataVertex)_ecFrom.Vertex, (DataVertex)vc.Vertex);

            data.Length = length;

            //if (graphState == GraphState.PARTIAL_CONNECTING)
            //{

            //    if ((_ecFrom.Vertex as DataVertex).typeOfVertex == DataVertex.TypeOfVertex.REGULATOR_PARTIAL_VERTEX)
            //    {
            //        DataVertexRegulator dvr_temp = (vc.Vertex as DataVertexRegulator);
            //        dvr_temp.CompensatorSettingsB = dvrp.CompensatorSettingsB;
            //        dvr_temp.Line_Segment_To = dvrp.Element_id;
            //        dvr_temp.R_SettingB = dvrp.R_SettingB;
            //        dvr_temp.VoltageLevelB = dvrp.VoltageLevelB;
            //        dvr_temp.X_SettingB = dvrp.X_SettingB;
            //    }
            //    else if ((_ecFrom.Vertex as DataVertex).typeOfVertex == DataVertex.TypeOfVertex.REGULATOR_VERTEX)
            //    {
            //        DataVertexRegulator dvr_temp = (_ecFrom.Vertex as DataVertexRegulator);
            //        dvr_temp.CompensatorSettingsB = dvrp.CompensatorSettingsB;
            //        dvr_temp.Line_Segment_To = dvrp.Element_id;
            //        dvr_temp.R_SettingB = dvrp.R_SettingB;
            //        dvr_temp.VoltageLevelB = dvrp.VoltageLevelB;
            //        dvr_temp.X_SettingB = dvrp.X_SettingB;
            //    }

            //}

            var ec = new EdgeControl(_ecFrom, vc, data);

            ec.DashStyle = EdgeDashStyle.DashDot;

            if (CheckIfConnectionExists(data) == true)
            {
                MessageBox.Show("Already connected!");
                return;
            }

            if (graphState == GraphState.PARTIAL_CONNECTING)
            {
                (mainWindow.graphView.DataContext as GraphViewModel).AddEdge(data, ec, _ecFrom);
                return;
            }

            w = new Window();
            w = new EdgeConfigurationView((DataVertex)_ecFrom.Vertex, mainWindow.GlobalVertices, null,
                                          ((DataVertex)vc.Vertex).Element_id, mainWindow.GlobalEdges, false, vc, null,
                                          mainWindow, mainWindow.GlobalCableConfiguration, ec, data, _ecFrom);
            w.Show();
        }
        internal void AddEdge(DataEdge data, EdgeControl ec, VertexControl ecFrom, CableConfiguration cableConfiguration = null)
        {
            if (data == null)
            {
                return;
            }

            if (_ecFrom == null)
            {
                VertexControl vc = GetVertexControlWithDataVertex(data.Source.Element_id);;
                _ecFrom = vc;
            }


            if (mainWindow.graphView.Area.EdgesList.ContainsKey(data))
            {
                return;
            }

            if (graphState == GraphState.NORMAL)
            {
                data.Length = length;
                data.Text   = length.ToString();
            }

            if (data.Source.typeOfVertex == DataVertex.TypeOfVertex.REGULATOR_VERTEX || data.Source.typeOfVertex == DataVertex.TypeOfVertex.TRANSFORMER_VERTEX)
            {
                cableConfiguration = new CableConfiguration()
                {
                    Name = "xfm_1"
                };
                data.Configuration = cableConfiguration;
            }

            if (mainWindow.GlobalEdges.ContainsKey(data.Source.Element_id))
            {
                mainWindow.GlobalEdges[data.Source.Element_id].Add(data);
            }
            else
            {
                mainWindow.GlobalEdges.Add(data.Source.Element_id, new List <DataEdge>()
                {
                    data
                });
            }


            bool its_needed = CheckIfLabelNeeded(data);

            if (its_needed)
            {
                mainWindow.graphView.Area.AddEdge(data, ec, true);
            }
            else
            {
                mainWindow.graphView.Area.AddEdge(data, ec, false);
            }



            setEdgesDashStyle(ec, data.Source.typeOfVertex);

            HighlightBehaviour.SetHighlighted(_ecFrom, true);
            _ecFrom = null;
            DestroyVirtualEdge();
            mainWindow.segmentData.IsEnabled = true;


            if (graphState == GraphState.NORMAL)
            {
                undoRedoCommander.addUndoCommand(new Command("AddEdge", data));
            }
        }