Ejemplo n.º 1
0
 // ----Конструктор
 public MsaglSettingsWrapper(GViewer gViewer, MsaglGraphs.Graph msaglGraph, SgvlGraphs.Graph sgvlGraph, DrawingSettings drawingSettings)
 {
     MsaglGraph      = msaglGraph;
     GViewer         = gViewer;
     DrawingSettings = drawingSettings;
     // Подписываемся на событие изменения цвета фона
     drawingSettings.BackgroundColorChanged += UpdateBackgroundColor;
 }
Ejemplo n.º 2
0
 // ----Конструктор
 /// <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;
     }
 }