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