private void UpdateMsaglEdge(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge) { // Метка ребра UpdateMsaglEdgeLabel(msaglEdge, sgvlEdge); // Цвет ребра UpdateMsaglEdgeColor(msaglEdge, sgvlEdge); // Выделение жирным UpdateMsaglEdgeBold(msaglEdge, sgvlEdge); }
private void UpdateMsaglEdgeBold(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge) { if (sgvlEdge.Bold) { msaglEdge.Attr.LineWidth = defaultLineWidth * boldCoefficient; } else { msaglEdge.Attr.LineWidth = defaultLineWidth; } }
private void OnEdgeBoldChanged(SgvlGraphs.Edge edge) { var msaglEdge = MsaglGraph.EdgeById($"{edge.SourceVertex.Number}-{edge.TargetVertex.Number}"); UpdateMsaglEdgeBold(msaglEdge, edge); }
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); }
private void UpdateMsaglEdgeLabel(MsaglGraphs.Edge msaglEdge, SgvlGraphs.Edge sgvlEdge) { msaglEdge.LabelText = sgvlEdge.Label; }
// ----Конструкторы /// <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(); }