using System; using System.Collections.Generic; using System.Globalization; using System.Linq; #if WPF using System.Windows; using System.Windows.Media; #elif UWP using Windows.UI.Xaml; using Windows.UI.Xaml.Media; #elif WINUI using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media; #elif AVALONIA using Avalonia; using Avalonia.Media; using Brush = Avalonia.Media.IBrush; using PathFigureCollection = Avalonia.Media.PathFigures; #endif namespace MapControl { /// /// Draws a graticule overlay. /// public partial class MapGraticule { private class Label(string latText, string lonText, double x, double y, double rotation) { public string LatitudeText => latText; public string LongitudeText => lonText; public double X => x; public double Y => y; public double Rotation => rotation; } public static readonly DependencyProperty MinLineDistanceProperty = DependencyPropertyHelper.Register(nameof(MinLineDistance), 150d); public static readonly DependencyProperty StrokeThicknessProperty = DependencyPropertyHelper.Register(nameof(StrokeThickness), 0.5); /// /// Minimum graticule line distance in pixels. The default value is 150. /// public double MinLineDistance { get => (double)GetValue(MinLineDistanceProperty); set => SetValue(MinLineDistanceProperty, value); } public double StrokeThickness { get => (double)GetValue(StrokeThicknessProperty); set => SetValue(StrokeThicknessProperty, value); } public Brush Foreground { get => (Brush)GetValue(ForegroundProperty); set => SetValue(ForegroundProperty, value); } public FontFamily FontFamily { get => (FontFamily)GetValue(FontFamilyProperty); set => SetValue(FontFamilyProperty, value); } public double FontSize { get => (double)GetValue(FontSizeProperty); set => SetValue(FontSizeProperty, value); } private List