Exemple #1
0
 private void UpdateMsaglNodeBold(MsaglGraphs.Node node, SgvlGraphs.Vertex vertex)
 {
     if (vertex.Bold)
     {
         node.Attr.LineWidth = defaultLineWidth * boldCoefficient;
     }
     else
     {
         node.Attr.LineWidth = defaultLineWidth;
     }
 }
Exemple #2
0
 private void UpdateMsaglNodeLabel(MsaglGraphs.Node node, SgvlGraphs.Vertex vertex)
 {
     // Если метка пустая - номер вершины, если непустая, то ставим метку рядом с номером (иначе никак)
     if (string.IsNullOrEmpty(vertex.Label))
     {
         node.LabelText = node.Id.ToString();
     }
     else
     {
         node.LabelText = $"{node.Id}   {vertex.Label}";
     }
 }
Exemple #3
0
 private void UpdateMsaglNode(MsaglGraphs.Node node, SgvlGraphs.Vertex vertex)
 {
     // Идентификатор вершины не меняется - обновлять не надо
     // Метка
     UpdateMsaglNodeLabel(node, vertex);
     // Цвет границ вершины
     UpdateMsaglNodeBorderColor(node, vertex);
     // Цвет заливки вершины
     UpdateMsaglNodeFillColor(node, vertex);
     // Выделение жирным
     UpdateMsaglNodeBold(node, vertex);
 }
Exemple #4
0
 // ----Методы
 private void UpdateMsaglNodeId(MsaglGraphs.Node node, SgvlGraphs.Vertex vertex)
 {
     node.Id = vertex.Number.ToString();
 }
Exemple #5
0
        private void OnVertexBoldChanged(SgvlGraphs.Vertex vertex)
        {
            var node = MsaglGraph.FindNode(vertex.Number.ToString());

            UpdateMsaglNodeBold(node, vertex);
        }
Exemple #6
0
 private void UpdateMsaglNodeFillColor(MsaglGraphs.Node node, SgvlGraphs.Vertex vertex)
 {
     node.Attr.FillColor = new MsaglGraphs.Color(vertex.FillColor.A, vertex.FillColor.R, vertex.FillColor.G, vertex.FillColor.B);
 }
Exemple #7
0
        // ----Конструкторы
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="adjacencyMatrix">Матрица смежности графа, на пересечении строки и столбца - флаг присутствия соответствующего ребра</param>
        /// <param name="type">Тип графа - ориентированный ли он</param>
        public Graph(bool[,] adjacencyMatrix, bool isDirected)
        {
            IsDirected = isDirected;
            int verticesCount = adjacencyMatrix.GetLength(0); // количество вершин в графе (матрица квадратная)

            // Создаём вершины графа
            vertices = new Vertex[verticesCount];
            for (int vertexIndex = 0; vertexIndex < verticesCount; vertexIndex++)
            {
                int vertexNum = vertexIndex + 1;
                // Строим объект вершины и добавляем его в список вершин
                var vertex = new Vertex(vertexNum);
                vertex.VertexChainged += GraphPartChaingedHandler;
                vertices[vertexIndex]  = vertex;
            }
            // Создаём рёбра графа, заполняем матрицу рёбер и список рёбер
            matrix = new Edge[verticesCount, verticesCount];
            var edgesList = new List <Edge>();

            // Если граф ориентированный, придётся проходиться по всей матрице
            if (isDirected)
            {
                for (int rowIndex = 0; rowIndex < verticesCount; rowIndex++)
                {
                    int rowNum = rowIndex + 1;
                    for (int columnIndex = 0; columnIndex < verticesCount; columnIndex++)
                    {
                        int columnNum = columnIndex + 1;
                        if (adjacencyMatrix[rowIndex, columnIndex])
                        {
                            // Создаём ребро и добавляем его в список и в матрицу
                            var edge = new Edge(vertices[rowIndex], vertices[columnIndex]);
                            edge.EdgeChanged += GraphPartChaingedHandler;
                            matrix[rowIndex, columnIndex] = edge;
                            edgesList.Add(edge);
                        }
                    }
                }
            }
            // Если граф неориентированный, матрица симметрична
            else
            {
                for (int rowIndex = 0; rowIndex < verticesCount; rowIndex++)
                {
                    int rowNum = rowIndex + 1;
                    for (int columnIndex = 0; columnIndex <= rowIndex; columnIndex++)
                    {
                        int columnNum = columnIndex + 1;
                        if (adjacencyMatrix[rowIndex, columnIndex])
                        {
                            // Создаём ребро и добавляем его в список и в матрицу
                            var edge = new Edge(vertices[rowIndex], vertices[columnIndex]);
                            edge.EdgeChanged += GraphPartChaingedHandler;
                            matrix[rowIndex, columnIndex] = matrix[columnIndex, rowIndex] = edge;
                            edgesList.Add(edge);
                        }
                    }
                }
            }
            edges = edgesList.ToArray();
        }