/// <summary> /// Выравнивание фигур по по вертикали, относительно первой фигуры в списке /// </summary> public static void AlignVertical(this Selection selection, FigureAlignment alignment) { var exists = selection.Count > 1; if (!exists) { return; } var first = selection.First(); var y = first.Transform.Matrix.Elements[5]; var h = first.GetTransformedPath().Path.GetBounds().Height; foreach (var figure in selection) { var height = figure.GetTransformedPath().Path.GetBounds().Height; var el = figure.Transform.Matrix.Elements; switch (alignment) { case FigureAlignment.Near: el[5] = y - (h - height) / 2; break; case FigureAlignment.Center: el[5] = y; break; case FigureAlignment.Far: el[5] = y + (h - height) / 2; break; } figure.Transform.Matrix = new Matrix(el[0], el[1], el[2], el[3], el[4], el[5]); } }
/// <summary> /// Выравнивание фигур по горизонтали, относительно первой фигуры в списке /// </summary> public static void AlignHorizontal(this Selection selection, FigureAlignment alignment) { var exists = selection.Count > 1; if (!exists) { return; } var first = selection.First(); var x = first.Transform.Matrix.Elements[4]; var w = first.GetTransformedPath().Path.GetBounds().Width; foreach (var figure in selection) { var width = figure.GetTransformedPath().Path.GetBounds().Width; var el = figure.Transform.Matrix.Elements; switch (alignment) { case FigureAlignment.Near: el[4] = x - (w - width) / 2; break; case FigureAlignment.Center: el[4] = x; break; case FigureAlignment.Far: el[4] = x + (w - width) / 2; break; } figure.Transform.Matrix = new Matrix(el[0], el[1], el[2], el[3], el[4], el[5]); } }
public void AlignVertical(FigureAlignment alignment) { OnLayerStartChanging(); _selection.AlignVertical(alignment); _selection.PushTransformToSelectedFigures(); OnLayerChanged(); //строим маркеры UpdateMarkers(); }