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 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); }
private static void ResolveMasters(DirectedGraphLayout layout_diagram, IVisio.Application app) { // for masters that are identified by their name and stencil, go find the actual master objects by // loading the specified stenciles var documents = app.Documents; var master_to_size = new Dictionary <IVisio.Master, VA.Drawing.Size>(); // Load and cache all the masters var loader = new MasterLoader(); foreach (var layout_shape in layout_diagram.Shapes) { loader.Add(layout_shape.MasterName, layout_shape.StencilName); } loader.Resolve(documents); // If no size was provided for the shape, then set the size based on the master var layoutshapes_without_size_info = layout_diagram.Shapes.Where(s => s.Size == null); foreach (var layoutshape in layoutshapes_without_size_info) { var master = loader.Get(layoutshape.MasterName, layoutshape.StencilName); var size = MsaglRenderer.TryGetValue(master_to_size, master.VisioMaster); if (!size.HasValue) { var master_bb = master.VisioMaster.GetBoundingBox(IVisio.VisBoundingBoxArgs.visBBoxUprightWH); size = master_bb.Size; master_to_size[master.VisioMaster] = size.Value; } layoutshape.Size = size.Value; } }
private static void _resolve_masters(DirectedGraphLayout dglayout, IVisio.Application app) { // for masters that are identified by their name and stencil, go find the actual master objects by // loading the specified stencils var documents = app.Documents; var master_to_size = new Dictionary <IVisio.Master, VA.Geometry.Size>(); // Load and cache all the masters var master_cache = new VA.Models.Utilities.MasterCache(); foreach (var layout_shape in dglayout.Nodes) { master_cache.Add(layout_shape.MasterName, layout_shape.StencilName); } master_cache.Resolve(documents); // If no size was provided for the shape, then set the size based on the master var layoutshapes_without_size_info = dglayout.Nodes.Where(s => s.Size == null); foreach (var layoutshape in layoutshapes_without_size_info) { var master = master_cache.Get(layoutshape.MasterName, layoutshape.StencilName); var size = MsaglRenderer._try_get_value(master_to_size, master.VisioMaster); if (!size.HasValue) { var master_bb = master.VisioMaster.GetBoundingBox(IVisio.VisBoundingBoxArgs.visBBoxUprightWH); size = master_bb.Size; master_to_size[master.VisioMaster] = size.Value; } layoutshape.Size = size.Value; } }
public static void Render(IVisio.Page page, DirectedGraphLayout directedGraphLayout, MsaglLayoutOptions options) { if (page == null) { throw new ArgumentNullException(nameof(page)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } var renderer = new MsaglRenderer(); renderer.LayoutOptions = options; renderer.Render(directedGraphLayout, page); page.ResizeToFitContents(renderer.LayoutOptions.ResizeBorderWidth); }
public void DirectedGraph_WithDynamicConnectors() { var directed_graph_drawing = this.create_sample_graph(); var visapp = this.GetVisioApplication(); var doc = this.GetNewDoc(); var page1 = visapp.ActivePage; var renderer = new VADG.MsaglRenderer(); renderer.LayoutOptions.UseDynamicConnectors = true; renderer.Render(page1, directed_graph_drawing); string output_filename = TestGlobals.TestHelper.GetOutputFilename(nameof(DirectedGraph_WithDynamicConnectors), ".vsd"); doc.SaveAs(output_filename); doc.Close(); }
public void DrawDirectedGraphDocument(GRAPH.DirectedGraphDocument dgdoc, GRAPH.DirectedGraphStyling dgstyling) { var cmdtarget = this._client.GetCommandTarget(CommandTargetFlags.RequireApplication); this._client.Output.WriteVerbose("Start rendering directed graph"); var app = cmdtarget.Application; this._client.Output.WriteVerbose("Creating a New Document For the Directed Graphs"); this._client.Output.WriteVerbose("Number of Layouts: {0}", dgdoc.Layouts.Count); this._client.Output.WriteVerbose("Template: {0}", dgdoc.Template); var doc = this._client.Document.NewDocumentFromTemplate(dgdoc.Template); int num_pages_created = 0; var doc_pages = doc.Pages; foreach (int i in Enumerable.Range(0, dgdoc.Layouts.Count)) { var dg_layout = dgdoc.Layouts[i]; // if this is the first page to draw // then reuse the initial empty page in the document // otherwise, create a new page. var page = num_pages_created == 0 ? app.ActivePage : doc_pages.Add(); this._client.Output.WriteVerbose("Rendering on page: \"{0}\",{1}", page.Name, i + 1); var renderer = new GRAPH.MsaglRenderer(); renderer.LayoutOptions.UseDynamicConnectors = false; renderer.Render(page, dg_layout); var targetpages = new VisioScripting.TargetPages(page); this._client.Page.ResizePageToFitContents(targetpages, dgdoc.BorderSize); this._client.View.SetZoomToObject(VisioScripting.TargetWindow.Auto, VisioScripting.Models.ZoomToObject.Page); this._client.Output.WriteVerbose("Finished rendering page"); num_pages_created++; } this._client.Output.WriteVerbose("Finished rendering all pages"); this._client.Output.WriteVerbose("Finished rendering directed graph."); }
public void RenderDirectedGraphWithCustomProps() { var d = new VADG.DirectedGraphLayout(); var n0 = d.AddNode("n0", "Untitled Node", "basflo_u.vss", "Decision"); n0.Size = new VA.Geometry.Size(3, 2); n0.CustomProperties = new CustomPropertyDictionary(); n0.CustomProperties["p1"] = new CustomPropertyCells("\"v1\""); n0.CustomProperties["p2"] = new CustomPropertyCells("\"v2\""); n0.CustomProperties["p3"] = new CustomPropertyCells("\"v3\""); var visapp = this.GetVisioApplication(); var doc = this.GetNewDoc(); var page1 = visapp.ActivePage; var renderer = new VADG.MsaglRenderer(); renderer.LayoutOptions.UseDynamicConnectors = true; renderer.Render(page1, d); Assert.IsNotNull(n0.VisioShape); var props_dic = CustomPropertyHelper.GetDictionary(n0.VisioShape, CellValueType.Formula); Assert.IsTrue(props_dic.Count >= 3); Assert.AreEqual("\"v1\"", props_dic["p1"].Value.Value); Assert.AreEqual("\"v2\"", props_dic["p2"].Value.Value); Assert.AreEqual("\"v3\"", props_dic["p3"].Value.Value); page1.Application.ActiveWindow.ViewFit = (short)IVisio.VisWindowFit.visFitPage; string output_filename = TestGlobals.TestHelper.GetOutputFilename(nameof(RenderDirectedGraphWithCustomProps), ".vsd"); doc.SaveAs(output_filename); doc.Close(); }
public void Render(IVisio.Page page, MsaglLayoutOptions options) { MsaglRenderer.Render(page, this, options); }