/// <summary>Проверяет, пересекаются ли эта область с другой</summary> /// <param name="Another">Область, пересечение с которой требуется проверить</param> /// <returns>True, если области пересекаются</returns> public bool IsIntersects(EarthArea Another) { return MostEasternLongitude >= Another.MostWesternLongitude && MostWesternLongitude <= Another.MostEasternLongitude && MostNorthenLatitude >= Another.MostSouthernLatitude && MostSouthernLatitude <= Another.MostNorthenLatitude; }
public override bool TestVisual(EarthArea VisibleArea) { return Position.IsInArea(VisibleArea); }
/// <summary>Проверяет, попадает ли этот элемент в указанную области видимости</summary> /// <param name="VisibleArea">Область видимости</param> /// <returns>True, если объект может оказаться виден в указанной области</returns> public abstract bool TestVisual(EarthArea VisibleArea);
/// <summary>Проверяет, и при необходимости отрисовывает или скрывает объект с карты</summary> /// <param name="Element">Проверяемый объект</param> /// <param name="OnArea">Видимая в область карты</param> private void CheckVisual(MapElement Element, EarthArea OnArea) { CheckVisual(Element, Element.TestVisual(OnArea)); }
/// <summary>Проверяет, попадает ли точка в заданную прямоугольную область</summary> /// <param name="Area">Прямоугольная область</param> /// <returns>True, если точка лежит внутри заданной прямоугольной области</returns> public bool IsInArea(EarthArea Area) { return Longitude >= Area.MostWesternLongitude && Longitude <= Area.MostEasternLongitude && Latitude >= Area.MostSouthernLatitude && Latitude <= Area.MostNorthenLatitude; }
protected virtual void OnVisibleAreaChanged(EarthArea NewVisibleArea) { RefreshObjectsVisuals(); }
protected virtual void OnCentralPointChanged(EarthPoint newCentralPoint) { Point screenCentralPoint = Projector.Project(newCentralPoint, ZoomLevel); _globalTransform.X = Math.Round(-screenCentralPoint.X + ActualWidth / 2); _globalTransform.Y = Math.Round(-screenCentralPoint.Y + ActualHeight / 2); VisibleArea = new EarthArea( // Top Left Projector.InverseProject(screenCentralPoint + new Vector(-ActualWidth / 2, -ActualHeight / 2), ZoomLevel), // Bottom Left Projector.InverseProject(screenCentralPoint + new Vector(-ActualWidth / 2, +ActualHeight / 2), ZoomLevel), // Top Right Projector.InverseProject(screenCentralPoint + new Vector(+ActualWidth / 2, -ActualHeight / 2), ZoomLevel), // BottomRight Projector.InverseProject(screenCentralPoint + new Vector(+ActualWidth / 2, +ActualHeight / 2), ZoomLevel) ); RefreshTiles(); }
public override bool TestVisual(EarthArea VisibleArea) { return true; }
/// <summary>Проверяет, попадает ли этот элемент в указанную области видимости</summary> /// <param name="VisibleArea">Область видимости</param> /// <returns>True, если объект может оказаться виден в указанной области</returns> public override bool TestVisual(EarthArea VisibleArea) { return ElementArea.IsIntersects(VisibleArea); }
/// <summary> /// Создаёт новый многоточечный объект на карте /// </summary> /// <param name="Points">Точки, входящие в состав объекта</param> public MapPathElement(IList<EarthPoint> Points) { this.Points = Points; ElementArea = new EarthArea(Points.ToArray()); }