Exemplo n.º 1
0
        private Task <float[][]> retrieveElevationAsync(
            [NotNull] IElevationProvider ep,
            double latCenter,
            double lonCenter,
            double range)
        {
            if (ep == null)
            {
                throw new ArgumentNullException("ep");
            }

            if (ep == null)
            {
                throw new ArgumentNullException("ep");
            }

            double minLat = Math.Max(latCenter - range, -90);
            double maxLat = Math.Min(latCenter + range, 90);

            double minLon = Math.Max(lonCenter - range, -180);
            double maxLon = Math.Min(lonCenter + range, 180);

            double latRange = maxLat - minLat;
            double lonRange = maxLon - minLon;

            if (_useAsyncApi)
            {
                return(retrieveElevationAsyncImpl(ep, minLat, latRange, minLon, lonRange));
            }
            else
            {
                return(Task.Run(() => retrieveElevationImpl(ep, minLat, latRange, minLon, lonRange)));
            }
        }
 public TestTerrainBuilder(CustomizationService customizationService,
                           IElevationProvider elevationProvider,
                           IGameObjectFactory gameObjectFactory,
                           IObjectPool objectPool) :
     base(customizationService, elevationProvider, gameObjectFactory, objectPool)
 {
 }
Exemplo n.º 3
0
 public MapDataLoader(IElevationProvider elevationProvider, IFileSystemService fileSystemService,
     ImaginaryProvider imaginaryProvider, IPathResolver pathResolver)
 {
     _elevationProvider = elevationProvider;
     _fileSystemService = fileSystemService;
     _imaginaryProvider = imaginaryProvider;
     _pathResolver = pathResolver;
 }
Exemplo n.º 4
0
 public MapDataLoader(IElevationProvider elevationProvider, IFileSystemService fileSystemService,
                      INetworkService networkService, IPathResolver pathResolver)
 {
     _elevationProvider = elevationProvider;
     _fileSystemService = fileSystemService;
     _networkService    = networkService;
     _pathResolver      = pathResolver;
 }
Exemplo n.º 5
0
 public MapTileLoader(IElementSourceProvider elementSourceProvider,
                      IElevationProvider elevationProvider,
                      IModelLoader modelLoader, IObjectPool objectPool)
 {
     _elementSourceProvider = elementSourceProvider;
     _elevationProvider     = elevationProvider;
     _modelLoader           = modelLoader;
     _objectPool            = objectPool;
 }
Exemplo n.º 6
0
 public TerrainBuilder(CustomizationService customizationService,
                       IElevationProvider elevationProvider,
                       IGameObjectFactory gameObjectFactory,
                       IObjectPool objectPool)
 {
     _customizationService = customizationService;
     _elevationProvider    = elevationProvider;
     _gameObjectFactory    = gameObjectFactory;
     _objectPool           = objectPool;
     _meshCellBuilder      = new MeshCellBuilder(_objectPool);
 }
Exemplo n.º 7
0
        private float[][] retrieveElevationImpl(IElevationProvider ep, double minLat, double latRange, double minLon, double lonRange)
        {
            float[][] result = new float[pixelHeightInt][];

            for (int rIdx = 0; rIdx < pixelHeightInt; rIdx++)
            {
                double lat = minLat + rIdx * latRange / pixelHeightInt;
                result[rIdx] = retrieveRowElevation(ep, lat, minLon, lonRange);
                _progresSubject.OnNext(rIdx * 1.0 / pixelHeightInt);
            }

            return(result);
        }
        /// <summary>
        ///     Supports composing two elevations providers, one with positive sign and one with negative.
        ///     Common use case is using C over A and B over A providers composed into C over B
        /// </summary>
        /// <param name="providerPositive">Provider with + sign (C over A)</param>
        /// <param name="providerNegative">Provider with - sign (B over A)</param>
        public SubtractingComposerElevationProvider([NotNull] IElevationProvider providerPositive, [NotNull] IElevationProvider providerNegative)
        {
            if (providerPositive == null) throw new ArgumentNullException("providerPositive");
            if (providerNegative == null) throw new ArgumentNullException("providerNegative");
            if (providerPositive.ElevationBase != providerNegative.ElevationBase)
                throw new ArgumentException(string.Format("Base must be common for both providers, called with:" +
                                                          "providerPositive.ElevationBase == {0} and " +
                                                          "providerNegative.ElevationBase == {1}",
                                                          providerPositive.ElevationBase,
                                                          providerNegative.ElevationBase));

            _providerPositive = providerPositive;
            _providerNegative = providerNegative;
        }
Exemplo n.º 9
0
        public DemoViewModel([CanBeNull] IEnumerable<IElevationProvider> providers = null)
        {
            _availableElevationProviders = providers ?? Locator.Current.GetService<IEnumerable<IElevationProvider>>();
            if (_availableElevationProviders == null) throw new ArgumentNullException("providers");

            _writeableBitmap = new WriteableBitmap(pixelWidthInt, pixelHeightInt, 96, 96, PixelFormats.Rgb24, null);
            var epAvailable = this.WhenAnyValue(t => t.SelectedElevationProvider)
                                  .Select(sep => sep != null);
            _retrieveElevationsCommand = ReactiveCommand.CreateAsyncTask(epAvailable, _ => refreshElevationsAsync());

            _retrieveElevationsCommand.ObserveOn(RxApp.MainThreadScheduler)
                                      .Subscribe(s => ElevationValueStats = s);
            _retrieveElevationsCommand.ThrownExceptions.Subscribe(e => UserError.Throw("Error during retrieval of elevation data", e));
            _selectedElevationProvider = _availableElevationProviders.FirstOrDefault();

            _progress = _progresSubject.ToProperty(this, t => t.Progress, scheduler: RxApp.MainThreadScheduler);
        }
Exemplo n.º 10
0
        private static float[] retrieveRowElevation([NotNull] IElevationProvider ep, double lat, double minLon, double lonRange)
        {
            if (ep == null)
            {
                throw new ArgumentNullException("ep");
            }

            var rowArray = new float[pixelWidthInt];

            for (int cIdx = 0; cIdx < pixelWidthInt; cIdx++)
            {
                double lon       = minLon + cIdx * lonRange / pixelWidthInt;
                var    elevation = (float)ep.GetElevation(lat, lon);
                rowArray[cIdx] = elevation;
            }
            return(rowArray);
        }
Exemplo n.º 11
0
        public DemoViewModel([CanBeNull] IEnumerable <IElevationProvider> providers = null)
        {
            _availableElevationProviders = providers ?? Locator.Current.GetService <IEnumerable <IElevationProvider> >();
            if (_availableElevationProviders == null)
            {
                throw new ArgumentNullException("providers");
            }

            _writeableBitmap = new WriteableBitmap(pixelWidthInt, pixelHeightInt, 96, 96, PixelFormats.Rgb24, null);
            var epAvailable = this.WhenAnyValue(t => t.SelectedElevationProvider)
                              .Select(sep => sep != null);

            _retrieveElevationsCommand = ReactiveCommand.CreateAsyncTask(epAvailable, _ => refreshElevationsAsync());

            _retrieveElevationsCommand.ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(s => ElevationValueStats = s);
            _retrieveElevationsCommand.ThrownExceptions.Subscribe(e => UserError.Throw("Error during retrieval of elevation data", e));
            _selectedElevationProvider = _availableElevationProviders.FirstOrDefault();

            _progress = _progresSubject.ToProperty(this, t => t.Progress, scheduler: RxApp.MainThreadScheduler);
        }
Exemplo n.º 12
0
        private async Task<float[][]> retrieveElevationAsyncImpl(IElevationProvider ep, double minLat, double latRange, double minLon, double lonRange)
        {
            float[][] result = new float[pixelHeightInt][];

            for (int rIdx = 0; rIdx < pixelHeightInt; rIdx++)
            {
                double lat = minLat + rIdx * latRange / pixelHeightInt;
                result[rIdx] = await retrieveRowElevationAsync(ep, lat, minLon, lonRange);
                _progresSubject.OnNext(rIdx * 1.0 / pixelHeightInt);
            }

            return result;
        }
Exemplo n.º 13
0
 public WaypointModelBuilder(IElevationProvider elevationProvider, 
     IGameObjectFactory gameObjectFactory)
 {
     _elevationProvider = elevationProvider;
     _gameObjectFactory = gameObjectFactory;
 }
Exemplo n.º 14
0
 public WaypointModelBuilder(IElevationProvider elevationProvider,
                             IGameObjectFactory gameObjectFactory)
 {
     _elevationProvider = elevationProvider;
     _gameObjectFactory = gameObjectFactory;
 }