bool Foam::octreeDataBoundBox::overlaps
(
    const label index,
    const treeBoundBox& sampleBb
) const
{
    return sampleBb.overlaps(allBb_[index]);
}
예제 #2
0
bool Foam::octreeDataCell::overlaps
(
    const label index,
    const treeBoundBox& cubeBb
) const
{
    return cubeBb.overlaps(bbs_[index]);
}
예제 #3
0
bool Foam::treeLeaf<Foam::octreeDataTriSurface>::findNearest
(
    const octreeDataTriSurface& shapes,
    const point& sample,
    treeBoundBox& tightest,
    label& tightestI,
    scalar& tightestDist
) const
{
    // Some aliases
    const treeBoundBoxList& allBb = shapes.allBb();
    point& min = tightest.min();
    point& max = tightest.max();

    point nearest;

    bool changed = false;
    forAll(indices_, i)
    {
        label faceI = indices_[i];

        // Quick rejection test.
        if (tightest.overlaps(allBb[faceI]))
        {
            // Full calculation
            scalar dist = shapes.calcNearest(faceI, sample, nearest);

            if (dist < tightestDist)
            {
                // Update bb (centered around sample, span is dist)
                min.x() = sample.x() - dist;
                min.y() = sample.y() - dist;
                min.z() = sample.z() - dist;

                max.x() = sample.x() + dist;
                max.y() = sample.y() + dist;
                max.z() = sample.z() + dist;

                tightestI = faceI;
                tightestDist = dist;

                changed = true;
            }
        }
    }