Beispiel #1
0
 private void UpdateMsaglEdge(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge)
 {
     // Метка ребра
     UpdateMsaglEdgeLabel(msaglEdge, sgvlEdge);
     // Цвет ребра
     UpdateMsaglEdgeColor(msaglEdge, sgvlEdge);
     // Выделение жирным
     UpdateMsaglEdgeBold(msaglEdge, sgvlEdge);
 }
Beispiel #2
0
 private void UpdateMsaglEdgeBold(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge)
 {
     if (sgvlEdge.Bold)
     {
         msaglEdge.Attr.LineWidth = defaultLineWidth * boldCoefficient;
     }
     else
     {
         msaglEdge.Attr.LineWidth = defaultLineWidth;
     }
 }
Beispiel #3
0
        private void OnEdgeBoldChanged(SgvlGraphs.Edge edge)
        {
            var msaglEdge = MsaglGraph.EdgeById($"{edge.SourceVertex.Number}-{edge.TargetVertex.Number}");

            UpdateMsaglEdgeBold(msaglEdge, edge);
        }
Beispiel #4
0
 private void UpdateMsaglEdgeColor(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge)
 {
     msaglEdge.Attr.Color = new MsaglGraphs.Color(sgvlEdge.Color.A, sgvlEdge.Color.R, sgvlEdge.Color.G, sgvlEdge.Color.B);
 }
Beispiel #5
0
 private void UpdateMsaglEdgeLabel(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge)
 {
     msaglEdge.LabelText = sgvlEdge.Label;
 }
Beispiel #6
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();
        }