public void BoxLayout_Test_single_node_padding() { var layout = new BoxL.BoxLayout(); layout.Root = new BoxL.Container(BoxL.Direction.BottomToTop); var root = layout.Root; var n1 = root.AddBox(10, 5); root.PaddingBottom = 1.0; root.PaddingLeft = 1.0; root.PaddingRight = 1.0; root.PaddingTop = 1.0; layout.PerformLayout(); double delta = 0.00000001; AssertVA.AreEqual(1.0, 1.0, 11, 6, n1.Rectangle, delta); }
public static void Render(BOXMODEL.BoxLayout layout, IVisio.Document doc) { layout.PerformLayout(); var page1 = doc.Pages.Add(); // and tinker with it // render var nodes = layout.Nodes.ToList(); foreach (var node in nodes) { var shape = page1.DrawRectangle(node.Rectangle); node.Data = shape; } var root_shape = (IVisio.Shape)layout.Root.Data; root_shape.CellsU["FillForegnd"].FormulaForceU = "rgb(240,240,240)"; var margin = new VA.Drawing.Size(0.5, 0.5); page1.ResizeToFitContents(margin); }
public void BoxLayout_Test_empty() { var layout = new BoxL.BoxLayout(); layout.Root = new BoxL.Container(BoxL.Direction.BottomToTop); Assert.IsNotNull(layout.Root); bool thrown = false; try { layout.PerformLayout(); } catch (VA.AutomationException) { thrown = true; } if (!thrown) { Assert.Fail(); } }
public static void BoxLayout_SimpleCases() { // Create a blank canvas in Visio var app = SampleEnvironment.Application; var documents = app.Documents; var doc = documents.Add(string.Empty); // Create a simple Column var layout1 = new BOXMODEL.BoxLayout(); layout1.Root = new BOXMODEL.Container( BOXMODEL.Direction.BottomToTop); layout1.Root.AddBox(1,2); layout1.Root.AddBox(1,1); layout1.Root.AddBox(0.5, 0.5); // You can set the min height and width of a container var layout2 = new BOXMODEL.BoxLayout(); layout2.Root = new BOXMODEL.Container(BOXMODEL.Direction.BottomToTop,3,5); layout2.Root.AddBox(1, 2); layout2.Root.AddBox(1, 1); layout2.Root.AddBox(0.5, 0.5); // For vertical containers, you can layout shapes bottom-to-top or top-to-bottom var layout3 = new BOXMODEL.BoxLayout(); layout3.Root = new BOXMODEL.Container(BOXMODEL.Direction.TopToBottom,3,5); layout3.Root.AddBox(1, 2); layout3.Root.AddBox(1, 1); layout3.Root.AddBox(0.5, 0.5); // Now switch to horizontal containers var layout4 = new BOXMODEL.BoxLayout(); layout4.Root = new BOXMODEL.Container(BOXMODEL.Direction.RightToLeft,3,5); layout4.Root.AddBox(1, 2); layout4.Root.AddBox(1, 1); layout4.Root.AddBox(0.5, 0.5); // For Columns, you can tell the children how to horizontally align var layout5 = new BOXMODEL.BoxLayout(); layout5.Root = new BOXMODEL.Container(BOXMODEL.Direction.BottomToTop,3,0); var b51 = layout5.Root.AddBox(1, 2); var b52 = layout5.Root.AddBox(1, 1); var b53 = layout5.Root.AddBox(0.5, 0.5); b51.HAlignToParent = BOXMODEL.AlignmentHorizontal.Left; b52.HAlignToParent = BOXMODEL.AlignmentHorizontal.Center; b53.HAlignToParent = BOXMODEL.AlignmentHorizontal.Right; // For Rows , you can tell the children how to vertially align var layout6 = new BOXMODEL.BoxLayout(); layout6.Root = new BOXMODEL.Container(BOXMODEL.Direction.LeftToRight,0,5); var b61 = layout6.Root.AddBox(1, 2); var b62 = layout6.Root.AddBox(1, 1); var b63 = layout6.Root.AddBox(0.5, 0.5); b61.VAlignToParent = BOXMODEL.AlignmentVertical.Bottom; b62.VAlignToParent = BOXMODEL.AlignmentVertical.Center; b63.VAlignToParent = BOXMODEL.AlignmentVertical.Top; Util.Render(layout1, doc); Util.Render(layout2, doc); Util.Render(layout3, doc); Util.Render(layout4, doc); Util.Render(layout5, doc); Util.Render(layout6, doc); }
private static BOXMODEL.BoxLayout CreateTwoLevelLayout(List<string[]> data) { double itemsep = 0.0; var major_group_direction = BOXMODEL.Direction.LeftToRight; var minor_group_direction = BOXMODEL.Direction.TopToBottom; var name_to_major_group = new Dictionary<string, BOXMODEL.Container>(); var name_to_minor_group = new Dictionary<string, BOXMODEL.Container>(); var layout1 = new BOXMODEL.BoxLayout(); layout1.Root = new BOXMODEL.Container(major_group_direction); var major_cells = new VA.DOM.ShapeCells(); major_cells.FillForegnd = "rgb(245,245,245)"; major_cells.CharFont = 0; major_cells.CharSize = "12pt"; major_cells.ParaHorizontalAlign = "0"; major_cells.VerticalAlign = "0"; major_cells.LineWeight = "0"; major_cells.LinePattern = "0"; var minor_cells = new VA.DOM.ShapeCells(); minor_cells.FillForegnd = "rgb(230,230,230)"; minor_cells.CharFont = 0; minor_cells.CharSize = "10pt"; minor_cells.ParaHorizontalAlign = "0"; minor_cells.VerticalAlign = "0"; minor_cells.LineWeight = "0"; minor_cells.LinePattern = "0"; var item_cells = new VA.DOM.ShapeCells(); item_cells.CharFont = 0; item_cells.FillPattern = "0"; item_cells.CharSize = "8pt"; item_cells.ParaHorizontalAlign = "0"; item_cells.VerticalAlign = "0"; item_cells.LineWeight = "0"; item_cells.LinePattern = "0"; foreach (var row in data) { var majorname = row[0]; var minorname = row[1]; var itemname = row[2]; BOXMODEL.Container majorcnt; if (name_to_major_group.ContainsKey(majorname)) { majorcnt = name_to_major_group[majorname]; } else { majorcnt = layout1.Root.AddContainer(minor_group_direction, 1, 1); var major_info = new TwoLevelInfo(); major_info.Text = majorname; major_info.Render = true; major_info.ShapeCells = major_cells; majorcnt.Data = major_info; name_to_major_group[majorname] = majorcnt; BOXMODEL.Box headerbox = majorcnt.AddBox(2, 0.25); } BOXMODEL.Container minorcnt; var minorkey = majorname + "___" + minorname; if (name_to_minor_group.ContainsKey(minorkey)) { minorcnt = name_to_minor_group[minorkey]; } else { minorcnt = majorcnt.AddContainer(minor_group_direction); minorcnt.ChildSpacing = itemsep; var minor_info = new TwoLevelInfo(); minor_info.Text = minorname; minor_info.Render = true; minor_info.ShapeCells = minor_cells; minorcnt.Data = minor_info; name_to_minor_group[minorkey] = minorcnt; BOXMODEL.Box headerbox = minorcnt.AddBox(2, 0.25); } BOXMODEL.Box itembox = minorcnt.AddBox(2, 0.25); var item_info = new TwoLevelInfo(); item_info.Text = itemname; item_info.Render = true; item_info.ShapeCells = item_cells; itembox.Data = item_info; } return layout1; }
public static void FontGlyphComparision(IVisio.Document doc, string[] fontnames, List<string> samplechars) { var layout = new BoxL.BoxLayout(); var root = new BoxL.Container( BoxL.Direction.TopToBottom); layout.Root = root; root.ChildSpacing = 0.5; var nodedata = new NodeData(); nodedata.Render = false; root.Data = nodedata; var fontname_cells = new VA.DOM.ShapeCells(); fontname_cells.FillPattern = 0; fontname_cells.LinePattern = 0; fontname_cells.LineWeight = 0.0; fontname_cells.ParaHorizontalAlign = 0; fontname_cells.CharSize = "36pt"; var charbox_cells = new VA.DOM.ShapeCells(); charbox_cells.FillPattern = 0; charbox_cells.LinePattern = 1; charbox_cells.LineWeight = 0.0; charbox_cells.LineColor = "rgb(150,150,150)"; charbox_cells.ParaHorizontalAlign = 1; charbox_cells.CharSize = "24pt"; foreach (string fontname in fontnames) { var fontname_box = root.AddNodeEx(5, 0.5, fontname); var fontname_box_data = (NodeData) fontname_box.Data; fontname_box_data.Cells = fontname_cells; var font_box = root.AddContainer(BoxL.Direction.TopToBottom); font_box.ChildSpacing = 0.25; var font_vox_data = (NodeData) font_box.Data; if (font_vox_data != null) { font_vox_data.Render = false; } int numcols = 17; int numrows = 5; int numcells = numcols*numrows; foreach (int row in Enumerable.Range(0, numrows)) { var row_box = font_box.AddContainer(BoxL.Direction.LeftToRight); row_box.ChildSpacing = 0.25; var row_box_data = new NodeData(); row_box_data.Render = false; row_box.Data = row_box_data; foreach (int col in Enumerable.Range(0, numcols)) { int charindex = (col + (numcols*row))%numcells; string curchar = samplechars[charindex]; var cell_box = row_box.AddNodeEx(0.50, 0.50, curchar); var cell_box_data = (NodeData) cell_box.Data; cell_box_data.Font = fontname; cell_box_data.Cells = charbox_cells; } } } layout.PerformLayout(); var page = doc.Pages.Add(); var domshapescol = new VA.DOM.ShapeList(); foreach (var node in layout.Nodes) { if (node.Data == null) { continue; } var node_data = (NodeData)node.Data; if (node_data.Render == false) { continue; } var shape_node = domshapescol.Drop("Rectangle", "basic_u.vss", node.Rectangle); var cells = node_data.Cells; if (cells == null) { cells = new VA.DOM.ShapeCells(); } else { cells = node_data.Cells.ShallowCopy(); } if (node_data.Font != null) { shape_node.CharFontName = node_data.Font; } shape_node.Cells = cells; shape_node.Text = new VA.Text.Markup.TextElement( node_data.Text ); } domshapescol.Render(page); var bordersize = new VA.Drawing.Size(0.5, 0.5); page.ResizeToFitContents(bordersize); }
private static BOXMODEL.BoxLayout CreateTwoLevelLayout(List <string[]> data) { double itemsep = 0.0; var major_group_direction = BOXMODEL.Direction.LeftToRight; var minor_group_direction = BOXMODEL.Direction.TopToBottom; var name_to_major_group = new Dictionary <string, BOXMODEL.Container>(); var name_to_minor_group = new Dictionary <string, BOXMODEL.Container>(); var layout1 = new BOXMODEL.BoxLayout(); layout1.Root = new BOXMODEL.Container(major_group_direction); var major_cells = new VA.DOM.ShapeCells(); major_cells.FillForegnd = "rgb(245,245,245)"; major_cells.CharFont = 0; major_cells.CharSize = "12pt"; major_cells.ParaHorizontalAlign = "0"; major_cells.VerticalAlign = "0"; major_cells.LineWeight = "0"; major_cells.LinePattern = "0"; var minor_cells = new VA.DOM.ShapeCells(); minor_cells.FillForegnd = "rgb(230,230,230)"; minor_cells.CharFont = 0; minor_cells.CharSize = "10pt"; minor_cells.ParaHorizontalAlign = "0"; minor_cells.VerticalAlign = "0"; minor_cells.LineWeight = "0"; minor_cells.LinePattern = "0"; var item_cells = new VA.DOM.ShapeCells(); item_cells.CharFont = 0; item_cells.FillPattern = "0"; item_cells.CharSize = "8pt"; item_cells.ParaHorizontalAlign = "0"; item_cells.VerticalAlign = "0"; item_cells.LineWeight = "0"; item_cells.LinePattern = "0"; foreach (var row in data) { var majorname = row[0]; var minorname = row[1]; var itemname = row[2]; BOXMODEL.Container majorcnt; if (name_to_major_group.ContainsKey(majorname)) { majorcnt = name_to_major_group[majorname]; } else { majorcnt = layout1.Root.AddContainer(minor_group_direction, 1, 1); var major_info = new TwoLevelInfo(); major_info.Text = majorname; major_info.Render = true; major_info.ShapeCells = major_cells; majorcnt.Data = major_info; name_to_major_group[majorname] = majorcnt; BOXMODEL.Box headerbox = majorcnt.AddBox(2, 0.25); } BOXMODEL.Container minorcnt; var minorkey = majorname + "___" + minorname; if (name_to_minor_group.ContainsKey(minorkey)) { minorcnt = name_to_minor_group[minorkey]; } else { minorcnt = majorcnt.AddContainer(minor_group_direction); minorcnt.ChildSpacing = itemsep; var minor_info = new TwoLevelInfo(); minor_info.Text = minorname; minor_info.Render = true; minor_info.ShapeCells = minor_cells; minorcnt.Data = minor_info; name_to_minor_group[minorkey] = minorcnt; BOXMODEL.Box headerbox = minorcnt.AddBox(2, 0.25); } BOXMODEL.Box itembox = minorcnt.AddBox(2, 0.25); var item_info = new TwoLevelInfo(); item_info.Text = itemname; item_info.Render = true; item_info.ShapeCells = item_cells; itembox.Data = item_info; } return(layout1); }
public static void BoxLayout_SimpleCases() { // Create a blank canvas in Visio var app = SampleEnvironment.Application; var documents = app.Documents; var doc = documents.Add(string.Empty); // Create a simple Column var layout1 = new BOXMODEL.BoxLayout(); layout1.Root = new BOXMODEL.Container(BOXMODEL.Direction.BottomToTop); layout1.Root.AddBox(1, 2); layout1.Root.AddBox(1, 1); layout1.Root.AddBox(0.5, 0.5); // You can set the min height and width of a container var layout2 = new BOXMODEL.BoxLayout(); layout2.Root = new BOXMODEL.Container(BOXMODEL.Direction.BottomToTop, 3, 5); layout2.Root.AddBox(1, 2); layout2.Root.AddBox(1, 1); layout2.Root.AddBox(0.5, 0.5); // For vertical containers, you can layout shapes bottom-to-top or top-to-bottom var layout3 = new BOXMODEL.BoxLayout(); layout3.Root = new BOXMODEL.Container(BOXMODEL.Direction.TopToBottom, 3, 5); layout3.Root.AddBox(1, 2); layout3.Root.AddBox(1, 1); layout3.Root.AddBox(0.5, 0.5); // Now switch to horizontal containers var layout4 = new BOXMODEL.BoxLayout(); layout4.Root = new BOXMODEL.Container(BOXMODEL.Direction.RightToLeft, 3, 5); layout4.Root.AddBox(1, 2); layout4.Root.AddBox(1, 1); layout4.Root.AddBox(0.5, 0.5); // For Columns, you can tell the children how to horizontally align var layout5 = new BOXMODEL.BoxLayout(); layout5.Root = new BOXMODEL.Container(BOXMODEL.Direction.BottomToTop, 3, 0); var b51 = layout5.Root.AddBox(1, 2); var b52 = layout5.Root.AddBox(1, 1); var b53 = layout5.Root.AddBox(0.5, 0.5); b51.HAlignToParent = BOXMODEL.AlignmentHorizontal.Left; b52.HAlignToParent = BOXMODEL.AlignmentHorizontal.Center; b53.HAlignToParent = BOXMODEL.AlignmentHorizontal.Right; // For Rows , you can tell the children how to vertially align var layout6 = new BOXMODEL.BoxLayout(); layout6.Root = new BOXMODEL.Container(BOXMODEL.Direction.LeftToRight, 0, 5); var b61 = layout6.Root.AddBox(1, 2); var b62 = layout6.Root.AddBox(1, 1); var b63 = layout6.Root.AddBox(0.5, 0.5); b61.VAlignToParent = BOXMODEL.AlignmentVertical.Bottom; b62.VAlignToParent = BOXMODEL.AlignmentVertical.Center; b63.VAlignToParent = BOXMODEL.AlignmentVertical.Top; Util.Render(layout1, doc); Util.Render(layout2, doc); Util.Render(layout3, doc); Util.Render(layout4, doc); Util.Render(layout5, doc); Util.Render(layout6, doc); }
public static void FontGlyphComparision(IVisio.Document doc, string[] fontnames, List <string> samplechars) { var layout = new BoxL.BoxLayout(); var root = new BoxL.Container(BoxL.Direction.TopToBottom); layout.Root = root; root.ChildSpacing = 0.5; var nodedata = new NodeData(); nodedata.Render = false; root.Data = nodedata; var fontname_cells = new VA.DOM.ShapeCells(); fontname_cells.FillPattern = 0; fontname_cells.LinePattern = 0; fontname_cells.LineWeight = 0.0; fontname_cells.ParaHorizontalAlign = 0; fontname_cells.CharSize = "36pt"; var charbox_cells = new VA.DOM.ShapeCells(); charbox_cells.FillPattern = 0; charbox_cells.LinePattern = 1; charbox_cells.LineWeight = 0.0; charbox_cells.LineColor = "rgb(150,150,150)"; charbox_cells.ParaHorizontalAlign = 1; charbox_cells.CharSize = "24pt"; foreach (string fontname in fontnames) { var fontname_box = root.AddNodeEx(5, 0.5, fontname); var fontname_box_data = (NodeData)fontname_box.Data; fontname_box_data.Cells = fontname_cells; var font_box = root.AddContainer(BoxL.Direction.TopToBottom); font_box.ChildSpacing = 0.25; var font_vox_data = (NodeData)font_box.Data; if (font_vox_data != null) { font_vox_data.Render = false; } int numcols = 17; int numrows = 5; int numcells = numcols * numrows; foreach (int row in Enumerable.Range(0, numrows)) { var row_box = font_box.AddContainer(BoxL.Direction.LeftToRight); row_box.ChildSpacing = 0.25; var row_box_data = new NodeData(); row_box_data.Render = false; row_box.Data = row_box_data; foreach (int col in Enumerable.Range(0, numcols)) { int charindex = (col + (numcols * row)) % numcells; string curchar = samplechars[charindex]; var cell_box = row_box.AddNodeEx(0.50, 0.50, curchar); var cell_box_data = (NodeData)cell_box.Data; cell_box_data.Font = fontname; cell_box_data.Cells = charbox_cells; } } } layout.PerformLayout(); var page = doc.Pages.Add(); var domshapescol = new VA.DOM.ShapeList(); foreach (var node in layout.Nodes) { if (node.Data == null) { continue; } var node_data = (NodeData)node.Data; if (node_data.Render == false) { continue; } var shape_node = domshapescol.Drop("Rectangle", "basic_u.vss", node.Rectangle); var cells = node_data.Cells; if (cells == null) { cells = new VA.DOM.ShapeCells(); } else { cells = node_data.Cells.ShallowCopy(); } if (node_data.Font != null) { shape_node.CharFontName = node_data.Font; } shape_node.Cells = cells; shape_node.Text = new VA.Text.Markup.TextElement(node_data.Text); } domshapescol.Render(page); var bordersize = new VA.Drawing.Size(0.5, 0.5); page.ResizeToFitContents(bordersize); }