diff --git a/MapControl/Shared/ViewTransform.cs b/MapControl/Shared/ViewTransform.cs index 9f8a2570..504278bf 100644 --- a/MapControl/Shared/ViewTransform.cs +++ b/MapControl/Shared/ViewTransform.cs @@ -72,7 +72,7 @@ namespace MapControl public void SetTransform(Point mapCenter, Point viewCenter, double scale, double rotation) { Scale = scale; - Rotation = rotation; + Rotation = ((rotation % 360d) + 360d) % 360d; var transform = new Matrix(Scale, 0d, 0d, -Scale, -Scale * mapCenter.X, Scale * mapCenter.Y); diff --git a/MapControl/WinUI/Matrix.WinUI.cs b/MapControl/WinUI/Matrix.WinUI.cs index db65381d..ab3b9cfb 100644 --- a/MapControl/WinUI/Matrix.WinUI.cs +++ b/MapControl/WinUI/Matrix.WinUI.cs @@ -2,6 +2,7 @@ // © 2022 Clemens Fischer // Licensed under the Microsoft Public License (Ms-PL) +using ABI.Microsoft.UI.Xaml.Media; using System; #if WINUI using XamlMedia = Microsoft.UI.Xaml.Media; @@ -40,7 +41,7 @@ namespace MapControl public Point Transform(Point p) { - return new Point(M11 * p.X + M12 * p.Y + OffsetX, M21 * p.X + M22 * p.Y + OffsetY); + return new Point(M11 * p.X + M21 * p.Y + OffsetX, M12 * p.X + M22 * p.Y + OffsetY); } public void Translate(double x, double y) @@ -58,6 +59,8 @@ namespace MapControl var cos = Math.Cos(angle); var sin = Math.Sin(angle); + // Multiply(new Matrix(cos, sin, -sin, cos, 0d, 0d)); + SetMatrix( cos * M11 - sin * M12, sin * M11 + cos * M12, @@ -83,6 +86,17 @@ namespace MapControl invDet * (M12 * OffsetX - M11 * OffsetY)); } + public void Multiply(Matrix m) + { + SetMatrix( + M11 * m.M11 + M12 * m.M21, + M11 * m.M12 + M12 * m.M22, + M21 * m.M11 + M22 * m.M21, + M21 * m.M12 + M22 * m.M22, + OffsetX * m.M11 + OffsetY * m.M21 + m.OffsetX, + OffsetX * m.M12 + OffsetY * m.M22 + m.OffsetY); + } + private void SetMatrix(double m11, double m12, double m21, double m22, double offsetX, double offsetY) { M11 = m11;