public Dom.Page CreateDomPage(DirectedGraphLayout dglayout, IVisio.Application vis, DirectedGraphStyling dgstyling) { var page_node = new Dom.Page(); MsaglRenderer._resolve_masters(dglayout, vis); var mg_graph = this._create_msagl_graph(dglayout); this._create_dom_shapes(page_node.Shapes, mg_graph, vis); if (this.LayoutOptions.UseDynamicConnectors) { this._create_dynamic_connector_edges(page_node.Shapes, mg_graph, dgstyling); } else { this._create_bezier_edges(page_node.Shapes, mg_graph); } // Additional Page properties page_node.PageLayoutCells.PlaceStyle = 1; page_node.PageLayoutCells.RouteStyle = 5; page_node.PageLayoutCells.AvenueSizeX = 2.0; page_node.PageLayoutCells.AvenueSizeY = 2.0; page_node.PageLayoutCells.LineRouteExt = 2; page_node.Size = this._visio_bb.Size; return(page_node); }
public Dom.Page CreateDOMPage(DirectedGraphLayout layout_diagram, IVisio.Application vis) { var page_node = new Dom.Page(); MsaglRenderer.ResolveMasters(layout_diagram, vis); var mg_graph = this.CreateMsaglGraph(layout_diagram); this.CreateDOMShapes(page_node.Shapes, mg_graph, vis); if (this.LayoutOptions.UseDynamicConnectors) { this.CreateDynamicConnectorEdges(page_node.Shapes, mg_graph); } else { this.CreateBezierEdges(page_node.Shapes, mg_graph); } // Additional Page properties page_node.PageCells.PlaceStyle = 1; page_node.PageCells.RouteStyle = 5; page_node.PageCells.AvenueSizeX = 2.0; page_node.PageCells.AvenueSizeY = 2.0; page_node.PageCells.LineRouteExt = 2; page_node.Size = this._layout_bb.Size; return(page_node); }
public void Render(IVisio.Page page) { if (page == null) { throw new ArgumentNullException(nameof(page)); } var nodes_to_draw = this.Nodes.Where(n => n.Draw).ToList(); var page_node = new Dom.Page(); var shape_nodes = new List <Dom.Shape>(nodes_to_draw.Count); foreach (var node in nodes_to_draw) { var shape_node = page_node.Shapes.Drop(node.Master, node.Rectangle.Center); if (node.Cells != null) { shape_node.Cells = node.Cells.ShallowCopy(); } shape_node.Cells.XFormWidth = node.Rectangle.Width; shape_node.Cells.XFormHeight = node.Rectangle.Height; if (!string.IsNullOrEmpty(node.Text)) { shape_node.Text = new VisioAutomation.Models.Text.Element(node.Text); } shape_nodes.Add(shape_node); } page_node.Shapes.Render(page); for (int i = 0; i < nodes_to_draw.Count; i++) { var node = nodes_to_draw[i]; var shape_node = shape_nodes[i]; node.Shape = shape_node.VisioShape; node.ShapeID = shape_node.VisioShapeID; } }
public void Render(IVisio.Page page, DirectedGraphLayout directedGraphLayout, VisioLayoutOptions options) { // This is Visio-based render - it does NOT use MSAGL if (page == null) { throw new System.ArgumentNullException(nameof(page)); } if (options == null) { throw new System.ArgumentNullException(nameof(options)); } var page_node = new Dom.Page(); double x = 0; double y = 1; foreach (var shape in directedGraphLayout.Shapes) { var shape_nodes = page_node.Shapes.Drop(shape.MasterName, shape.StencilName, x, y); shape.DomNode = shape_nodes; shape.DomNode.Text = new VisioAutomation.Models.Text.Element(shape.Label); x += 1.0; } foreach (var connector in directedGraphLayout.Connectors) { var connector_node = page_node.Shapes.Connect("Dynamic Connector", "connec_u.vss", connector.From.DomNode, connector.To.DomNode); connector.DomNode = connector_node; connector.DomNode.Text = new VisioAutomation.Models.Text.Element(connector.Label); } page_node.ResizeToFit = true; page_node.ResizeToFitMargin = new VisioAutomation.Drawing.Size(0.5, 0.5); if (options.Layout != null) { page_node.Layout = options.Layout; } page_node.Render(page); }
public void Render(IVisio.Page page, DirectedGraphLayout dglayout) { // This is Visio-based render - it does NOT use MSAGL if (page == null) { throw new System.ArgumentNullException(nameof(page)); } if (this.Styling == null) { throw new System.ArgumentNullException(nameof(this.Styling)); } var page_node = new Dom.Page(); double x = 0; double y = 1; foreach (var shape in dglayout.Nodes) { var shape_nodes = page_node.Shapes.Drop(shape.MasterName, shape.StencilName, x, y); shape.DomNode = shape_nodes; shape.DomNode.Text = new VisioAutomation.Models.Text.Element(shape.Label); x += 1.0; } foreach (var connector in dglayout.Edges) { var connector_node = page_node.Shapes.Connect(this.Styling.EdgeMasterName, this.Styling.EdgeStencilName, connector.From.DomNode, connector.To.DomNode); connector.DomNode = connector_node; connector.DomNode.Text = new VisioAutomation.Models.Text.Element(connector.Label); } page_node.ResizeToFit = true; page_node.ResizeToFitMargin = new VisioAutomation.Geometry.Size(0.5, 0.5); if (this.LayoutOptions.VisioLayoutStyle != null) { page_node.Layout = this.LayoutOptions.VisioLayoutStyle; } page_node.Render(page); }
internal void RenderToVisio(Drawing drawing, IVisio.Page page) { if (drawing == null) { throw new System.ArgumentNullException(nameof(drawing)); } if (page == null) { throw new System.ArgumentNullException(nameof(page)); } if (drawing.Root == null) { throw new System.ArgumentException("Tree has root node set to null", nameof(drawing)); } const double border_width = 0.5; // Construct a layout tree from the hierarchy var treenodes = GenTreeOps.Algorithms.CopyTree( drawing.Root, n => n.Children, n => this.node_to_layout_node(n), (p, c) => p.AddChild(c)); // Perform the layout var layout = new InternalTree.TreeLayout <object>(); layout.Options.Direction = this.map_direction2(this.LayoutOptions.Direction); layout.Options.LevelSeparation = 1; layout.Options.SiblingSeparation = 0.25; layout.Options.SubtreeSeparation = 1; layout.Root.AddChild(treenodes[0]); layout.PerformLayout(); // Render the Document in Visio var bb = layout.GetBoundingBoxOfTree(); var app = page.Application; var documents = app.Documents; var basic_stencil = documents.OpenStencil(TreeLayout.basic_stencil_name); var connectors_stencil = documents.OpenStencil(TreeLayout.connectors_stencil_name); var basic_masters = basic_stencil.Masters; var connectors_masters = connectors_stencil.Masters; var node_master = basic_masters[this.rect_master_name]; var connector_master = connectors_masters[this.dc_master_name]; var page_node = new Dom.Page(); var page_size = bb.Size.Add(border_width * 2, border_width * 2.0); // fixup the nodes so that they render on the page foreach (var i in treenodes) { i.Position = i.Position.Add(border_width, border_width); } var centerpoints = treenodes.Select(tn => tn.Rect.Center).ToList(); var master_nodes = centerpoints.Select(cp => page_node.Shapes.Drop(node_master, cp)).ToList(); // For each OrgChart object, attach the shape that corresponds to it foreach (int i in Enumerable.Range(0, treenodes.Count)) { var tree_node = (Node)treenodes[i].Data; Dom.Shape master_node = master_nodes[i]; tree_node.DOMNode = master_node; if (tree_node.Cells != null) { master_node.Cells = tree_node.Cells.ShallowCopy(); } master_node.Cells.XFormWidth = treenodes[i].Size.Width; master_node.Cells.XFormHeight = treenodes[i].Size.Height; master_node.Text = tree_node.Text; } if (this.LayoutOptions.ConnectorType == ConnectorType.DynamicConnector) { var orgchart_nodes = treenodes.Select(tn => tn.Data).Cast <Node>(); foreach (var parent in orgchart_nodes) { foreach (var child in parent.Children) { var parent_shape = (Dom.BaseShape)parent.DOMNode; var child_shape = (Dom.BaseShape)child.DOMNode; var connector = page_node.Shapes.Connect(connector_master, parent_shape, child_shape); connector.Cells = this.LayoutOptions.ConnectorCells; } } } else if (this.LayoutOptions.ConnectorType == ConnectorType.CurvedBezier) { foreach (var connection in layout.EnumConnections()) { var bez = layout.GetConnectionBezier(connection); var shape = page_node.Shapes.DrawBezier(bez); shape.Cells = this.LayoutOptions.ConnectorCells; } } else if (this.LayoutOptions.ConnectorType == ConnectorType.PolyLine) { foreach (var connection in layout.EnumConnections()) { var polyline = layout.GetConnectionPolyline(connection); var shape = page_node.Shapes.DrawPolyLine(polyline); shape.Cells = this.LayoutOptions.ConnectorCells; } } else { string msg = "Unsupported Connector Type"; throw new System.ArgumentException(msg); } page_node.Size = page_size; page_node.Render(page); // Attach all the orgchart nodes to the Visio shapes that were created foreach (int i in Enumerable.Range(0, treenodes.Count)) { var orgnode = (Node)treenodes[i].Data; var shape = (Dom.BaseShape)orgnode.DOMNode; orgnode.VisioShape = shape.VisioShape; } }
public void Render(IVisio.Application app) { var orgchartdrawing = this; if (orgchartdrawing == null) { throw new System.ArgumentNullException(nameof(orgchartdrawing)); } if (app == null) { throw new System.ArgumentNullException(nameof(app)); } if (orgchartdrawing.OrgCharts.Count < 1) { throw new System.ArgumentException("orgchart must have at least one root"); } foreach (var root in orgchartdrawing.OrgCharts) { if (root == null) { throw new System.ArgumentException("Org chart has root node set to null"); } } var ver = Application.ApplicationHelper.GetVersion(app); int majorver = ver.Major; bool is_visio_2013 = majorver >= 15; const string orgchart_vst = "orgch_u.vst"; string orgchart_master_node_name = is_visio_2013 ? "Position Belt" : "Position"; const string dyncon_master_name = "Dynamic connector"; const double border_width = 0.5; var doc_node = new Dom.Document(orgchart_vst, IVisio.VisMeasurementSystem.visMSUS); var trees = new List <IList <Node <object> > >(); foreach (var root in orgchartdrawing.OrgCharts) { // Construct a layout tree from the hierarchy var treenodes = GenTreeOps.Algorithms.CopyTree( orgchartdrawing.OrgCharts[0], n => n.Children, n => this.node_to_layout_node(n), (p, c) => p.AddChild(c)); trees.Add(treenodes); // Perform the layout var layout = new TreeLayout <object>(); layout.Options.Direction = this.map_direction2(this.LayoutOptions.Direction); layout.Options.LevelSeparation = 1; layout.Options.SiblingSeparation = 0.25; layout.Options.SubtreeSeparation = 1; layout.Root.AddChild(treenodes[0]); layout.PerformLayout(); // Render the Document in Visio var bb = layout.GetBoundingBoxOfTree(); // vis.ActiveWindow.ShowConnectPoints = 0; var page_node = new Dom.Page(); doc_node.Pages.Add(page_node); // fixup the nodes so that they render on the page foreach (var i in treenodes) { i.Position = i.Position.Add(border_width, border_width); } var centerpoints = new Drawing.Point[treenodes.Count]; foreach (int i in Enumerable.Range(0, treenodes.Count)) { centerpoints[i] = treenodes[i].Rect.Center; } // TODO: Add support for Left to right , Right to Left, and Bottom to Top Layouts var vmasters = centerpoints .Select(centerpoint => page_node.Shapes.Drop(orgchart_master_node_name, null, centerpoint)) .ToList(); // For each OrgChart object, attach the shape that corresponds to it foreach (int i in Enumerable.Range(0, treenodes.Count)) { var orgnode = (Node)treenodes[i].Data; orgnode.DOMNode = vmasters[i]; vmasters[i].Cells.XFormWidth = treenodes[i].Size.Width; vmasters[i].Cells.XFormHeight = treenodes[i].Size.Height; } if (this.LayoutOptions.UseDynamicConnectors) { var orgchart_nodes = treenodes.Select(tn => tn.Data).Cast <Node>(); foreach (var parent in orgchart_nodes) { foreach (var child in parent.Children) { var parent_shape = (Dom.BaseShape)parent.DOMNode; var child_shape = (Dom.BaseShape)child.DOMNode; var connector = page_node.Shapes.Connect(dyncon_master_name, null, parent_shape, child_shape); } } } else { foreach (var connection in layout.EnumConnections()) { var bez = layout.GetConnectionBezier(connection); page_node.Shapes.DrawBezier(bez); } } // Set the Text Labels on each Org node foreach (int i in Enumerable.Range(0, treenodes.Count)) { var orgnode = (Node)treenodes[i].Data; var shape = (Dom.BaseShape)orgnode.DOMNode; shape.Text = new VisioAutomation.Models.Text.TextElement(orgnode.Text); } var page_size_with_border = bb.Size.Add(border_width * 2, border_width * 2.0); page_node.Size = page_size_with_border; page_node.ResizeToFit = true; page_node.ResizeToFitMargin = new Drawing.Size(border_width * 2, border_width * 2.0); } // finish handling root node var doc = doc_node.Render(app); foreach (var treenodes in trees) { var orgnodes = treenodes.Select(i => i.Data).Cast <Node>(); var orgnodes_with_urls = orgnodes.Where(n => n.URL != null); var all_urls = orgnodes_with_urls.Select(n => new { orgnode = n, shape = (Dom.BaseShape)n.DOMNode, url = n.URL.Trim() }); foreach (var url in all_urls) { var hlink = url.orgnode.VisioShape.Hyperlinks.Add(); hlink.Name = "Row_1"; hlink.Address = url.orgnode.URL; } // Attach all the orgchart nodes to the Visio shapes that were created foreach (int i in Enumerable.Range(0, treenodes.Count)) { var orgnode = (Node)treenodes[i].Data; var shape = (Dom.BaseShape)orgnode.DOMNode; orgnode.VisioShape = shape.VisioShape; } } }