MCPcopy Create free account
hub / github.com/Kitware/VTK / GetOverlappingBuckets

Method GetOverlappingBuckets

Common/DataModel/vtkCellLocator.cxx:566–657  ·  view source on GitHub ↗

------------------------------------------------------------------------------ Internal method to find those buckets that are within distance specified. Only those buckets outside of level radiuses of ijk are returned. The bucket neighbors are indices into the "leaf-node" layer of the octree. These indices must be offset by number of octants before the leaf node layer before they can be used. Only

Source from the content-addressed store, hash-verified

564// layer before they can be used. Only buckets that have cells are placed
565// in the bucket list.
566void vtkCellLocator::GetOverlappingBuckets(vtkNeighborCells& buckets, const double x[3],
567 double dist, int prevMinLevel[3], int prevMaxLevel[3])
568{
569 int i, j, k, nei[3], minLevel[3], maxLevel[3];
570 int leafStart, kFactor, jFactor;
571 int numberOfBucketsPerPlane, jkSkipFlag, kSkipFlag;
572
573 numberOfBucketsPerPlane = this->NumberOfDivisions * this->NumberOfDivisions;
574 leafStart = this->NumberOfOctants - numberOfBucketsPerPlane * this->NumberOfDivisions;
575
576 // Initialize
577 buckets.Reset();
578
579 // Determine the range of indices in each direction
580 for (i = 0; i < 3; i++)
581 {
582 minLevel[i] = static_cast<int>(((x[i] - dist) - this->Bounds[2 * i]) / this->H[i]);
583 maxLevel[i] = static_cast<int>(((x[i] + dist) - this->Bounds[2 * i]) / this->H[i]);
584
585 if (minLevel[i] < 0)
586 {
587 minLevel[i] = 0;
588 }
589 else if (minLevel[i] >= this->NumberOfDivisions)
590 {
591 minLevel[i] = this->NumberOfDivisions - 1;
592 }
593 if (maxLevel[i] >= this->NumberOfDivisions)
594 {
595 maxLevel[i] = this->NumberOfDivisions - 1;
596 }
597 else if (maxLevel[i] < 0)
598 {
599 maxLevel[i] = 0;
600 }
601 }
602
603 if (minLevel[0] == prevMinLevel[0] && maxLevel[0] == prevMaxLevel[0] &&
604 minLevel[1] == prevMinLevel[1] && maxLevel[1] == prevMaxLevel[1] &&
605 minLevel[2] == prevMinLevel[2] && maxLevel[2] == prevMaxLevel[2])
606 {
607 return;
608 }
609
610 for (k = minLevel[2]; k <= maxLevel[2]; k++)
611 {
612 kFactor = k * numberOfBucketsPerPlane;
613 if (k >= prevMinLevel[2] && k <= prevMaxLevel[2])
614 {
615 kSkipFlag = 1;
616 }
617 else
618 {
619 kSkipFlag = 0;
620 }
621 for (j = minLevel[1]; j <= maxLevel[1]; j++)
622 {
623 if (kSkipFlag && j >= prevMinLevel[1] && j <= prevMaxLevel[1])

Callers 1

Calls 2

ResetMethod · 0.45
InsertNextPointMethod · 0.45

Tested by

no test coverage detected