------------------------------------------------------------------------------ Internal function to get bucket neighbors at specified level
| 918 | // Internal function to get bucket neighbors at specified level |
| 919 | // |
| 920 | void vtkPointLocator::GetBucketNeighbors( |
| 921 | vtkNeighborPoints* buckets, const int ijk[3], const int ndivs[3], int level) |
| 922 | { |
| 923 | int i, j, k, min, max, minLevel[3], maxLevel[3]; |
| 924 | int nei[3]; |
| 925 | // |
| 926 | // Initialize |
| 927 | // |
| 928 | buckets->Reset(); |
| 929 | // |
| 930 | // If at this bucket, just place into list |
| 931 | // |
| 932 | if (level == 0) |
| 933 | { |
| 934 | buckets->InsertNextPoint(ijk); |
| 935 | return; |
| 936 | } |
| 937 | // |
| 938 | // Create permutations of the ijk indices that are at the level |
| 939 | // required. If these are legal buckets, add to list for searching. |
| 940 | // |
| 941 | for (i = 0; i < 3; i++) |
| 942 | { |
| 943 | min = ijk[i] - level; |
| 944 | max = ijk[i] + level; |
| 945 | minLevel[i] = (min > 0 ? min : 0); |
| 946 | maxLevel[i] = (max < (ndivs[i] - 1) ? max : (ndivs[i] - 1)); |
| 947 | } |
| 948 | |
| 949 | for (i = minLevel[0]; i <= maxLevel[0]; i++) |
| 950 | { |
| 951 | for (j = minLevel[1]; j <= maxLevel[1]; j++) |
| 952 | { |
| 953 | for (k = minLevel[2]; k <= maxLevel[2]; k++) |
| 954 | { |
| 955 | if (i == (ijk[0] + level) || i == (ijk[0] - level) || j == (ijk[1] + level) || |
| 956 | j == (ijk[1] - level) || k == (ijk[2] + level) || k == (ijk[2] - level)) |
| 957 | { |
| 958 | nei[0] = i; |
| 959 | nei[1] = j; |
| 960 | nei[2] = k; |
| 961 | buckets->InsertNextPoint(nei); |
| 962 | } |
| 963 | } |
| 964 | } |
| 965 | } |
| 966 | } |
| 967 | |
| 968 | //------------------------------------------------------------------------------ |
| 969 | // Internal method to find those buckets that are within distance specified |
no test coverage detected