//adding edge private void btn_add_edge_Click(object sender, EventArgs e) { _selectedVerticle = null; foreach (var ve in listOfVerticles) { ve.isSelected = false; } Drawing_panel.Invalidate(); var aef = new AddEdgeForm { Verticles = listOfVerticles, Edges = listOfEdges }; if (listOfVerticles.Count < 2) { MessageBox.Show("В графе менее 2 вершин, создать ребро нельзя.", "Ошибка!"); return; } aef.ShowDialog(); if (aef.DialogResult != DialogResult.OK) { return; } listOfEdges.Add(aef.Return); listOfVerticles.Find(x => x.Equals(aef.Return.A)).connections++; listOfVerticles.Find(x => x.Equals(aef.Return.B)).connections++; RenewLists(); RandomizeWeightsPositions(listOfEdges); Drawing_panel.Refresh(); }
//currentPath путь при текущей итерации. При вызове метода берется пустой список //verticle вершина, которая может начинать путь //paths список, в который будут добавляться пути private void AddPath(List <String> currentPath, Verticle verticle, List <List <String> > paths) { //Добавляем фрагмент в путь currentPath.Add(verticle.Fragment); //Получаем смежные фрагменты в виде списка var neighbours = verticle.GetNeighbours(); if (neighbours.Count == 0) //Если смежных нет { //Если при этом фрагмент не стоит на завершающей позиции в молекуле if ((originMolecule.IndexOf(verticle.Fragment) + verticle.Fragment.Length) != (originMolecule.Length)) { return; } else { // BUG INJECTION //Если фрагмент завершает молекулу - путь найден и добавляется в список путей paths.Add(currentPath); return; } } for (var i = 0; i < neighbours.Count; ++i) { //Рекурсивно вызывается для всех смежных вершин //Создается копия currentPath AddPath(new List <String>(currentPath), neighbours[i], paths); // BUG INJECTION //AddPath(currentPath, neighbours[i], paths); } }
//starting Prim method private void методПримаToolStripMenuItem_Click(object sender, EventArgs e) { _selectedVerticle = null; if (!GraphIsConnected(true)) { return; } foreach (var ve in listOfVerticles) { ve.isSelected = false; } Drawing_panel.Invalidate(); Drawing_panel.Refresh(); var pForm = new PrimsMethodForm { Verticles = listOfVerticles, Edges = listOfEdges }; pForm.Size = Size; pForm.WindowState = WindowState; pForm.ShowDialog(); foreach (var edge in listOfEdges) { edge.condition = Condition.Waiting; } RecalculateDrawingCoordinates(); }
public void TestEdges() { Verticle v = new Verticle("v"); Verticle u = new Verticle("u"); Edge e = new Edge(v, u); v.AddOutNeighbor(e); u.AddInNeighbor(e); foreach (Edge edge in v.EdgesOut) { Assert.AreSame(e, edge); } foreach (var x in v.EdgesIn) { Assert.Fail(); } foreach (Edge edge in u.EdgesIn) { Assert.AreSame(e, edge); } foreach (var x in u.EdgesOut) { Assert.Fail(); } }
public Edge(Verticle A, Verticle B, int weight) { this.weight = weight; this.A = A; this.B = B; condition = Condition.Waiting; }
//graph autogeneration private void bibaToolStripMenuItem_Click(object sender, EventArgs e) { _selectedVerticle = null; foreach (var ve in listOfVerticles) { ve.isSelected = false; } Drawing_panel.Invalidate(); var ggForm = new GraphGenerateForm(); if (ggForm.ShowDialog() == DialogResult.OK) { ClearGraph(); GenerateGraph(ggForm.Count, ggForm.GenerateEdges); } Drawing_panel.Refresh(); if (ggForm.Count <= 10 || WindowState == FormWindowState.Maximized) { return; } if (MessageBox.Show("Развернуть окно для лучшего отображения графа?", "Большой граф", MessageBoxButtons.YesNo) == DialogResult.Yes) { WindowState = FormWindowState.Maximized; } AddVerticle_btn.Enabled = (listOfVerticles.Count < 15); }
// help private void помощьToolStripMenuItem_Click(object sender, EventArgs e) { _selectedVerticle = null; foreach (var ve in listOfVerticles) { ve.isSelected = false; } Drawing_panel.Invalidate(); var hForm = new HelpForm(); hForm.ShowDialog(); }
// about private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e) { _selectedVerticle = null; foreach (var ve in listOfVerticles) { ve.isSelected = false; } Drawing_panel.Invalidate(); var abForm = new AboutForm(); abForm.ShowDialog(); }
public void TestCase() { Verticle v = new Verticle("v"); Verticle u = new Verticle("u"); Edge e = new Edge(v, u); Assert.AreSame(e.From, v); Assert.AreSame(e.To, u); EdgeKey edgeKey = e.GetKey(); Assert.AreEqual(edgeKey.from, v.Id, "v"); Assert.AreEqual(edgeKey.to, u.Id, "u"); }
private void MoveVerticle() { if (SelectedObject?.GraphicObjectType != GraphicObjectType.Verticle) { return; } Verticle verticle = (SelectedObject as Verticle); verticle.Point = Clicks.Last(); SelectedObject = null; Redraw(); }
public void TestGetVerticle() { Assert.Throws <KeyNotFoundException>(() => g.GetVerticle("v")); g.AddVerticle("v"); Verticle v = null; try { v = g.GetVerticle("v"); }catch (Exception exc) { Assert.Fail(); } }
private void lb_verticle_SelectedIndexChanged(object sender, EventArgs e) { if (_selectedVerticle != null) { _selectedVerticle.isSelected = false; } if (lb_verticle.SelectedIndex == -1) { return; } _selectedVerticle = listOfVerticles[lb_verticle.SelectedIndex]; _selectedVerticle.isSelected = true; Drawing_panel.Invalidate(); }
//adding verticle private void AddVerticle_btn_Click(object sender, EventArgs e) { if (listOfVerticles.Count >= 15) { AddVerticle_btn.Enabled = false; return; } var newvwrt = new Verticle("V" + ++_maxVertNum); listOfVerticles.Add(newvwrt); RecalculateDrawingCoordinates(); RandomizeWeightsPositions(listOfEdges); RenewLists(); Drawing_panel.Refresh(); }
private void DeleteObject() { if (SelectedObject.GraphicObjectType == GraphicObjectType.Verticle) { Verticle verticle = (SelectedObject as Verticle); Line line = (verticle.ParentGraphicObject as Line); Poligon poligon = line.ParentGraphicObject != null ? line.ParentGraphicObject as Poligon : null; if (poligon == null) { return; } else { var lineToDelete = poligon.DeleteVerticle(verticle); GraphicObjects.Remove(lineToDelete.Guid); GraphicObjects.Remove(verticle.Guid); } } else if (SelectedObject.GraphicObjectType == GraphicObjectType.Line) { Line line = (SelectedObject as Line); if (line.ParentGraphicObject == null) { GraphicObjects.Remove(line.StartVerticle.Guid); GraphicObjects.Remove(line.EndVerticle.Guid); GraphicObjects.Remove(line.Guid); } else { Poligon poligon = line.ParentGraphicObject as Poligon; poligon.Lines.ForEach(x => GraphicObjects.Remove(x.Guid)); poligon.Verticies.ForEach(x => GraphicObjects.Remove(x.Guid)); GraphicObjects.Remove(poligon.Guid); } } else if (SelectedObject.GraphicObjectType == GraphicObjectType.Circle) { GraphicObjects.Remove(SelectedObject.Guid); } SelectedObject = null; Redraw(); }
public Line(Point startPoint, Point endPoint, int width, Drawing drawing, GuidMapLogic guidMapLogic, GraphicObject parentGraphicObject = null) : base(drawing, guidMapLogic) { //StartPoint = startPoint; //EndPoint = endPoint; Width = width; ParentGraphicObject = parentGraphicObject; GraphicObjectType = GraphicObjectType.Line; StartVerticle = new Verticle(startPoint, drawing, guidMapLogic, this); StartVerticle.ParentGraphicObject = this; EndVerticle = new Verticle(endPoint, drawing, guidMapLogic, this); EndVerticle.ParentGraphicObject = this; }
public void TestDfs() { g.AddVerticle("s"); g.Dfs("s"); Verticle s = g.GetVerticle("s"); Assert.AreEqual(0, s.Dist); Assert.AreEqual(s.ParentEdge, null); g.AddVerticle("v1"); Verticle v1 = g.GetVerticle("v1"); g.AddEdge("s", "v1"); g.Dfs("s"); Assert.AreEqual(0, s.Dist); Assert.AreEqual(s.ParentEdge, null); Assert.AreEqual(1, v1.Dist); Assert.AreSame(v1.ParentEdge.From, s); Assert.AreSame(v1.ParentEdge.To, v1); g.AddEdge("v1", "v2"); Verticle v2 = g.GetVerticle("v2"); g.Dfs("s"); Assert.AreEqual(0, s.Dist); Assert.AreEqual(s.ParentEdge, null); Assert.AreEqual(1, v1.Dist); Assert.AreSame(v1.ParentEdge.From, s); Assert.AreSame(v1.ParentEdge.To, v1); Assert.AreEqual(2, v2.Dist); Assert.AreSame(v2.ParentEdge.From, v1); Assert.AreSame(v2.ParentEdge.To, v2); g.AddEdge("v2", "s"); g.Dfs("s"); Assert.AreEqual(0, s.Dist); Assert.AreEqual(s.ParentEdge, null); Assert.AreEqual(1, v1.Dist); Assert.AreSame(v1.ParentEdge.From, s); Assert.AreSame(v1.ParentEdge.To, v1); Assert.AreEqual(2, v2.Dist); Assert.AreSame(v2.ParentEdge.From, v1); Assert.AreSame(v2.ParentEdge.To, v2); }
//delete edge private void удалитьToolStripMenuItem1_Click(object sender, EventArgs e) { if (MessageBox.Show("Удaлить ребро?", "Вы уверены?", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } var del = listOfEdges[lb_edges.SelectedIndex]; listOfEdges.Remove(del); del.A.connections--; del.B.connections--; if (_selectedVerticle != null) { _selectedVerticle.isSelected = false; } _selectedVerticle = null; RenewLists(); RecalculateDrawingCoordinates(); Drawing_panel.Refresh(); }
public void TestRemoveNeighbor() { Verticle v = new Verticle("v"); Verticle u = new Verticle("u"); Edge e = new Edge(v, u); v.AddOutNeighbor(e); u.AddInNeighbor(e); Assert.IsFalse(v.RemoveEdgeIn("lala")); Assert.IsFalse(u.RemoveEdgeIn("lala")); Assert.IsFalse(v.RemoveEdgeOut("lala")); Assert.IsFalse(u.RemoveEdgeOut("lala")); Assert.IsTrue(v.RemoveEdgeOut("u")); Assert.IsTrue(u.RemoveEdgeIn("v")); Assert.AreEqual(v.NumOfEdgesIn, 0); Assert.AreEqual(v.NumOfEdgesOut, 0); Assert.IsFalse(v.IsNeighborOut("u")); Assert.IsFalse(u.IsNeighborIn("v")); Assert.Throws <KeyNotFoundException>(() => v.GetEdgeIn("u")); Assert.Throws <KeyNotFoundException>(() => v.GetEdgeOut("u")); Assert.Throws <KeyNotFoundException>(() => u.GetEdgeIn("v")); Assert.Throws <KeyNotFoundException>(() => u.GetEdgeOut("v")); }
public void TestAddNeighbor() { Verticle v = new Verticle("v"); Verticle u = new Verticle("u"); Assert.Throws <KeyNotFoundException>(() => v.GetEdgeIn("u")); Assert.AreEqual(v.NumOfEdgesIn, 0); Assert.AreEqual(v.NumOfEdgesOut, 0); Edge e = new Edge(v, u); v.AddOutNeighbor(e); u.AddInNeighbor(e); Assert.IsTrue(v.IsNeighborOut("u")); Assert.IsTrue(u.IsNeighborIn("v")); Assert.AreEqual(v.NumOfEdgesIn, 0); Assert.AreEqual(v.NumOfEdgesOut, 1); Assert.AreEqual(u.NumOfEdgesIn, 1); Assert.AreEqual(u.NumOfEdgesOut, 0); Assert.AreSame(v.GetEdgeOut("u"), e); Assert.AreSame(u.GetEdgeIn("v"), e); Assert.Throws <ArgumentException>(() => v.AddOutNeighbor(e)); Assert.Throws <ArgumentException>(() => u.AddInNeighbor(e)); }
//delete verticle private void удалитьToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("Удaлить вершину?", "Вы уверены?", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } listOfVerticles.Remove(_selectedVerticle); while (_selectedVerticle.connections > 0) { var del = listOfEdges.First(x => Equals(x.A, _selectedVerticle) || Equals(x.B, _selectedVerticle)); del.A.connections--; del.B.connections--; listOfEdges.Remove(del); } _selectedVerticle.isSelected = false; _selectedVerticle = null; AddVerticle_btn.Enabled = true; RenewLists(); RecalculateDrawingCoordinates(); Drawing_panel.Refresh(); }
public void SetOnMap(Verticle verticle) { SetGuid(verticle.Point.X, verticle.Point.Y, verticle.Guid, verticle.Width); }
private void Drawing_panel_MouseDown(object sender, MouseEventArgs e) { if (lb_verticle.SelectedIndex != -1) { lb_verticle.SetSelected(lb_verticle.SelectedIndex, false); } if (lb_edges.SelectedIndex != -1) { lb_edges.SetSelected(lb_edges.SelectedIndex, false); } if (e.Button != MouseButtons.Left) { wwClick = WhereWasClick.DrawingPanel; return; } Verticle select = null; foreach (var verticle in listOfVerticles) { int dx = e.X - verticle.point.X, dy = e.Y - verticle.point.Y; if (!(Math.Sqrt(dx * dx + dy * dy) <= verticleRadius)) { continue; } select = verticle; break; } if (Equals(_selectedVerticle, select) || select == null) { if (_selectedVerticle != null) { _selectedVerticle.isSelected = false; _selectedVerticle = null; Drawing_panel.Invalidate(); } return; } if (_selectedVerticle == null) { _selectedVerticle = select; if (_selectedVerticle != null) { _selectedVerticle.isSelected = true; } Drawing_panel.Invalidate(); } else { if (listOfEdges.Any(ed => Equals(ed.A, select) && Equals(ed.B, _selectedVerticle) || Equals(ed.A, _selectedVerticle) && Equals(ed.B, select))) { return; } var aef = new AddEdgeForm { Verticles = listOfVerticles, Edges = listOfEdges, SetDefaultVerticles = true, Va = _selectedVerticle, Vb = select }; aef.ShowDialog(); if (aef.DialogResult != DialogResult.OK) { if (_selectedVerticle != null) { _selectedVerticle.isSelected = false; } _selectedVerticle.isSelected = false; _selectedVerticle = null; Drawing_panel.Invalidate(); return; } listOfEdges.Add(aef.Return); listOfVerticles.Find(x => x.Equals(aef.Return.A)).connections++; listOfVerticles.Find(x => x.Equals(aef.Return.B)).connections++; RandomizeWeightsPositions(listOfEdges); RenewLists(); if (_selectedVerticle != null) { _selectedVerticle.isSelected = false; } Drawing_panel.Refresh(); _selectedVerticle = null; } }
public TextAnchor DrawGUITextAlignment(TextAnchor alignment) { // Debug.Log("alignment: "+ alignment); EditorGUIUtility.SetIconSize(new Vector2(15, 15)); if (alignment == TextAnchor.UpperLeft || alignment == TextAnchor.MiddleLeft || alignment == TextAnchor.LowerLeft) { hAlign = Horizontal.left; } else if (alignment == TextAnchor.UpperCenter || alignment == TextAnchor.MiddleCenter || alignment == TextAnchor.LowerCenter) { hAlign = Horizontal.center; } else { hAlign = Horizontal.right; } if (alignment == TextAnchor.UpperLeft || alignment == TextAnchor.UpperCenter || alignment == TextAnchor.UpperRight) { vAlign = Verticle.top; } else if (alignment == TextAnchor.MiddleLeft || alignment == TextAnchor.MiddleCenter || alignment == TextAnchor.MiddleRight) { vAlign = Verticle.middle; } else { vAlign = Verticle.bottom; } GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Alignment"); GUILayout.Space(-8); if (GUILayout.Toggle(hAlign == Horizontal.left, hAlign == Horizontal.left ? m_LeftAlignTextActive : m_LeftAlignText, alignmentButtonLeft, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { hAlign = Horizontal.left; } if (GUILayout.Toggle(hAlign == Horizontal.center, hAlign == Horizontal.center? m_CenterAlignTextActive : m_CenterAlignText, alignmentButtonMid, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { hAlign = Horizontal.center; } if (GUILayout.Toggle(hAlign == Horizontal.right, hAlign == Horizontal.right ? m_RightAlignTextActive : m_RightAlignText, alignmentButtonRight, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { hAlign = Horizontal.right; } GUILayout.Space(20); if (GUILayout.Toggle(vAlign == Verticle.top, vAlign == Verticle.top ? m_TopAlignTextActive : m_TopAlignText, alignmentButtonLeft, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { vAlign = Verticle.top; } if (GUILayout.Toggle(vAlign == Verticle.middle, vAlign == Verticle.middle ? m_MiddleAlignTextActive : m_MiddleAlignText, alignmentButtonMid, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { vAlign = Verticle.middle; } if (GUILayout.Toggle(vAlign == Verticle.bottom, vAlign == Verticle.bottom ? m_BottomAlignTextActive : m_BottomAlignText, alignmentButtonRight, GUILayout.Width(20), GUILayout.Height(EditorGUIUtility.singleLineHeight))) { vAlign = Verticle.bottom; } GUILayout.EndHorizontal(); if (hAlign == Horizontal.left && vAlign == Verticle.top) { return(TextAnchor.UpperLeft); } else if (hAlign == Horizontal.left && vAlign == Verticle.middle) { return(TextAnchor.MiddleLeft); } else if (hAlign == Horizontal.left && vAlign == Verticle.bottom) { return(TextAnchor.LowerLeft); } else if (hAlign == Horizontal.center && vAlign == Verticle.top) { return(TextAnchor.UpperCenter); } else if (hAlign == Horizontal.center && vAlign == Verticle.middle) { return(TextAnchor.MiddleCenter); } else if (hAlign == Horizontal.center && vAlign == Verticle.bottom) { return(TextAnchor.LowerCenter); } else if (hAlign == Horizontal.right && vAlign == Verticle.top) { return(TextAnchor.UpperRight); } else if (hAlign == Horizontal.right && vAlign == Verticle.middle) { return(TextAnchor.MiddleRight); } else if (hAlign == Horizontal.right && vAlign == Verticle.bottom) { return(TextAnchor.LowerRight); } return(alignment); }
public Verticle(Verticle verticle) { name = verticle.name; point = new Point(verticle.point.X, verticle.point.Y); connections = 0; }