mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
73 lines
1.9 KiB
C#
73 lines
1.9 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
|
|
namespace MapControl
|
|
{
|
|
public class MapViewTransform : GeneralTransform
|
|
{
|
|
private readonly GeneralTransform inverse;
|
|
|
|
public MapViewTransform()
|
|
{
|
|
MapTransform = new MercatorTransform();
|
|
inverse = new InverseMapViewTransform(this);
|
|
}
|
|
|
|
public MapTransform MapTransform { get; set; }
|
|
public Transform ViewTransform { get; set; }
|
|
|
|
public override GeneralTransform Inverse
|
|
{
|
|
get { return inverse; }
|
|
}
|
|
|
|
public override bool TryTransform(Point point, out Point result)
|
|
{
|
|
result = ViewTransform.Transform(MapTransform.Transform(point));
|
|
return true;
|
|
}
|
|
|
|
public override Rect TransformBounds(Rect rect)
|
|
{
|
|
return ViewTransform.TransformBounds(MapTransform.TransformBounds(rect));
|
|
}
|
|
|
|
protected override Freezable CreateInstanceCore()
|
|
{
|
|
return new MapViewTransform();
|
|
}
|
|
}
|
|
|
|
internal class InverseMapViewTransform : GeneralTransform
|
|
{
|
|
private readonly MapViewTransform inverse;
|
|
|
|
public InverseMapViewTransform(MapViewTransform inverse)
|
|
{
|
|
this.inverse = inverse;
|
|
}
|
|
|
|
public override GeneralTransform Inverse
|
|
{
|
|
get { return inverse; }
|
|
}
|
|
|
|
public override bool TryTransform(Point point, out Point result)
|
|
{
|
|
result = inverse.MapTransform.Inverse.Transform(inverse.ViewTransform.Inverse.Transform(point));
|
|
return true;
|
|
}
|
|
|
|
public override Rect TransformBounds(Rect rect)
|
|
{
|
|
return inverse.MapTransform.Inverse.TransformBounds(inverse.ViewTransform.Inverse.TransformBounds(rect));
|
|
}
|
|
|
|
protected override Freezable CreateInstanceCore()
|
|
{
|
|
return new InverseMapViewTransform(inverse);
|
|
}
|
|
}
|
|
}
|