+ // Write base image if necessary
+ ImageDefinition imageDef = _baseImagePanel.getImageDefinition();
+ boolean useImage = imageDef.getUseImage();
+ if (useImage)
+ {
+ // Get base image from grouter
+ MapSource mapSource = MapSourceLibrary.getSource(imageDef.getSourceIndex());
+ MapGrouter grouter = _baseImagePanel.getGrouter();
+ GroutedImage baseImage = grouter.getMapImage(_track, mapSource, imageDef.getZoom());
+ try
+ {
+ useImage = ImageIO.write(baseImage.getImage(), "png", inImageFile);
+ }
+ catch (IOException ioe) {
+ System.err.println("Can't write image: " + ioe.getClass().getName());
+ useImage = false;
+ }
+ if (!useImage) {
+ _app.showErrorMessage(getNameKey(), "dialog.exportpov.cannotmakebaseimage");
+ }
+ }
+
+ boolean useTerrain = _terrainPanel.getUseTerrain();
+ if (useTerrain)
+ {
+ TerrainHelper terrainHelper = new TerrainHelper(_terrainPanel.getGridSize());
+ // See if there's a previously saved terrain track we can reuse
+ TerrainDefinition terrainDef = new TerrainDefinition(_terrainPanel.getUseTerrain(), _terrainPanel.getGridSize());
+ Track terrainTrack = TerrainCache.getTerrainTrack(_app.getCurrentDataStatus(), terrainDef);
+ if (terrainTrack == null)
+ {
+ // Construct the terrain track according to these extents and the grid size
+ terrainTrack = terrainHelper.createGridTrack(_track);
+ // Get the altitudes from SRTM for all the points in the track
+ LookupSrtmFunction srtmLookup = (LookupSrtmFunction) FunctionLibrary.FUNCTION_LOOKUP_SRTM;
+ srtmLookup.begin(terrainTrack);
+ while (srtmLookup.isRunning())
+ {
+ try {
+ Thread.sleep(750); // just polling in a wait loop isn't ideal but simple
+ }
+ catch (InterruptedException e) {}
+ }
+ // Fix the voids
+ terrainHelper.fixVoids(terrainTrack);
+
+ // Store this back in the cache, maybe we'll need it again
+ TerrainCache.storeTerrainTrack(terrainTrack, _app.getCurrentDataStatus(), terrainDef);
+ }