35 vector(-GREAT, -GREAT, -GREAT),
36 vector(GREAT, GREAT, GREAT)
42 vector(GREAT, GREAT, GREAT),
43 vector(-GREAT, -GREAT, -GREAT)
48 const Foam::label facesArray[6][4] =
62 initListList<face, label, 6, 4>(facesArray)
67 const Foam::label edgesArray[12][2] =
87 initListList<edge, label, 12, 2>(edgesArray)
101 FixedList<vector, 6> normals;
123 "treeBoundBox::treeBoundBox(const UList<point>&)"
124 ) <<
"cannot find bounding box for zero-sized pointField"
125 <<
"returning zero" <<
endl;
133 for (label i = 1; i < points.
size(); i++)
154 "treeBoundBox::treeBoundBox"
155 "(const UList<point>&, const UList<label>&)"
156 ) <<
"cannot find bounding box for zero-sized pointField"
157 <<
"returning zero" <<
endl;
162 min() = points[meshPoints[0]];
163 max() = points[meshPoints[0]];
165 for (label i = 1; i < meshPoints.size(); i++)
187 points[octant] = corner(octant);
196 return subBbox(midpoint(), octant);
211 "treeBoundBox::subBbox(const point&, const direction)"
212 ) <<
"octant should be [0..7]"
255 const scalar radiusSqr
264 scalar d0 =
min()[dir] - centre[dir];
265 scalar d1 =
max()[dir] - centre[dir];
267 if ((d0 > 0) != (d1 > 0))
281 if (distSqr > radiusSqr)
311 const point& overallStart,
329 ptOnFaces = faceBits(pt);
333 if ((ptBits & endBits) != 0)
336 ptOnFaces = faceBits(pt);
340 if (ptBits & LEFTBIT)
345 scalar s = (
min().x() - overallStart.
x())/overallVec.
x();
347 pt.
y() = overallStart.
y() + overallVec.
y()*s;
348 pt.
z() = overallStart.
z() + overallVec.
z()*s;
357 else if (ptBits & RIGHTBIT)
362 scalar s = (
max().x() - overallStart.
x())/overallVec.
x();
364 pt.
y() = overallStart.
y() + overallVec.
y()*s;
365 pt.
z() = overallStart.
z() + overallVec.
z()*s;
372 else if (ptBits & BOTTOMBIT)
377 scalar s = (
min().y() - overallStart.
y())/overallVec.
y();
378 pt.
x() = overallStart.
x() + overallVec.
x()*s;
380 pt.
z() = overallStart.
z() + overallVec.
z()*s;
387 else if (ptBits & TOPBIT)
392 scalar s = (
max().y() - overallStart.
y())/overallVec.
y();
393 pt.
x() = overallStart.
x() + overallVec.
x()*s;
395 pt.
z() = overallStart.
z() + overallVec.
z()*s;
402 else if (ptBits & BACKBIT)
407 scalar s = (
min().z() - overallStart.
z())/overallVec.
z();
408 pt.
x() = overallStart.
x() + overallVec.
x()*s;
409 pt.
y() = overallStart.
y() + overallVec.
y()*s;
417 else if (ptBits & FRONTBIT)
422 scalar s = (
max().z() - overallStart.
z())/overallVec.
z();
423 pt.
x() = overallStart.
x() + overallVec.
x()*s;
424 pt.
y() = overallStart.
y() + overallVec.
y()*s;
444 return intersects(start, end-start, start, end, pt, ptBits);
451 return contains(bb.
min()) && contains(bb.
max());
462 if (pt[cmpt] <
min()[cmpt])
466 else if (pt[cmpt] ==
min()[cmpt])
475 if (pt[cmpt] >
max()[cmpt])
479 else if (pt[cmpt] ==
max()[cmpt])
498 if (pt.
x() ==
min().x())
502 else if (pt.
x() ==
max().x())
504 faceBits |= RIGHTBIT;
507 if (pt.
y() ==
min().y())
509 faceBits |= BOTTOMBIT;
511 else if (pt.
y() ==
max().y())
516 if (pt.
z() ==
min().z())
520 else if (pt.
z() ==
max().z())
522 faceBits |= FRONTBIT;
533 if (pt.
x() <
min().x())
537 else if (pt.
x() >
max().x())
542 if (pt.
y() <
min().y())
544 posBits |= BOTTOMBIT;
546 else if (pt.
y() >
max().y())
551 if (pt.
z() <
min().z())
555 else if (pt.
z() >
max().z())
572 scalar nearX, nearY, nearZ;
573 scalar farX, farY, farZ;
608 nearest =
point(nearX, nearY, nearZ);
609 furthest =
point(farX, farY, farZ);
616 calcExtremities(pt, near, far);
635 point nearThis, farThis;
638 calcExtremities(pt, nearThis, farThis);
640 const scalar minDistThis =
641 sqr(nearThis.
x() - pt.
x())
642 +
sqr(nearThis.
y() - pt.
y())
643 +
sqr(nearThis.
z() - pt.
z());
644 const scalar maxDistThis =
645 sqr(farThis.
x() - pt.
x())
646 +
sqr(farThis.
y() - pt.
y())
647 +
sqr(farThis.
z() - pt.
z());
653 point nearOther, farOther;
658 const scalar minDistOther =
659 sqr(nearOther.x() - pt.
x())
660 +
sqr(nearOther.y() - pt.
y())
661 +
sqr(nearOther.z() - pt.
z());
662 const scalar maxDistOther =
663 sqr(farOther.x() - pt.
x())
664 +
sqr(farOther.y() - pt.
y())
665 +
sqr(farOther.z() - pt.
z());
670 if (maxDistThis < minDistOther)
675 else if (minDistThis > maxDistOther)
695 static_cast<const boundBox&>(b)
710 return os << static_cast<const boundBox&>(bb);
716 return is >>
static_cast<boundBox&
>(bb);