Esempio n. 1
0
        private void GatherLeaves(uint key, byte lvl, List <uint> leaves)
        {
            var cur_node = map.Get(key);

            if (cur_node == 0)
            {
                return;
            }

            if ((cur_node & LeafNodeBit) == 0)  //Not a leaf node
            {
                for (uint i = 0; i < 8; i++)    //Depth-first traversal
                {
                    GatherLeaves((key << 3) | i, (byte)(lvl + 1), leaves);
                }
            }
            else
            {
                //recode cur_node
                MortonCoder.Decode((key << (3 * (MaxLevel - lvl))) & 0x003fffff, out var x, out var y, out var z);
                leaves.Add(x | (uint)(y << 7) | (uint)(z << 14) | (uint)((lvl & 0x7) << 21) | (key & 0xff00_0000));
            }
        }
Esempio n. 2
0
 static uint ComputeKey_RootRel(byte x, byte y, byte z, byte lvl, byte mat, bool isLeaf)
 {
     return((isLeaf ? LeafNodeBit : 0u) | (1u << (3 * lvl)) | (MortonCoder.Encode(x, y, z) >> (int)(3 * (MaxLevel - lvl))) | (uint)(mat << 24));
 }