Exemplo n.º 1
0
        public static void LimitExtent(IViewport viewport, PanMode panMode, BoundingBox panLimits, BoundingBox mapEnvelope)
        {
            var maxExtent = panLimits ?? mapEnvelope;

            if (maxExtent == null)
            {
                // Can be null because both panLimits and Map.Extent can be null.
                // The Map.Extent can be null if the extent of all layers is null
                return;
            }

            if (panMode == PanMode.KeepCenterWithinExtents)
            {
                if (viewport.Center.X < maxExtent.Left)
                {
                    viewport.Center.X = maxExtent.Left;
                }
                if (viewport.Center.X > maxExtent.Right)
                {
                    viewport.Center.X = maxExtent.Right;
                }
                if (viewport.Center.Y > maxExtent.Top)
                {
                    viewport.Center.Y = maxExtent.Top;
                }
                if (viewport.Center.Y < maxExtent.Bottom)
                {
                    viewport.Center.Y = maxExtent.Bottom;
                }
            }
            else if (panMode == PanMode.KeepViewportWithinExtents)
            {
                if (MapWidthSpansViewport(maxExtent.Width, viewport.Width, viewport.Resolution)) // if it does't fit don't restrict
                {
                    //if ((viewport.Extent.Left < maxExtent.Left) && (viewport.Extent.Right > maxExtent.Right))
                    //    throw new Exception();
                    if (viewport.Extent.Left < maxExtent.Left)
                    {
                        viewport.Center.X += maxExtent.Left - viewport.Extent.Left;
                    }
                    if (viewport.Extent.Right > maxExtent.Right)
                    {
                        viewport.Center.X += maxExtent.Right - viewport.Extent.Right;
                    }
                }
                if (MapHeightSpansViewport(maxExtent.Height, viewport.Height, viewport.Resolution)) // if it does't fit don't restrict
                {
                    //if ((viewport.Extent.Top> maxExtent.Top) && (viewport.Extent.Bottom < maxExtent.Bottom))
                    //    throw new Exception();
                    if (viewport.Extent.Top > maxExtent.Top)
                    {
                        viewport.Center.Y += maxExtent.Top - viewport.Extent.Top;
                    }
                    if (viewport.Extent.Bottom < maxExtent.Bottom)
                    {
                        viewport.Center.Y += maxExtent.Bottom - viewport.Extent.Bottom;
                    }
                }
            }
        }
Exemplo n.º 2
0
 public static void Limit(IViewport viewport,
                          ZoomMode zoomMode, MinMax zoomLimits, IReadOnlyList <double> mapResolutions,
                          PanMode panMode, BoundingBox panLimits, BoundingBox mapEnvelope)
 {
     viewport.Resolution = LimitResolution(viewport.Resolution, viewport.Width, viewport.Height, zoomMode, zoomLimits, mapResolutions, mapEnvelope);
     LimitExtent(viewport, panMode, panLimits, mapEnvelope);
 }
Exemplo n.º 3
0
        public static void LimitExtent(IViewport viewport, PanMode panMode, BoundingBox panLimits, BoundingBox mapEnvelope)
        {
            var maxExtent = panLimits ?? mapEnvelope;

            if (maxExtent == null)
            {
                return;                    // Can be null because both panLimits and Map.Extent can be null. The Map.Extent can be null if the extent of all layers is null
            }
            if (panMode == PanMode.KeepCenterWithinExtents)
            {
                if (viewport.Center.X < maxExtent.Left)
                {
                    viewport.Center.X = maxExtent.Left;
                }
                if (viewport.Center.X > maxExtent.Right)
                {
                    viewport.Center.X = maxExtent.Right;
                }
                if (viewport.Center.Y > maxExtent.Top)
                {
                    viewport.Center.Y = maxExtent.Top;
                }
                if (viewport.Center.Y < maxExtent.Bottom)
                {
                    viewport.Center.Y = maxExtent.Bottom;
                }
            }
            else if (panMode == PanMode.KeepViewportWithinExtents)
            {
                var cos = Math.Abs(Math.Cos(viewport.Rotation * Utilities.Constants.DegreesToRadians));
                var sin = Math.Abs(Math.Sin(viewport.Rotation * Utilities.Constants.DegreesToRadians));

                var window = viewport.WindowExtent.ToBoundingBox();

                if (MapWidthSpansViewport(maxExtent.Width, viewport.Width, viewport.Resolution)) // if it does't fit don't restrict
                {
                    //if ((viewport.Extent.Left < maxExtent.Left) && (viewport.Extent.Right > maxExtent.Right))
                    //    throw new Exception();
                    if (viewport.Extent.Left < maxExtent.Left)
                    {
                        viewport.Center.X += (maxExtent.Left - viewport.Extent.Left) * cos;
                    }
                    if (viewport.Extent.Right > maxExtent.Right)
                    {
                        viewport.Center.X += (maxExtent.Right - viewport.Extent.Right) * cos;
                    }
                }
                if (MapHeightSpansViewport(maxExtent.Height, viewport.Height, viewport.Resolution)) // if it does't fit don't restrict
                {
                    //if ((viewport.Extent.Top> maxExtent.Top) && (viewport.Extent.Bottom < maxExtent.Bottom))
                    //    throw new Exception();
                    if (viewport.Extent.Top > maxExtent.Top)
                    {
                        viewport.Center.Y += (maxExtent.Top - viewport.Extent.Top) * sin;
                    }
                    if (viewport.Extent.Bottom < maxExtent.Bottom)
                    {
                        viewport.Center.Y += (maxExtent.Bottom - viewport.Extent.Bottom) * sin;
                    }
                }
            }
        }