/// <summary> /// Select terrain elevation blocks from the terrain database. /// </summary> /// <param name="area"> /// The <see cref="GeoTreeArea"/> that the returned items must intersect. /// </param> /// <returns> /// It returns a <see cref="ICollection{ITerrainBlock}"/> that intersect <paramref name="area"/>. /// </returns> public static ICollection <ITerrainBlock> SelectElevationBlocks(GeoTreeArea area) { List <ITerrainBlock> blocks = new List <ITerrainBlock>(); foreach (ITerrainBlock block in _GeoElevationTree.Select(area)) { blocks.Add(block); } return(blocks); }
/// <summary> /// /// </summary> /// <param name="geoArea"> /// /// </param> /// <param name="precision"> /// /// </param> private void CreateElevationTextures(GeoTreeArea geoArea, Vertex2d precision) { foreach (Terrain.ITerrainBlock terrainBlock in Terrain.SelectElevationBlocks(geoArea)) { ElevationTexture elevationTexture; // COllect texture if not defined yet if (_ElevationTextures.TryGetValue(terrainBlock.Id, out elevationTexture)) { elevationTexture = new ElevationTexture(terrainBlock); LinkResource(elevationTexture); _ElevationTextures.Add(terrainBlock.Id, elevationTexture); } // Do not dispose texture elevationTexture.UpdateTime = DateTime.UtcNow; // Determine which LOD need to be present uint lod = 0; for (double lodPrecision = terrainBlock.TextelPrecision; precision.x > lodPrecision; lodPrecision /= 2.0, lod++) { ; } // Mipmap already loaded? if (_ElevationTexture.HasMipMapLevel(lod)) { continue; } // Load mipmap elevationTexture.Create(lod); } }