using System.Collections.Generic; 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.Layout; using Avalonia.Media; using Brush = Avalonia.Media.IBrush; using PathFigureCollection = Avalonia.Media.PathFigures; #endif namespace MapControl { /// /// Base class of map grid or graticule overlays. /// public abstract partial class MapGrid { protected class Label(string text, double x, double y, double rotation, HorizontalAlignment horizontalAlignment = HorizontalAlignment.Left, VerticalAlignment verticalAlignment = VerticalAlignment.Center) { public string Text => text; public double X => x; public double Y => y; public double Rotation => rotation; public HorizontalAlignment HorizontalAlignment => horizontalAlignment; public VerticalAlignment VerticalAlignment => verticalAlignment; } 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); } protected abstract void DrawGrid(PathFigureCollection figures, List