using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; #if WPF using System.Windows; using System.Windows.Media; using PolypointGeometry = System.Windows.Media.StreamGeometry; #elif UWP using Windows.UI.Xaml; using Windows.UI.Xaml.Media; using PolypointGeometry = Windows.UI.Xaml.Media.PathGeometry; #elif WINUI using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media; using PolypointGeometry = Microsoft.UI.Xaml.Media.PathGeometry; #elif AVALONIA using Avalonia.Media; using PolypointGeometry = Avalonia.Media.PathGeometry; #endif namespace MapControl { /// /// Base class of MapPolyline and MapPolygon and MapMultiPolygon. /// public partial class MapPolypoint { public static readonly DependencyProperty FillRuleProperty = DependencyPropertyHelper.Register(nameof(FillRule), FillRule.EvenOdd, (polypoint, oldValue, newValue) => ((PolypointGeometry)polypoint.Data).FillRule = newValue); public FillRule FillRule { get => (FillRule)GetValue(FillRuleProperty); set => SetValue(FillRuleProperty, value); } protected MapPolypoint() { Data = new PolypointGeometry(); Location = new Location(0d, double.NaN); } protected void DataCollectionPropertyChanged(IEnumerable oldValue, IEnumerable newValue) { if (oldValue is INotifyCollectionChanged oldCollection) { oldCollection.CollectionChanged -= DataCollectionChanged; } if (newValue is INotifyCollectionChanged newCollection) { newCollection.CollectionChanged += DataCollectionChanged; } UpdateData(); } protected void DataCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { UpdateData(); } protected double GetLongitudeOffset(IEnumerable locations) { if (!ParentMap.MapProjection.IsNormalCylindrical) { return 0d; } Location location; if (!double.IsNaN(Location.Longitude)) { location = Location; } else if (locations != null && locations.Any()) { location = locations.First(); } else { return 0d; } if (ParentMap.InsideViewBounds(ParentMap.LocationToView(location))) { return 0d; } return ParentMap.NearestLongitude(location.Longitude) - location.Longitude; } } }