Ejemplo n.º 1
0
        //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();
        }
Ejemplo n.º 2
0
        //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);
            }
        }
Ejemplo n.º 3
0
        //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();
        }
Ejemplo n.º 4
0
        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();
            }
        }
Ejemplo n.º 5
0
 public Edge(Verticle A, Verticle B, int weight)
 {
     this.weight = weight;
     this.A      = A;
     this.B      = B;
     condition   = Condition.Waiting;
 }
Ejemplo n.º 6
0
        //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);
        }
Ejemplo n.º 7
0
        // 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();
        }
Ejemplo n.º 8
0
        // 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();
        }
Ejemplo n.º 9
0
        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");
        }
Ejemplo n.º 10
0
        private void MoveVerticle()
        {
            if (SelectedObject?.GraphicObjectType != GraphicObjectType.Verticle)
            {
                return;
            }

            Verticle verticle = (SelectedObject as Verticle);

            verticle.Point = Clicks.Last();
            SelectedObject = null;

            Redraw();
        }
Ejemplo n.º 11
0
        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();
            }
        }
Ejemplo n.º 12
0
 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();
 }
Ejemplo n.º 13
0
        //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();
        }
Ejemplo n.º 14
0
        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();
        }
Ejemplo n.º 15
0
        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;
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        //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();
        }
Ejemplo n.º 18
0
        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"));
        }
Ejemplo n.º 19
0
        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));
        }
Ejemplo n.º 20
0
        //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();
        }
Ejemplo n.º 21
0
 public void SetOnMap(Verticle verticle)
 {
     SetGuid(verticle.Point.X, verticle.Point.Y, verticle.Guid, verticle.Width);
 }
Ejemplo n.º 22
0
        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;
            }
        }
Ejemplo n.º 23
0
    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);
    }
Ejemplo n.º 24
0
 public Verticle(Verticle verticle)
 {
     name        = verticle.name;
     point       = new Point(verticle.point.X, verticle.point.Y);
     connections = 0;
 }