public static void SnapSize(IVisio.Page page, VisioScripting.Models.TargetShapeIDs target, VisioAutomation.Geometry.Size snapsize, VisioAutomation.Geometry.Size minsize) { var input_xfrms = VisioScripting.Models.ShapeXFormData.Get(page, target); var sizes = new List <VisioAutomation.Geometry.Size>(input_xfrms.Count); var grid = new VisioScripting.Models.SnappingGrid(snapsize); foreach (var input_xfrm in input_xfrms) { // First snap the size to the grid double old_w = input_xfrm.Width; double old_h = input_xfrm.Height; var input_size = new VisioAutomation.Geometry.Size(old_w, old_h); var snapped_size = grid.Snap(input_size); // then account for any minum size requirements double new_w = System.Math.Max(snapped_size.Width, minsize.Width); double new_h = System.Math.Max(snapped_size.Height, minsize.Height); sizes.Add(new VisioAutomation.Geometry.Size(new_w, new_h)); } // Now apply the updates to the sizes ModifySizes(page, target.ShapeIDs, sizes); }
public void Internal_ValidateSnappingGrid() { double delta = 0.000000001; var g1 = new VisioScripting.Models.SnappingGrid(1.0, 1.0); AssertUtil.AssertSnap((0.0, 0.0), g1, (0.0, 0.0), delta); AssertUtil.AssertSnap((0.0, 0.0), g1, (0.3, 0.3), delta); AssertUtil.AssertSnap((0.0, 0.0), g1, (0.49999, 0.49999), delta); AssertUtil.AssertSnap((1.0, 1.0), g1, (0.5, 0.5), delta); AssertUtil.AssertSnap((1.0, 1.0), g1, (0.500001, 0.500001), delta); AssertUtil.AssertSnap((1.0, 1.0), g1, (1.0, 1.0), delta); AssertUtil.AssertSnap((1.0, 1.0), g1, (1.3, 1.3), delta); AssertUtil.AssertSnap((1.0, 1.0), g1, (1.49999, 1.49999), delta); AssertUtil.AssertSnap((2.0, 2.0), g1, (1.5, 1.5), delta); AssertUtil.AssertSnap((2.0, 2.0), g1, (1.500001, 1.500001), delta); var g2 = new VisioScripting.Models.SnappingGrid(1.0, 0.3); AssertUtil.AssertSnap((0.0, 0.0), g2, (0.0, 0.0), delta); AssertUtil.AssertSnap((0.0, 0.0), g2, (0.3, 0.1), delta); AssertUtil.AssertSnap((0.0, 0.0), g2, (0.49999, 0.149), delta); AssertUtil.AssertSnap((1.0, 0.3), g2, (0.5, 0.3), delta); AssertUtil.AssertSnap((1.0, 0.3), g2, (0.500001, 0.30001), delta); }
public static void SnapCorner(IVisio.Page page, VisioScripting.Models.TargetShapeIDs target, VisioAutomation.Geometry.Size snapsize, VisioScripting.Models.SnapCornerPosition corner) { // First caculate the new transforms var snap_grid = new VisioScripting.Models.SnappingGrid(snapsize); var input_xfrms = VisioScripting.Models.ShapeXFormData.Get(page, target); var output_xfrms = new List <VisioAutomation.Geometry.Point>(input_xfrms.Count); foreach (var input_xfrm in input_xfrms) { var old_rect = input_xfrm.GetRectangle(); var old_lower_left = old_rect.LowerLeft; var new_lower_left = snap_grid.Snap(old_lower_left); var new_pin_position = ArrangeHelper.GetPinPositionForCorner(input_xfrm, new_lower_left, corner); var output_xfrm = new VisioAutomation.Geometry.Point(new_pin_position.X, new_pin_position.Y); output_xfrms.Add(output_xfrm); } ModifyPinPositions(page, target.ShapeIDs, output_xfrms); }