public void SetShapeCells(VisioScripting.Models.TargetShapeIDs targets, Dictionary <string, string> hashtable, bool blast_guards, bool test_circular) { var writer = new SidSrcWriter(); writer.BlastGuards = blast_guards; writer.TestCircular = test_circular; var cellmap = VisioScripting.Models.CellSrcDictionary.GetCellMapForShapes(); var valuemap = new VisioScripting.Models.CellValueDictionary(cellmap, hashtable); foreach (var shape_id in targets.ShapeIDs) { foreach (var cellname in valuemap.Keys) { string cell_value = valuemap[cellname]; var cell_src = valuemap.GetSrc(cellname); writer.SetFormula((short)shape_id, cell_src, cell_value); } } var surface = this._client.ShapeSheet.GetShapeSheetSurface(); this._client.WriteVerbose("BlastGuards: {0}", blast_guards); this._client.WriteVerbose("TestCircular: {0}", test_circular); this._client.WriteVerbose("Number of Shapes : {0}", targets.ShapeIDs.Count); using (var undoscope = this._client.Application.NewUndoScope("Set Shape Cells")) { this._client.WriteVerbose("Start Update"); writer.Commit(surface); this._client.WriteVerbose("End Update"); } }
public void SetShapeCells(VisioScripting.Models.TargetShapeIDs targets, System.Action <SidSrcWriter, short> apply_cells, bool blast_guards, bool test_circular) { var writer = new SidSrcWriter(); writer.BlastGuards = blast_guards; writer.TestCircular = test_circular; foreach (var shape_id in targets.ShapeIDs) { apply_cells(writer, (short)shape_id); } var surface = this._client.ShapeSheet.GetShapeSheetSurface(); this._client.WriteVerbose("BlastGuards: {0}", blast_guards); this._client.WriteVerbose("TestCircular: {0}", test_circular); this._client.WriteVerbose("Number of Shapes : {0}", targets.ShapeIDs.Count); using (var undoscope = this._client.Application.NewUndoScope("Set Shape Cells")) { this._client.WriteVerbose("Start Update"); writer.Commit(surface); this._client.WriteVerbose("End Update"); } }
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); }
internal static List <int> SortShapesByPosition(IVisio.Page page, VisioScripting.Models.TargetShapeIDs targets, VisioScripting.Models.ShapeRelativePosition pos) { // First get the transforms of the shapes on the given axis var xforms = VisioScripting.Models.ShapeXFormData.Get(page, targets); // Then, sort the shapeids pased on the corresponding value in the results var sorted_shape_ids = Enumerable.Range(0, targets.ShapeIDs.Count) .Select(i => new { index = i, shapeid = targets.ShapeIDs[i], pos = ArrangeHelper.GetPositionOnShape(xforms[i], pos) }) .OrderBy(i => i.pos) .Select(i => i.shapeid) .ToList(); return(sorted_shape_ids); }
public static void DistributeWithSpacing(IVisio.Page page, VisioScripting.Models.TargetShapeIDs target, VisioScripting.Models.Axis axis, double spacing) { if (spacing < 0.0) { throw new System.ArgumentOutOfRangeException(nameof(spacing)); } if (target.ShapeIDs.Count < 2) { return; } // Calculate the new Xfrms var sortpos = axis == VisioScripting.Models.Axis.XAxis ? VisioScripting.Models.ShapeRelativePosition.PinX : VisioScripting.Models.ShapeRelativePosition.PinY; var delta = axis == VisioScripting.Models.Axis.XAxis ? new VisioAutomation.Geometry.Size(spacing, 0) : new VisioAutomation.Geometry.Size(0, spacing); var input_xfrms = VisioScripting.Models.ShapeXFormData.Get(page, target); var bb = VisioScripting.Models.ShapeXFormData.GetBoundingBox(input_xfrms); var cur_pos = new VisioAutomation.Geometry.Point(bb.Left, bb.Bottom); var newpositions = new List <VisioAutomation.Geometry.Point>(target.ShapeIDs.Count); foreach (var input_xfrm in input_xfrms) { var new_pinpos = axis == VisioScripting.Models.Axis.XAxis ? new VisioAutomation.Geometry.Point(cur_pos.X + input_xfrm.LocPinX, input_xfrm.PinY) : new VisioAutomation.Geometry.Point(input_xfrm.PinX, cur_pos.Y + input_xfrm.LocPinY); newpositions.Add(new_pinpos); cur_pos = cur_pos.Add(input_xfrm.Width, input_xfrm.Height).Add(delta); } // Apply the changes var sorted_shape_ids = ArrangeHelper.SortShapesByPosition(page, target, sortpos); ModifyPinPositions(page, sorted_shape_ids, newpositions); }
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); }