/// <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; }
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(); }
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; }
private void ClearEditMode() { if (_ecFrom != null) { HighlightBehaviour.SetHighlighted(_ecFrom, false); } _editorManager.DestroyVirtualEdge(); _ecFrom = null; }
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); } }
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); } }
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); } }
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); } }
/// <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); } }
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); } }
/// <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); } }
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); } }
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)); } }