Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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();
        }
Пример #7
0
        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);
 }