Пример #1
0
        public void Stack(Drawing.Axis axis, double space)
        {
            if (!this.Client.HasSelectedShapes(2))
            {
                return;
            }
            if (space < 0.0)
            {
                throw new System.ArgumentOutOfRangeException("space", "must be non-negative");
            }

            var application = this.Client.VisioApplication;

            using (var undoscope = new UndoScope(application, "Stack"))
            {
                if (axis == VA.Drawing.Axis.YAxis)
                {
                    Align(null, VA.Drawing.AlignmentHorizontal.Center);
                }
                else
                {
                    Align(null, VA.Drawing.AlignmentVertical.Center);
                }
                Distribute(axis, space);
            }
        }
Пример #2
0
        public void Stack(Drawing.Axis axis, double space)
        {
            if (!this.Client.Selection.HasShapes(2))
            {
                return;
            }
            if (space < 0.0)
            {
                throw new System.ArgumentOutOfRangeException(nameof(space), "must be non-negative");
            }

            var application = this.Client.Application.Get();

            using (var undoscope = this.Client.Application.NewUndoScope("Stack"))
            {
                if (axis == Drawing.Axis.YAxis)
                {
                    this.Align(null, Drawing.AlignmentHorizontal.Center);
                }
                else
                {
                    this.Align(null, Drawing.AlignmentVertical.Center);
                }
                this.Distribute(axis, space);
            }
        }
Пример #3
0
        private static IVisio.VisUICmds _map_axis_to_uicmd(Drawing.Axis v)
        {
            switch (v)
            {
            case Drawing.Axis.XAxis: return(IVisio.VisUICmds.visCmdDistributeHSpace);

            case Drawing.Axis.YAxis: return(IVisio.VisUICmds.visCmdDistributeVSpace);

            default: throw new System.ArgumentOutOfRangeException();
            }
        }
Пример #4
0
        public void Distribute(Drawing.Axis axis, double d)
        {
            if (!this.Client.Document.HasActiveDocument)
            {
                return;
            }
            var application = this.Client.Application.Get();
            var selection   = this.Client.Selection.Get();
            var shapeids    = selection.GetIDs();

            using (var undoscope = this.Client.Application.NewUndoScope("Distribute"))
            {
                ArrangeHelper.DistributeWithSpacing(application.ActivePage, shapeids, axis, d);
            }
        }
Пример #5
0
        public void Distribute(IList <IVisio.Shape> target_shapes, Drawing.Axis axis)
        {
            this.Client.Application.AssertApplicationAvailable();
            this.Client.Document.AssertDocumentAvailable();

            int shape_count = this.GetTargetSelection(target_shapes);

            if (shape_count < 1)
            {
                return;
            }

            var cmd = ArrangeCommands._map_axis_to_uicmd(axis);

            var application = this.Client.Application.Get();

            using (var undoscope = this.Client.Application.NewUndoScope("Distribute Shapes"))
            {
                application.DoCmd((short)cmd);
            }
        }
Пример #6
0
        public static void DistributeWithSpacing(IVisio.Page page, IList <int> shapeids, Drawing.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 == Drawing.Axis.XAxis
                ? RelativePosition.PinX
                : RelativePosition.PinY;

            var delta = axis == Drawing.Axis.XAxis
                ? new Drawing.Size(spacing, 0)
                : new Drawing.Size(0, spacing);


            var sorted_shape_ids = ArrangeHelper.SortShapesByPosition(page, shapeids, sortpos);
            var input_xfrms      = Shapes.XFormCells.GetCells(page, sorted_shape_ids);
            var output_xfrms     = new List <Shapes.XFormCells>(input_xfrms.Count);
            var bb      = ArrangeHelper.GetBoundingBox(input_xfrms);
            var cur_pos = new Drawing.Point(bb.Left, bb.Bottom);

            foreach (var input_xfrm in input_xfrms)
            {
                var new_pinpos = axis == Drawing.Axis.XAxis
                    ? new Drawing.Point(cur_pos.X + input_xfrm.LocPinX.Result, input_xfrm.PinY.Result)
                    : new Drawing.Point(input_xfrm.PinX.Result, cur_pos.Y + input_xfrm.LocPinY.Result);

                var output_xfrm = new Shapes.XFormCells();
                output_xfrm.PinX = new_pinpos.X;
                output_xfrm.PinY = new_pinpos.Y;
                output_xfrms.Add(output_xfrm);

                cur_pos = cur_pos.Add(input_xfrm.Width.Result, input_xfrm.Height.Result).Add(delta);
            }

            // Apply the changes
            ArrangeHelper.update_xfrms(page, sorted_shape_ids, output_xfrms);
        }