/// <summary> </summary> public override void InitializeTransform() { double mercatorSize = 360; TranslateTransform translateTransform = new TranslateTransform(MapView.ReferenceSize / 2 - 180, MapView.ReferenceSize / 2 - 180); ScaleTransform zoomTransform = new ScaleTransform(MapView.ZoomAdjust * MapView.ReferenceSize / mercatorSize, MapView.ZoomAdjust * MapView.ReferenceSize / mercatorSize, MapView.ReferenceSize / 2, MapView.ReferenceSize / 2); TransformGroup transformGroup = new TransformGroup(); transformGroup.Children.Add(translateTransform); transformGroup.Children.Add(zoomTransform); zoomTransform.Freeze(); translateTransform.Freeze(); transformGroup.Freeze(); this.RenderTransform = transformGroup; }
static Transform CreateNormalizeTransform(Rect bounds, Point location, Size size, double angle) { if (bounds.IsEmpty) return Transform.Identity; var t = new TransformGroup(); var b = bounds; // Move center of the geometry to origin t.Children.Add(new TranslateTransform(-b.X - b.Width / 2, -b.Y - b.Height / 2)); // Rotate around origin t.Children.Add(new RotateTransform(angle)); b = t.TransformBounds(bounds); // Scale to requested size t.Children.Add(new ScaleTransform(size.Width / b.Width, size.Height / b.Height)); b = t.TransformBounds(bounds); // Move to requested position t.Children.Add(new TranslateTransform(-b.X + location.X, -b.Y + location.Y)); t.Freeze(); b = t.TransformBounds(bounds); Debug.Assert(Math.Abs(b.X - location.X) < 0.0001); Debug.Assert(Math.Abs(b.Y - location.Y) < 0.0001); Debug.Assert(Math.Abs(b.Width - size.Width) < 0.0001); Debug.Assert(Math.Abs(b.Height - size.Height) < 0.0001); return t; }