Example #1
0
        public unsafe IPointDataChunk Process(IPointDataChunk chunk)
        {
            if (chunk.PointCount > m_maxPointCountPerChunk)
            {
                m_maxPointCountPerChunk = chunk.PointCount;
            }

            // get the tile indices for this chunk
            var tileIndices = new HashSet <int>();
            var lastIndex   = -1;

            // JUST TESTING TO SEE IF I LIKE THIS WAY BETTER (slightly slower?)
            //var iterator = new SQuantizedPoint3DIterator(chunk);
            //while (iterator.IsValid)
            //{
            //    var p = iterator.Next();
            //    var y = (ushort)(((*p).Y - minY) * tilesOverRangeY);
            //    var x = (ushort)(((*p).X - minX) * tilesOverRangeX);

            //    ++m_grid.Data[y, x];

            //    // indexing
            //    int tileIndex = PointCloudTileCoord.GetIndex(y, x);
            //    if (tileIndex != lastIndex)
            //    {
            //        tileIndices.Add(tileIndex);
            //        lastIndex = tileIndex;
            //    }
            //}

            // JUST TESTING TO SEE IF I LIKE THIS WAY BETTER (slightly slower?)
            foreach (var pp in chunk.GetSQuantizedPoint3DEnumerator())
            {
                //var p = (LASPointFormat1*)pp.GetPointer();
                var p = pp.GetPointer();
                var y = (((*p).Y - m_quantizedExtent.MinY) / m_grid.CellSizeY);
                var x = (((*p).X - m_quantizedExtent.MinX) / m_grid.CellSizeX);

                ++m_grid.Data[y, x];

                // indexing
                int tileIndex = PointCloudTileCoord.GetIndex(y, x);
                if (tileIndex != lastIndex)
                {
                    tileIndices.Add(tileIndex);
                    lastIndex = tileIndex;
                }
            }

            //var pb = chunk.PointDataPtr;
            //while (pb < chunk.PointDataEndPtr)
            //{
            //    var p = (SQuantizedPoint3D*)pb;

            //    var y = (ushort)(((*p).Y - minY) * tilesOverRangeY);
            //    var x = (ushort)(((*p).X - minX) * tilesOverRangeX);

            //    ++m_grid.Data[y, x];

            //    // indexing
            //    int tileIndex = PointCloudTileCoord.GetIndex(y, x);
            //    if (tileIndex != lastIndex)
            //    {
            //        tileIndices.Add(tileIndex);
            //        lastIndex = tileIndex;
            //    }

            //    pb += chunk.PointSizeBytes;
            //}

            m_chunkTiles.Add(tileIndices.ToArray());

            return(chunk);
        }
Example #2
0
        private PointCloudTile GetTileInternal(int row, int col)
        {
            var index = -1;

            return(m_tileIndex.TryGetValue(PointCloudTileCoord.GetIndex(row, col), out index) ? m_tiles[index] : null);
        }