// ----Конструктор public MsaglSettingsWrapper(GViewer gViewer, MsaglGraphs.Graph msaglGraph, SgvlGraphs.Graph sgvlGraph, DrawingSettings drawingSettings) { MsaglGraph = msaglGraph; GViewer = gViewer; DrawingSettings = drawingSettings; // Подписываемся на событие изменения цвета фона drawingSettings.BackgroundColorChanged += UpdateBackgroundColor; }
// ----Конструктор /// <summary> /// Конструктор, создающий класс, связывающий SGVL граф с вновь созданным /// соответствующим графом MSAGL /// </summary> /// <param name="graph">SGVL граф, для которого необходим соответствующий MSAGL граф</param> public MsaglGraphWrapper(SgvlGraphs.Graph graph) { SgvlGraph = graph; MsaglGraph = new MsaglGraphs.Graph("graph"); MsaglGraph.Directed = graph.IsDirected; // Создаём вершины графа Msagl foreach (var vertex in graph.Vertices) { var msaglNode = MsaglGraph.AddNode(vertex.Number.ToString()); // Приводим в соответствие значения их атрибутов UpdateMsaglNode(msaglNode, vertex); // Задаём форму в виде круга msaglNode.Attr.Shape = MsaglGraphs.Shape.Circle; // Задаём размер шрифта msaglNode.Label.FontSize = fontSize; // Подписываемся на события изменения атрибутов вершины vertex.LabelChanged += OnVertexLabelChanged; vertex.BorderColorChanged += OnVertexBorderColorChanged; vertex.FillColorChanged += OnVertexFillColorChanged; vertex.BoldChanged += OnVertexBoldChanged; // На изменение координат мы не подписываемся - это пока не работает } // Создаём рёбра графа Msagl foreach (var edge in graph.Edges) { var msaglEdge = MsaglGraph.AddEdge(edge.SourceVertex.Number.ToString(), edge.TargetVertex.Number.ToString()); // Задаём ребру id для быстрого поиска в виде строки msaglEdge.Attr.Id = $"{edge.SourceVertex.Number}-{edge.TargetVertex.Number}"; // Если граф неориентированный, убираем с конца стрелку if (!graph.IsDirected) { msaglEdge.Attr.ArrowheadAtTarget = MsaglGraphs.ArrowStyle.None; } // Приводим в соответствие значения их атрибутов UpdateMsaglEdge(msaglEdge, edge); // Задаём размер шрифта msaglEdge.Label.FontSize = fontSize; // Подписываемся на события изменения атрибутов ребра edge.LabelChanged += OnEdgeLabelChanged; edge.ColorChanged += OnEdgeColorChanged; edge.BoldChanged += OnEdgeBoldChanged; } }