コード例 #1
0
        public TheaterDotLxFileRecord GetElevationPostRecordByColumnAndRow(int postColumn, int postRow, uint lod)
        {
            if (_terrainDB == null || _terrainDB.TheaterDotLxFiles == null)
            {
                return(null);
            }
            var lodInfo = _terrainDB.TheaterDotLxFiles[lod];

            if (lodInfo.O == null || lodInfo.L == null)
            {
                return(null);
            }
            var       mapInfo     = _terrainDB.TheaterDotMap;
            const int postsAcross = Constants.NUM_ELEVATION_POSTS_ACROSS_SINGLE_LOD_SEGMENT;

            _elevationPostCoordinateClamper.ClampElevationPostCoordinates(ref postColumn, ref postRow, lodInfo.LoDLevel);
            var blockRow = (int)Math.Floor((postRow / (float)postsAcross));
            var blockCol = (int)Math.Floor((postColumn / (float)postsAcross));
            var oIndex   = (int)(blockRow * mapInfo.LODMapHeights[lodInfo.LoDLevel]) + blockCol;
            var block    = lodInfo.O[oIndex];
            var col      = (postColumn % postsAcross);
            var row      = (postRow % postsAcross);
            var lIndex   =
                (int)
                (((block.LRecordStartingOffset / (lodInfo.LRecordSizeBytes * postsAcross * postsAcross)) * postsAcross *
                  postsAcross) + ((row * postsAcross) + col));
            var lRecord = lodInfo.L[lIndex];

            return(lRecord);
        }
        public void GetNearestElevationPostColumnAndRowForNorthEastCoordinates(float feetNorth, float feetEast, uint lod, out int col, out int row)
        {
            var feetBetweenElevationPosts = _distanceBetweenElevationPostsCalculator.GetNumFeetBetweenElevationPosts(lod);

            col = (int)Math.Floor(feetEast / feetBetweenElevationPosts);
            row = (int)Math.Floor(feetNorth / feetBetweenElevationPosts);
            _elevationPostCoordinateClamper.ClampElevationPostCoordinates(ref row, ref col, lod);
        }
        public Bitmap GetDetailTextureForElevationPost(int postCol, int postRow, uint lod)
        {
            var col = postCol;
            var row = postRow;

            _elevationPostCoordinateClamper.ClampElevationPostCoordinates(ref col, ref row, lod);
            if (postCol != col || postRow != row)
            {
                col = 0;
                row = 0;
            }


            var lRecord = _columnAndRowElevationPostRetriever.GetElevationPostRecordByColumnAndRow(col, row, lod);

            if (lRecord == null)
            {
                return(null);
            }

            var textureId  = lRecord.TextureId;
            var bigTexture = _terrainTextureByTextureIdRetriever.GetTerrainTextureByTextureId(textureId, lod);

            Bitmap toReturn;

            if (lod <= _terrainDB.TheaterDotMap.LastNearTiledLOD)
            {
                var chunksWide      = 4 >> (int)lod;
                var thisChunkXIndex = (uint)(col % chunksWide);
                var thisChunkYIndex = (uint)(row % chunksWide);

                var leftX   = (int)(thisChunkXIndex * (bigTexture.Width / chunksWide));
                var rightX  = (int)((thisChunkXIndex + 1) * (bigTexture.Width / chunksWide)) - 1;
                var topY    = (int)(bigTexture.Height - (thisChunkYIndex + 1) * (bigTexture.Height / chunksWide));
                var bottomY = (int)(bigTexture.Height - thisChunkYIndex * (bigTexture.Height / chunksWide)) - 1;

                var sourceRect = new Rectangle(leftX, topY, (rightX - leftX) + 1, (bottomY - topY) + 1);

                toReturn = (Bitmap)Util.CropBitmap(bigTexture, sourceRect);
                bigTexture.Dispose();
            }
            else
            {
                toReturn = bigTexture;
            }
            return(toReturn);
        }
コード例 #4
0
ファイル: TerrainDB.cs プロジェクト: karpiyon/lightningstools
 public void ClampElevationPostCoordinates(ref int postColumn, ref int postRow, uint lod)
 {
     _elevationPostCoordinateClamper.ClampElevationPostCoordinates(ref postColumn, ref postRow, lod);
 }