XAML-Map-Control/MapControl/MapViewTransform.cs
ClemensF caab7208a3 .
2012-04-25 22:02:53 +02:00

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);
}
}
}