From 03e0258f18ac01f2b9c43dc73fed1e5b823cfae9 Mon Sep 17 00:00:00 2001 From: ClemensFischer Date: Mon, 5 Jan 2026 21:27:00 +0100 Subject: [PATCH] Updated ViewTransform --- MapControl/Avalonia/MapGraticule.Avalonia.cs | 8 ++-- MapControl/Shared/MapBase.cs | 24 +--------- MapControl/Shared/MapGraticule.cs | 2 +- MapControl/Shared/MapImageLayer.cs | 3 +- .../Matrix.WinUI.cs => Shared/Matrix.cs} | 33 ++++++++------ MapControl/Shared/ViewTransform.cs | 45 +++++++------------ MapControl/Shared/WmsImageLayer.cs | 13 ++---- MapControl/WPF/MapControl.WPF.csproj | 1 + 8 files changed, 49 insertions(+), 80 deletions(-) rename MapControl/{WinUI/Matrix.WinUI.cs => Shared/Matrix.cs} (76%) diff --git a/MapControl/Avalonia/MapGraticule.Avalonia.cs b/MapControl/Avalonia/MapGraticule.Avalonia.cs index 5d05aaf7..aa07cef0 100644 --- a/MapControl/Avalonia/MapGraticule.Avalonia.cs +++ b/MapControl/Avalonia/MapGraticule.Avalonia.cs @@ -83,9 +83,11 @@ namespace MapControl var y1 = -StrokeThickness / 2d - latText.Height; var y2 = StrokeThickness / 2d; - using var pushState = drawingContext.PushTransform( - Matrix.CreateRotation(Matrix.ToRadians(label.Rotation)) * - Matrix.CreateTranslation(label.X, label.Y)); + var transform = new Matrix(1d, 0d, 0d, 1d, 0d, 0d); + transform.Rotate(label.Rotation); + transform.Translate(label.X, label.Y); + + using var pushState = drawingContext.PushTransform(transform); drawingContext.DrawText(latText, new Point(x, y1)); drawingContext.DrawText(lonText, new Point(x, y2)); diff --git a/MapControl/Shared/MapBase.cs b/MapControl/Shared/MapBase.cs index c7766b8d..0a66bac2 100644 --- a/MapControl/Shared/MapBase.cs +++ b/MapControl/Shared/MapBase.cs @@ -238,32 +238,12 @@ namespace MapControl return MapProjection.MapToLocation(ViewTransform.ViewToMapMatrix.Transform(point)); } - /// - /// Gets a Rect in projected map coordinates that covers a rectangle in view coordinates. - /// - public Rect ViewRectToMap(double x, double y, double width, double height) - { - var viewToMap = ViewTransform.ViewToMapMatrix; - - var p1 = viewToMap.Transform(new Point(x, y)); - var p2 = viewToMap.Transform(new Point(x, y + height)); - var p3 = viewToMap.Transform(new Point(x + width, y)); - var p4 = viewToMap.Transform(new Point(x + width, y + height)); - - var x1 = Math.Min(p1.X, Math.Min(p2.X, Math.Min(p3.X, p4.X))); - var y1 = Math.Min(p1.Y, Math.Min(p2.Y, Math.Min(p3.Y, p4.Y))); - var x2 = Math.Max(p1.X, Math.Max(p2.X, Math.Max(p3.X, p4.X))); - var y2 = Math.Max(p1.Y, Math.Max(p2.Y, Math.Max(p3.Y, p4.Y))); - - return new Rect(x1, y1, x2 - x1, y2 - y1); - } - /// /// Gets a BoundingBox in geographic coordinates that covers a rectangle in view coordinates. /// - public BoundingBox ViewRectToBoundingBox(double x, double y, double width, double height) + public BoundingBox ViewToBoundingBox(Rect rect) { - return MapProjection.MapToBoundingBox(ViewRectToMap(x, y, width, height)); + return MapProjection.MapToBoundingBox(ViewTransform.ViewToMapMatrix.TransformBounds(rect)); } /// diff --git a/MapControl/Shared/MapGraticule.cs b/MapControl/Shared/MapGraticule.cs index 458c5407..4e72a4a6 100644 --- a/MapControl/Shared/MapGraticule.cs +++ b/MapControl/Shared/MapGraticule.cs @@ -171,7 +171,7 @@ namespace MapControl private void DrawCylindricalGraticule(PathFigureCollection figures, List