/// <summary> /// Процедура отображения ребер графа в документе Visio /// </summary> /// <param name="visioDocs">Документы Visio</param> /// <param name="visioPage">Текущая страница в Visio</param> private void PresentEdges(Visio.Documents visioDocs, Visio.Page visioPage) { Visio.Document visioConnectors = visioDocs.OpenEx("Basic Flowchart Shapes (US units).vss", (short)Visio.VisOpenSaveArgs.visOpenDocked); // Соединение вершин графа ребрами for (int i = 0; i < graph.VerticesEdges.Count(); ++i) { // Ребро var edge = graph.VerticesEdges.ElementAt(i); // Фигура соединидельной линии (коннектора) Visio.Shape connector = visioPage.Drop(visioConnectors.Masters.get_ItemU("Dynamic connector"), 0, 0); connector.get_Cells("ConLineRouteExt").FormulaU = "2"; connector.get_Cells("EndArrow").Formula = "=5"; // Стили ребра string label = edge.Attributes.ContainsKey("label") ? edge.Attributes["label"] : ""; string color = edge.Attributes.ContainsKey("color") ? edge.Attributes["color"] : "black"; string linestyle = edge.Attributes.ContainsKey("style") ? LineStyle(edge.Attributes["style"].ToLower()) : "1"; // Установка стилей для фигуры на странице Visio connector.Text = label; connector.get_CellsU("LineColor").FormulaU = VisioColor.ColorToRgb(color.ToLower()); connector.get_CellsU("LinePattern").FormulaU = linestyle; // Соединение вершин при помощи данного коннектора vertices[edge.Source].AutoConnect(vertices[edge.Destination], Visio.VisAutoConnectDir.visAutoConnectDirDown, connector); edges.Add(edge, vertices[edge.Source].FromConnects[vertices[edge.Source].FromConnects.Count].FromSheet); // Удаление коннектора-болванки connector.Delete(); } }
/// <summary> /// Процедура отображения вершин графа в документе Visio /// </summary> /// <param name="visioDocs">Документы Visio</param> /// <param name="visioPage">Текущая страница в Visio</param> private void PresentNodes(Visio.Documents visioDocs, Visio.Page visioPage) { // Мастер-объект базовых фигур Visio Dictionary <string, Visio.Master> visioMasters = GetMasterShapes(visioDocs); // Расстановка вершин графа for (int i = 0; i < graph.AllVertices.Count(); ++i) { // Вершина var node = graph.AllVertices.ElementAt(i); // Стили вершины string shape = node.Attributes.ContainsKey("shape") ? node.Attributes["shape"] : "ELLIPSE"; string label = node.Attributes.ContainsKey("label") ? node.Attributes["label"] : node.Id; string color = node.Attributes.ContainsKey("color") ? node.Attributes["color"] : "black"; string fontcolor = node.Attributes.ContainsKey("fontcolor") ? node.Attributes["fontcolor"] : "black"; string style = node.Attributes.ContainsKey("style") ? node.Attributes["style"] == "filled" ? "filled" : LineStyle(node.Attributes["style"].ToLower()) : "1"; // Добавление вершины на страницу Visio vertices.Add(node, visioPage.Drop(visioMasters[shape.ToUpper()], 1 + i / 2.0, 11 - i / 2.0)); // Установка стилей для фигуры на странице Visio vertices[node].Text = label; vertices[node].get_CellsSRC((short)Visio.VisSectionIndices.visSectionCharacter, (short)Visio.VisRowIndices.visRowCharacter, (short)Visio.VisCellIndices.visCharacterColor).FormulaU = VisioColor.ColorToRgb(fontcolor.ToLower()); if (style == "filled") { vertices[node].get_CellsSRC((short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowFill, (short)Visio.VisCellIndices.visFillForegnd).FormulaU = VisioColor.ColorToRgb(color.ToLower()); } else { vertices[node].get_CellsU("LinePattern").FormulaU = style; } vertices[node].get_CellsU("LineColor").FormulaU = VisioColor.ColorToRgb(color.ToLower()); // Ресайзинг vertices[node].Resize(Visio.VisResizeDirection.visResizeDirNW, -0.8, Visio.VisUnitCodes.visInches); // Чтобы не допустить пересечений vertices[node].get_CellsSRC((short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowMisc, (short)Visio.VisCellIndices.visLOFlags).FormulaU = "1"; vertices[node].get_CellsSRC((short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowShapeLayout, (short)Visio.VisCellIndices.visSLOPlowCode).FormulaU = "2"; } }