예제 #1
0
        public void CreateDemTileCreatorTest()
        {
            MockClasses.MockElevationMap map = new MockClasses.MockElevationMap();
            ITileCreator demTileCreator      = TileCreatorFactory.CreateDemTileCreator(map, ProjectionTypes.Mercator, Environment.CurrentDirectory);

            // Validate Mercator file
            Assert.AreEqual(ProjectionTypes.Mercator, demTileCreator.ProjectionType);
        }
예제 #2
0
        public GameDataViewModel(GameData data, ITileCreator creator,SteamAPI steamAPI)
            : base(data, creator)
        {
            _steamAPI = steamAPI;

            UpdateImageFromSteamCommand= new LabeledRelayCommand("Update image from Steam", () => UpdateImageFromSteam(), () => Model != null);
            UpdateIsInstalledCommand = new LabeledRelayCommand("Update Installation status", () => UpdateIsInstalled(), () => Model != null);
        }
예제 #3
0
        /// <summary>
        /// Processes the input equirectangular image.
        /// </summary>
        /// <param name="inputImage">
        /// Input image path.
        /// </param>
        /// <param name="outputDir">
        /// Output directory where pyramid is generated.
        /// </param>
        /// <param name="projection">
        /// Projection type.
        /// </param>
        private static void ProcessEquirectangularImage(string inputImage, string outputDir, ProjectionTypes projection)
        {
            Trace.TraceInformation("{0}: Reading image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageFormat imageFormat = ImageFormat.Png;

            // Set the grid boundaries
            var imageBoundary = new Boundary(-180, -90, 180, 90);

            // Build an image grid using the input image
            var imageGrid = new ImageGrid(inputImage, true);

            // Build the grid map for equirectangular projection using the image grid and boundary co-ordinates
            var equirectangularGridMap = new EquirectangularGridMap(imageGrid, imageBoundary);

            // Build the color map using equirectangular projection grid map
            var imageColorMap = new ImageColorMap(equirectangularGridMap);

            var maximumLevelsOfDetail = TileHelper.CalculateMaximumLevel(imageGrid.Height, imageGrid.Width, imageBoundary);

            // Define ITileCreator instance for creating image tiles.
            ITileCreator tileCreator = TileCreatorFactory.CreateImageTileCreator(imageColorMap, projection, outputDir);

            // Define plumbing for looping through all the tiles to be created for base image and pyramid.
            var tileGenerator = new TileGenerator(tileCreator);

            // Start building base image and the pyramid.
            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            tileGenerator.Generate(maximumLevelsOfDetail);

            string fileName = Path.GetFileNameWithoutExtension(inputImage);

            // Generate Plate file.
            Trace.TraceInformation("{0}: Building Plate file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer pyramid        = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            PlateFileGenerator  plateGenerator = new PlateFileGenerator(
                Path.Combine(outputDir, fileName + ".plate"),
                maximumLevelsOfDetail,
                ImageFormat.Png);

            plateGenerator.CreateFromImageTile(pyramid);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(inputImage, 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Get the path of image tiles created and save it in WTML file.
            Trace.TraceInformation("{0}: Building WTML file..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string pyramidPath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());

            // Create and save WTML collection file.
            WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, pyramidPath, maximumLevelsOfDetail, projection);
            string         path           = Path.Combine(outputDir, fileName + ".wtml");

            wtmlCollection.Save(path);
            Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
        }
예제 #4
0
        public void CreateDemTileCreatorWithSerializerTest()
        {
            MockClasses.MockElevationMap      map            = new MockClasses.MockElevationMap();
            MockClasses.MockDemTileSerializer mockSerializer = new MockClasses.MockDemTileSerializer();
            ITileCreator demTileCreator = TileCreatorFactory.CreateDemTileCreator(map, ProjectionTypes.Toast, mockSerializer);

            // Validate Mercator file
            Assert.AreEqual(ProjectionTypes.Toast, demTileCreator.ProjectionType);
        }
예제 #5
0
        public GameDataViewModel(GameData data, ITileCreator creator, SteamAPI steamAPI)
            : base(data, creator)
        {
            _steamAPI = steamAPI;


            UpdateImageFromSteamCommand = new LabeledRelayCommand("Update image from Steam", () => UpdateImageFromSteam(), () => Model != null);
            UpdateIsInstalledCommand    = new LabeledRelayCommand("Update Installation status", () => UpdateIsInstalled(), () => Model != null);
        }
예제 #6
0
        /// <summary>
        /// Initializes a new instance of the TileGenerator class.
        /// </summary>
        /// <param name="creator">
        /// TileCreator object to be used.
        /// </param>
        public TileGenerator(ITileCreator creator)
        {
            if (creator == null)
            {
                throw new ArgumentNullException("creator");
            }

            this.ParallelOptions = new ParallelOptions();
            this.tileCreator     = creator;
        }
예제 #7
0
        /// <summary>
        /// Initializes a new instance of the TileGenerator class.
        /// </summary>
        /// <param name="creator">
        /// TileCreator object to be used.
        /// </param>
        public TileGenerator(ITileCreator creator)
        {
            if (creator == null)
            {
                throw new ArgumentNullException("creator");
            }

            this.ParallelOptions = new ParallelOptions();
            this.tileCreator = creator;
        }
예제 #8
0
 public TileCreator(ILoggerFacade logger)
 {
     logger.Log($"Windows Version : {Environment.OSVersion.Version}",Category.Info,Priority.High);
     
     if (Environment.OSVersion.Version.Build >= 10586)
         Creator = new Win10TP2TileCreator(logger);
     else 
         Creator = null;
     
     if (Creator == null) 
         throw new InvalidOperationException("This version of Windows does not support creating Tiles!");
 }
예제 #9
0
        public TileDataViewModel(TileData data,ITileCreator creator)
        {
            Model = data;
            TileCreator = creator;

            UpdateAvailableLinkTypes();
            var dataChanged = (data as INotifyPropertyChanged);
            if(dataChanged!= null)
            {
                dataChanged.PropertyChanged += (o, e) =>
                {
                    UpdateAvailableLinkTypes();
                };
            }
        }
예제 #10
0
        public TileDataViewModel(TileData data, ITileCreator creator)
        {
            Model       = data;
            TileCreator = creator;

            UpdateAvailableLinkTypes();
            var dataChanged = (data as INotifyPropertyChanged);

            if (dataChanged != null)
            {
                dataChanged.PropertyChanged += (o, e) =>
                {
                    UpdateAvailableLinkTypes();
                };
            }
        }
예제 #11
0
        /// <summary>
        /// Processes the input equirectangular dataset.
        /// </summary>
        /// <param name="inputFile">
        /// Input File path.
        /// </param>
        /// <param name="outputDir">
        /// Output directory where pyramid is generated.
        /// </param>
        /// <param name="colorMapPath">
        /// Map of color map file.
        /// </param>
        /// <param name="orientation">
        /// Orientation of color map file.
        /// </param>
        /// <param name="projection">
        /// Projection type.
        /// </param>
        public static void ProcessEquirectangularGrid(string inputFile, string outputDir, string colorMapPath, ColorMapOrientation orientation, ProjectionTypes projection)
        {
            Trace.TraceInformation("{0}: Reading input dataset...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));

            // Get grid details from the input file
            var dataGridDetails = DataGridHelper.LoadFromFile(inputFile);

            // Populate the data grid using grid details
            var dataGrid = new DataGrid(dataGridDetails.Data, true);

            // Build a equirectangular projection grid map using the data grid and boundary details
            var equirectangularGridMap = new EquirectangularGridMap(dataGrid, dataGridDetails.Boundary);

            // Build a color map using equirectangular projection grid map
            var dataColorMap = new DataColorMap(colorMapPath, equirectangularGridMap, orientation, dataGridDetails.MinimumThreshold, dataGridDetails.MaximumThreshold);

            // Define an instance of ITileCreator to create image tiles.
            ITileCreator imageTileCreator = TileCreatorFactory.CreateImageTileCreator(dataColorMap, projection, outputDir);

            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            TileGenerator tileGenerator = new TileGenerator(imageTileCreator);
            int           zoomLevels    = 5;

            tileGenerator.Generate(zoomLevels);

            string fileName = Path.GetFileNameWithoutExtension(inputFile);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer tileSerializer = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(tileSerializer.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Create and save WTML file.
            Trace.TraceInformation("{0}: Generating WTML file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string         textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png.ToString());
            WtmlCollection wtmlCollection  = new WtmlCollection(fileName, thumbnailFile, textureTilePath, zoomLevels, projection);

            wtmlCollection.IsElevationModel = false;
            string path = Path.Combine(outputDir, fileName + ".wtml");

            wtmlCollection.Save(path);
            Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
        }
예제 #12
0
        public TileCreator(ILoggerFacade logger)
        {
            logger.Log($"Windows Version : {Environment.OSVersion.Version}", Category.Info, Priority.High);

            if (Environment.OSVersion.Version.Build >= 10586)
            {
                Creator = new Win10TP2TileCreator(logger);
            }
            else
            {
                Creator = null;
            }

            if (Creator == null)
            {
                throw new InvalidOperationException("This version of Windows does not support creating Tiles!");
            }
        }
예제 #13
0
 public override T GetTile <T>(ITileCreator <T> t)
 {
     return(t.GetTile(this));
 }
예제 #14
0
        /// <summary>
        /// Processes a list of input image tiles and generates pyramid for level N.
        /// </summary>
        /// <param name="inputFilePath">Xml file with list of image tile information.</param>
        /// <param name="outputDir">Output directory where the image tiles of pyramid has to be stored.</param>
        /// <param name="projection">Projection to be used.</param>
        /// <param name="inputBoundary">Input image boundary.</param>
        private static void ProcessMultipartEquirectangularImage(string inputFilePath, string outputDir, ProjectionTypes projection, Boundary inputBoundary)
        {
            ImageFormat imageFormat = ImageFormat.Png;

            Trace.TraceInformation("{0}: Reading image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));

            // Get the list of equirectangular images input.
            string[,] imageTiles = Program.GetInputImageList(inputFilePath);

            // Check if the image is circular.
            double longitudeDelta = inputBoundary.Right - inputBoundary.Left;
            bool   circular       = (360.0 - longitudeDelta) < 0.000001;

            // Build an image grid using the input images
            var imageGrid = new ImageGrid(imageTiles, circular);

            // Build the grid map for equirectangular projection using the image grid and boundary co-ordinates
            var equirectangularGridMap = new EquirectangularGridMap(imageGrid, inputBoundary);

            // Build the color map using equirectangular projection grid map
            var imageColorMap = new ImageColorMap(equirectangularGridMap);

            var maximumLevelsOfDetail = TileHelper.CalculateMaximumLevel(imageGrid.Height, imageGrid.Width, inputBoundary);

            // Define ITileCreator instance for creating image tiles.
            ITileCreator tileCreator = TileCreatorFactory.CreateImageTileCreator(imageColorMap, projection, outputDir);

            // Define bounds of the image. Image is assumed to cover the entire world.
            // If not, change the coordinates accordingly.
            // For Mercator projection, longitude spans from -180 to +180 and latitude from 90 to -90.
            Boundary gridBoundary = new Boundary(inputBoundary.Left, inputBoundary.Top, inputBoundary.Right, inputBoundary.Bottom);

            if (projection == ProjectionTypes.Toast)
            {
                // For Toast projection, longitude spans from 0 to +360 and latitude from 90 to -90.
                gridBoundary.Left  += 180;
                gridBoundary.Right += 180;
            }

            // Define plumbing for looping through all the tiles to be created for base image and pyramid.
            var tileGenerator = new TileGenerator(tileCreator);

            // Start building base image and the pyramid.
            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            tileGenerator.Generate(maximumLevelsOfDetail, gridBoundary);

            string fileName = Path.GetFileNameWithoutExtension(inputFilePath);

            // Generate Plate file.
            Trace.TraceInformation("{0}: Building Plate file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer pyramid        = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            PlateFileGenerator  plateGenerator = new PlateFileGenerator(
                Path.Combine(outputDir, fileName + ".plate"),
                maximumLevelsOfDetail,
                ImageFormat.Png);

            plateGenerator.CreateFromImageTile(pyramid);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(pyramid.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Get the path of image tiles created and save it in WTML file.
            Trace.TraceInformation("{0}: Building WTML file..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string pyramidPath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());

            // Create and save WTML collection file.
            WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, pyramidPath, maximumLevelsOfDetail, projection, inputBoundary);
            string         path           = Path.Combine(outputDir, fileName + ".wtml");

            wtmlCollection.Save(path);
            Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
        }
예제 #15
0
        public ITile ConstructTile(ITileEntry tileEntry)
        {
            ITileCreator creator = TILE_CREATORS.Find(c => c.Applies(tileEntry));

            return(creator.Create(tileEntry, this));
        }
예제 #16
0
        public SteamSelectorViewModel(IEventAggregator eventAggregator, ITileCreator tileCreator)
        {
            _tileDataSelectedEvent = eventAggregator.GetEvent <TileDataSelectedEvent>();
            _tileDataSelectedEvent.Subscribe(o =>
            {
                try
                {
                    _reactingToTileDataSelectedEvent = true;
                    SelectedGameData = o as GameDataViewModel;
                }
                finally
                {
                    _reactingToTileDataSelectedEvent = false;
                }
            });
            _tileCreator = tileCreator;

            RefreshCommand = new AsyncRelayCommand(() => Refresh(), null, true);


            UserData = CacheManager.LoadFromCache <UserData>().FirstOrDefault() ?? new UserData();
            SteamAPI = new SteamAPI(UserData.SteamCommunityId);


            UserData.SteamCommunityIdChanged += async(o, e) =>
            {
                await UserData.SaveToCacheAsync();

                SteamAPI = new SteamAPI(UserData.SteamCommunityId);
            };



            var cachedGameDatas = CacheManager.LoadFromCache <GameData>()
                                  .OrderBy(o => o.IsInstalled ? 0 : 1)
                                  .ThenBy(o => o.Name)
                                  .Select(o => new GameDataViewModel(o, _tileCreator, SteamAPI));

            GameDatas.AddRange(cachedGameDatas);

            GameDatas.CollectionChanged += async(o, e) =>
            {
                switch (e.Action)
                {
                case NotifyCollectionChangedAction.Add:

                    foreach (GameData item in e.NewItems)
                    {
                        await item.SaveToCacheAsync();
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (GameData item in e.OldItems)
                    {
                        await item.RemoveFromCacheAsync();
                    }
                    break;

                default:
                    break;
                }
            };


            Application.Current.Exit += (o, e) =>
            {
                UserData.SaveToCache();
                if (SelectedGameData != null)
                {
                    SelectedGameData.GameModel.SaveToCache();
                }
            };
        }
예제 #17
0
 public abstract T GetTile <T>(ITileCreator <T> t);
예제 #18
0
        public async Task MakeThumbnailAsync(Bitmap imgOrig, ITileCreator creator, CancellationToken token)
        {
            using var stream = CreateThumbnailStream(imgOrig);

            await creator.AddThumbnailAsync(stream, token);
        }
예제 #19
0
        public async Task TileBitmap(Bitmap bmp, ITileCreator creator, CancellationToken token)
        {
            int    width  = bmp.Width;
            int    height = bmp.Height;
            double aspect = (double)width / (double)height;

            //narrower
            int levels    = 1;
            int maxHeight = 256;
            int maxWidth  = 512;

            do
            {
                if (aspect < 2)
                {
                    if (maxHeight >= height)
                    {
                        break;
                    }
                }
                else
                {
                    if (maxWidth >= width)
                    {
                        break;
                    }
                }
                levels++;
                maxHeight *= 2;
                maxWidth  *= 2;
            } while (true);

            int xOffset = (maxWidth - width) / 2;
            int yOffset = (maxHeight - height) / 2;

            int l = levels;

            int gridX = 256;
            int gridY = 256;

            while (l > 0)
            {
                l--;
                int currentLevel = l;

                int tilesX = 2 * (int)Math.Pow(2, l);
                int tilesY = (int)Math.Pow(2, l);

                for (int y = 0; y < tilesY; y++)
                {
                    for (int x = 0; x < tilesX; x++)
                    {
                        if ((((x + 1) * gridX) > xOffset) && (((y + 1) * gridX) > yOffset) &&
                            (((x) * gridX) < (xOffset + width)) && (((y) * gridX) < (yOffset + height)))
                        {
                            using Bitmap bmpTile = new Bitmap(256, 256);
                            using (Graphics gfx = Graphics.FromImage(bmpTile))
                            {
                                gfx.DrawImage(bmp, new Rectangle(0, 0, 256, 256),
                                              new Rectangle((x * gridX) - xOffset, (y * gridX) - yOffset, gridX, gridX),
                                              GraphicsUnit.Pixel);
                            }

                            using var stream = bmpTile.SaveToStream(ImageFormat.Png);
                            await creator.AddTileAsync(stream, currentLevel, x, y, token);
                        }
                    }
                }

                gridX *= 2;
                gridY *= 2;
            }
        }
예제 #20
0
        /// <summary>
        /// Processes the input equirectangular dataset.
        /// </summary>
        /// <param name="inputGrid">
        /// Input image path.
        /// </param>
        /// <param name="outputDir">
        /// Output directory where pyramid is generated.
        /// </param>
        /// <param name="projection">
        /// Projection type.
        /// </param>
        private static void ProcessEquirectangularGrid(string inputGrid, string outputDir, ProjectionTypes projection)
        {
            Trace.TraceInformation("{0}: Reading dataset..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageFormat imageFormat = ImageFormat.Png;

            // Read and parse glacier bay dataset.
            // Define a color map with relief shading implemented.
            var datagridDetails = DataGridHelper.LoadFromFile(inputGrid);

            // Build a data grid using the input data set
            var dataGrid = new DataGrid(datagridDetails.Data, false);

            // Build the grid map for equirectangular projection using the data grid and boundary co-ordinates
            var equirectangularGridMap = new EquirectangularGridMap(dataGrid, datagridDetails.Boundary);

            // Build the color map using equirectangular projection grid map
            var dataColorMap = new ShadedReliefColorMap(equirectangularGridMap);

            var maximumLevelsOfDetail = 15;

            // Define an instance of ITileCreator to create image tiles.
            ITileCreator imageTileCreator = TileCreatorFactory.CreateImageTileCreator(dataColorMap, projection, outputDir);

            // Define an instance of ITileCreator to create DEM tiles.
            // Define serialization mechanism for storing and retrieving DEM tiles.
            ITileCreator demTileCreator = TileCreatorFactory.CreateDemTileCreator(dataColorMap, projection, outputDir);

            // MultiTile creator encapsulates image and DEM tile creators.
            var multiTileCreator = new MultiTileCreator(new Collection <ITileCreator>()
            {
                imageTileCreator, demTileCreator
            }, projection);

            // Define boundary for the region.
            var boundary = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom);

            if (projection == ProjectionTypes.Toast)
            {
                boundary.Left  += 180.0;
                boundary.Right += 180.0;
            }

            // Generate base tiles and fill up the pyramid.
            var tileGenerator = new TileGenerator(multiTileCreator);

            tileGenerator.Generate(maximumLevelsOfDetail, boundary);

            // Path of Mercator and Toast DEM tile server.
            const string MercatorDemTilePath = @"http://(web server address)?Q={0},{1},{2},Mercator,dem2178";
            const string ToastDemTilePath    = @"http://(web server address)?Q={0},{1},{2},Toast,dem1033";

            string fileName = Path.GetFileNameWithoutExtension(inputGrid);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer tileSerializer = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(tileSerializer.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Create and save WTML file.
            string         textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());
            var            inputBoundary   = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom);
            WtmlCollection wtmlCollection  = new WtmlCollection(fileName, thumbnailFile, textureTilePath, maximumLevelsOfDetail, projection, inputBoundary);

            wtmlCollection.ZoomLevel        = 0.2;
            wtmlCollection.IsElevationModel = true;
            wtmlCollection.DemTilePath      = projection == ProjectionTypes.Mercator ? MercatorDemTilePath : ToastDemTilePath;
            string path = Path.Combine(outputDir, fileName + ".wtml");

            wtmlCollection.Save(path);
            Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
        }
예제 #21
0
        public SteamSelectorViewModel(IEventAggregator eventAggregator, ITileCreator tileCreator)
        {
            _tileDataSelectedEvent = eventAggregator.GetEvent<TileDataSelectedEvent>();
            _tileDataSelectedEvent.Subscribe(o =>
            {
                try
                {
                    _reactingToTileDataSelectedEvent = true;
                    SelectedGameData = o as GameDataViewModel;
                }
                finally
                {
                    _reactingToTileDataSelectedEvent = false;
                }
            });
            _tileCreator = tileCreator;

            RefreshCommand = new AsyncRelayCommand(() => Refresh(), null, true);


            UserData = CacheManager.LoadFromCache<UserData>().FirstOrDefault() ?? new UserData();
            SteamAPI = new SteamAPI(UserData.SteamCommunityId);


            UserData.SteamCommunityIdChanged += async (o, e) =>
             {
                 await UserData.SaveToCacheAsync();
                 SteamAPI = new SteamAPI(UserData.SteamCommunityId);
             };



            var cachedGameDatas = CacheManager.LoadFromCache<GameData>()
                    .OrderBy(o => o.IsInstalled ? 0 : 1)
                    .ThenBy(o => o.Name)
                    .Select(o => new GameDataViewModel(o, _tileCreator, SteamAPI));

            GameDatas.AddRange(cachedGameDatas);

            GameDatas.CollectionChanged += async (o, e) =>
             {
                 switch (e.Action)
                 {
                     case NotifyCollectionChangedAction.Add:

                         foreach (GameData item in e.NewItems)
                             await item.SaveToCacheAsync();
                         break;
                     case NotifyCollectionChangedAction.Remove:
                         foreach (GameData item in e.OldItems)
                             await item.RemoveFromCacheAsync();
                         break;
                     default:
                         break;
                 }
             };


            Application.Current.Exit += (o, e) =>
            {
                UserData.SaveToCache();
                if (SelectedGameData != null)
                    SelectedGameData.GameModel.SaveToCache();

            };


        }
예제 #22
0
        private void loaderWorker_CreateTiles(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            _creator = TileCreatorFactory.GetFactory(_file).Create(_file as RlViewer.Files.LocatorFile, _settings.TileOutputAlgorithm);

            ((WorkerEventController)_creator).Report += (s, pe) => ProgressReporter(pe.Percent);
            ((WorkerEventController)_creator).CancelJob += (s, ce) => ce.Cancel = ((WorkerEventController)_creator).Cancelled;
            ((WorkerEventController)_creator).ReportName += (s, tne) =>
                ThreadHelper.ThreadSafeUpdateToolStrip<ToolStripStatusLabel>(_form.StatusLabel, lbl => { lbl.Text = tne.Name; });

            _cancellableAction = ((WorkerEventController)_creator);

            try
            {
                e.Result = _creator.GetTiles(_file.Properties.FilePath, _settings.ForceTileGeneration, _settings.AllowViewWhileLoading);
            }
            catch (OperationCanceledException)
            {
                e.Cancel = true;
            }
            catch (AggregateException aggrex)
            {
                if (aggrex.InnerException.GetType() == typeof(OperationCanceledException))
                {
                    e.Cancel = true;
                }
            }
        }