예제 #1
0
        protected override void UpdateData()
        {
            var geometry = (RectangleGeometry)Data;

            if (ParentMap != null &&
                !double.IsNaN(South) && !double.IsNaN(North) &&
                !double.IsNaN(West) && !double.IsNaN(East) &&
                South < North && West < East)
            {
                // Create a scaled RectangleGeometry due to inaccurate hit testing in WPF.
                // See http://stackoverflow.com/a/19335624/1136211

                const double scale = 1e6;
                var          p1    = ParentMap.MapTransform.Transform(new Location(South, West));
                var          p2    = ParentMap.MapTransform.Transform(new Location(North, East));
                geometry.Rect = new Rect(p1.X * scale, p1.Y * scale, (p2.X - p1.X) * scale, (p2.Y - p1.Y) * scale);

                var scaleTransform = new ScaleTransform // revert scaling
                {
                    ScaleX = 1d / scale,
                    ScaleY = 1d / scale
                };
                scaleTransform.Freeze();

                var transform = new TransformGroup();
                transform.Children.Add(scaleTransform);
                transform.Children.Add(ParentMap.ViewportTransform);
                RenderTransform = transform;
            }
            else
            {
                geometry.ClearValue(RectangleGeometry.RectProperty);
                ClearValue(RenderTransformProperty);
            }
        }
예제 #2
0
        protected override void UpdateData()
        {
            var geometry = (RectangleGeometry)Data;

            if (ParentMap != null &&
                !double.IsNaN(South) && !double.IsNaN(North) &&
                !double.IsNaN(West) && !double.IsNaN(East) &&
                South < North && West < East)
            {
                // Create a scaled RectangleGeometry due to inaccurate hit testing in WPF.
                // See http://stackoverflow.com/a/19335624/1136211

                const double scale = 1e6;
                var p1 = ParentMap.MapTransform.Transform(new Location(South, West));
                var p2 = ParentMap.MapTransform.Transform(new Location(North, East));
                geometry.Rect = new Rect(p1.X * scale, p1.Y * scale, (p2.X - p1.X) * scale, (p2.Y - p1.Y) * scale);

                var scaleTransform = new ScaleTransform // revert scaling
                {
                    ScaleX = 1d / scale,
                    ScaleY = 1d / scale
                };
                scaleTransform.Freeze();

                var transform = new TransformGroup();
                transform.Children.Add(scaleTransform);
                transform.Children.Add(ParentMap.ViewportTransform);
                RenderTransform = transform;
            }
            else
            {
                geometry.ClearValue(RectangleGeometry.RectProperty);
                ClearValue(RenderTransformProperty);
            }
        }