public void DistributeSelectionOnAxis(Models.Axis axis)
        {
            var cmdtarget = this._client.GetCommandTargetPage();

            IVisio.VisUICmds cmd;

            switch (axis)
            {
            case VisioScripting.Models.Axis.XAxis:
                cmd = IVisio.VisUICmds.visCmdDistributeHSpace;
                break;

            case VisioScripting.Models.Axis.YAxis:
                cmd = IVisio.VisUICmds.visCmdDistributeVSpace;
                break;

            default:
                throw new System.ArgumentOutOfRangeException();
            }

            using (var undoscope = this._client.Undo.NewUndoScope(nameof(DistributeSelectionOnAxis)))
            {
                cmdtarget.Application.DoCmd((short)cmd);
            }
        }
Example #2
0
        public void DistributeOnAxis(VisioScripting.TargetSelection targetselection, Models.Axis axis)
        {
            targetselection = targetselection.ResolveToSelection(this._client);

            if (targetselection.Selection.Count < 2)
            {
                return;
            }

            IVisio.VisUICmds cmd;

            switch (axis)
            {
            case VisioScripting.Models.Axis.XAxis:
                cmd = IVisio.VisUICmds.visCmdDistributeHSpace;
                break;

            case VisioScripting.Models.Axis.YAxis:
                cmd = IVisio.VisUICmds.visCmdDistributeVSpace;
                break;

            default:
                throw new System.ArgumentOutOfRangeException();
            }

            using (var undoscope = this._client.Undo.NewUndoScope(nameof(DistributeOnAxis)))
            {
                targetselection.Selection.Application.DoCmd((short)cmd);
            }
        }
        public void DistributeSelectionOnAxis(Models.TargetShapes targets, Models.Axis axis, double spacing)
        {
            var cmdtarget = this._client.GetCommandTargetPage();

            var page = cmdtarget.ActivePage;

            targets = targets.ResolveShapes(this._client);
            var targetids = targets.ToShapeIDs();

            using (var undoscope = this._client.Undo.NewUndoScope(nameof(DistributeSelectionOnAxis)))
            {
                VisioScripting.Helpers.ArrangeHelper.DistributeWithSpacing(page, targetids, axis, spacing);
            }
        }
        internal static void _distribute_with_spacing(IVisio.Page page, IList <int> shapeids, Models.Axis axis, double spacing)
        {
            if (spacing < 0.0)
            {
                throw new System.ArgumentOutOfRangeException(nameof(spacing));
            }

            if (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_xfrms(page, shapeids);
            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>(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.XFormLocPinX, input_xfrm.XFormPinY)
                    : new VisioAutomation.Geometry.Point(input_xfrm.XFormPinX, cur_pos.Y + input_xfrm.XFormLocPinY);

                newpositions.Add(new_pinpos);
                cur_pos = cur_pos.Add(input_xfrm.XFormWidth, input_xfrm.XFormHeight).Add(delta);
            }

            // Apply the changes
            var sorted_shapeids = ArrangeHelper._sort_shapes_by_position(page, shapeids, sortpos);

            _modify_pin_positions(page, sorted_shapeids, newpositions);
        }