コード例 #1
0
        public void EvenSpaces(FigureArrange arrange)
        {
            OnLayerStartChanging();
            _selection.EvenSpaces(arrange);
            _selection.PushTransformToSelectedFigures();
            OnLayerChanged();

            //строим маркеры
            UpdateMarkers();
        }
コード例 #2
0
        /// <summary>
        /// Выравнивание по величине промежутков между фигурами
        /// </summary>
        /// <param name="selection">Текущее выделение фигур</param>
        /// <param name="arrange">Направление выравнивания</param>
        public static void EvenSpaces(this Selection selection, FigureArrange arrange)
        {
            var exists = selection.Count > 2;

            if (!exists)
            {
                return;
            }
            var width  = 0f;
            var heigth = 0f;

            foreach (var bounds in selection.Select(figure =>
                                                    figure.GetTransformedPath().Path.GetBounds()))
            {
                width  += bounds.Width;
                heigth += bounds.Height;
            }
            var selectionBounds = selection.GetTransformedPath().Path.GetBounds();
            var figures         = new List <Figure>();

            switch (arrange)
            {
            case FigureArrange.Horizontal:
                var sW = (selectionBounds.Width - width) / (selection.Count - 1);
                figures.AddRange(selection.OrderBy(item => item.GetTransformedPath().Path.GetBounds().Left));
                var w = selectionBounds.Left + figures.First().GetTransformedPath().Path.GetBounds().Width + sW;
                for (var i = 1; i < figures.Count - 1; i++)
                {
                    var half = figures[i].GetTransformedPath().Path.GetBounds().Width / 2;
                    w += half;
                    var el = figures[i].Transform.Matrix.Elements;
                    el[4] = w;
                    figures[i].Transform.Matrix = new Matrix(el[0], el[1], el[2], el[3], el[4], el[5]);
                    w += half + sW;
                }
                break;

            case FigureArrange.Vertical:
                var sH = (selectionBounds.Height - heigth) / (selection.Count - 1);
                figures.AddRange(selection.OrderBy(item => item.GetTransformedPath().Path.GetBounds().Top));
                var h = selectionBounds.Top + figures.First().GetTransformedPath().Path.GetBounds().Height + sH;
                for (var i = 1; i < figures.Count - 1; i++)
                {
                    var half = figures[i].GetTransformedPath().Path.GetBounds().Height / 2;
                    h += half;
                    var el = figures[i].Transform.Matrix.Elements;
                    el[5] = h;
                    figures[i].Transform.Matrix = new Matrix(el[0], el[1], el[2], el[3], el[4], el[5]);
                    h += half + sH;
                }
                break;
            }
        }