41 void Foam::searchableBox::projectOntoCoordPlane
49 info.rawPoint()[dir] = planePt[dir];
51 if (planePt[dir] ==
min()[dir])
55 else if (planePt[dir] ==
max()[dir])
57 info.setIndex(dir*2+1);
62 <<
"Point on plane " << planePt
63 <<
" is not on coordinate " <<
min()[dir]
74 const scalar nearestDistSqr
97 if (info.rawPoint()[dir] <
min()[dir])
99 projectOntoCoordPlane(dir,
min(), info);
102 else if (info.rawPoint()[dir] >
max()[dir])
104 projectOntoCoordPlane(dir,
max(), info);
107 else if (info.rawPoint()[dir] > bbMid[dir])
109 near[dir] =
max()[dir];
113 near[dir] =
min()[dir];
124 if (dist.x() < dist.y())
126 if (dist.x() < dist.z())
129 projectOntoCoordPlane(
vector::X, near, info);
133 projectOntoCoordPlane(
vector::Z, near, info);
138 if (dist.y() < dist.z())
140 projectOntoCoordPlane(
vector::Y, near, info);
144 projectOntoCoordPlane(
vector::Z, near, info);
152 if (
magSqr(info.rawPoint() - sample) > nearestDistSqr)
176 <<
"Illegal bounding box specification : "
196 <<
"Illegal bounding box specification : "
214 if (regions_.empty())
217 regions_[0] =
"region0";
233 ctrs[i] = fcs[i].centre(pts);
255 const face&
f = fcs[i];
257 centres[i] =
f.centre(pts);
260 const point& pt = pts[
f[fp]];
284 const scalar nearestDistSqr
287 return findNearest(midpoint(), sample, nearestDistSqr);
294 const scalar nearestDistSqr
297 const point bbMid(midpoint());
301 bool outside =
false;
310 projectOntoCoordPlane(dir,
min(), info);
315 projectOntoCoordPlane(dir,
max(), info);
318 else if (info.
rawPoint()[dir] > bbMid[dir])
320 near[dir] =
max()[dir];
324 near[dir] =
min()[dir];
337 sortedDist[0] = dist[0];
338 sortedDist[1] = dist[1];
339 sortedDist[2] = dist[2];
343 projectOntoCoordPlane(sortedDist.
indices()[0], near, info);
345 projectOntoCoordPlane(sortedDist.
indices()[1], near, info);
383 if (posBits(start) == 0)
385 if (posBits(end) == 0)
393 foundInter = intersects(end, start, info.
rawPoint());
399 foundInter = intersects(start, end, info.
rawPoint());
422 if (info.
index() == -1)
426 <<
" on segment " << start << end
427 <<
" should be on face of " << *
this
442 return findLine(start, end);
446 void Foam::searchableBox::findNearest
455 const point bbMid(midpoint());
459 info[i] = findNearest(bbMid,
samples[i], nearestDistSqr[i]);
475 info[i] = findLine(start[i], end[i]);
491 info[i] = findLineAny(start[i], end[i]);
503 info.setSize(start.
size());
519 +
vector(rootVSmall,rootVSmall,rootVSmall)
534 while (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
544 || (inter.
index() == hits.
last().index())
551 pt = inter.
hitPoint() + smallVec[pointi];
558 info[pointi].clear();
613 if (pt[dir] <
min()[dir] || pt[dir] >
max()[dir])
#define forAll(list, i)
Loop across all elements in list.
Macros for easy insertion into run-time selection tables.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & append(const T &)
Append an element at the end of the list.
void clear()
Clear the addressed list, i.e. set the size to zero.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
InfoProxy< IOobject > info() const
Return info proxy.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
void size(const label)
Override size to be inconsistent with allocated storage.
void setSize(const label)
Reset size of List.
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
const Point & hitPoint() const
Return hit point.
const Point & rawPoint() const
Return point with no checking.
label index() const
Return index.
bool hit() const
Is there a hit.
void setIndex(const label index)
A list that is sorted upon construction or when explicitly requested with the sort() method.
const labelList & indices() const
Return the list of sorted indices. Updated every sort.
void sort()
(stable) sort the list (if changed after construction time)
T & last()
Return the last element of the list.
static const direction nComponents
Number of components in this vector space.
A bounding box defined in terms of the points at its extremities.
const point & min() const
Minimum point defining the bounding box.
const point & max() const
Maximum point defining the bounding box.
point midpoint() const
The midpoint of the bounding box.
A list of keyword definitions, which are a keyword followed by any number of values (e....
A face is a list of labels corresponding to mesh vertices.
Surface geometry with a rectangular box shape, aligned with the coordinate axes, which can be used wi...
virtual ~searchableBox()
Destructor.
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
virtual void boundingSpheres(pointField ¢res, scalarField &radiusSqr) const
Get bounding spheres (centre and radius squared), one per element.
searchableBox(const IOobject &io, const treeBoundBox &bb)
Construct from components.
pointIndexHit findNearestOnEdge(const point &sample, const scalar nearestDistSqr) const
Calculate nearest point on edge.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
pointIndexHit findLine(const point &start, const point &end) const
Find nearest intersection of line between start and end.
virtual void getRegion(const List< pointIndexHit > &, labelList ®ion) const
From a set of points and indices get the region.
virtual const wordList & regions() const
Names of regions.
virtual tmp< pointField > coordinates() const
Get representative set of element coordinates.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit >> &) const
Get all intersections in order from start to end.
pointIndexHit findLineAny(const point &start, const point &end) const
Find any intersection of line between start and end.
virtual tmp< pointField > points() const
Get the points that define the surface.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines....
const boundBox & bounds() const
Return const reference to boundBox.
A class for managing temporary objects.
T & ref() const
Return non-const reference or generate a fatal error.
Standard boundBox + extra functionality for use in octree.
bool contains(const point &) const
Contains point or other bounding box?
static const FixedList< vector, 6 > faceNormals
Per face the unit normal.
static const faceList faces
Face to point addressing.
tmp< pointField > points() const
Vertex coordinates. In octant coding.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
errorManipArg< error, int > exit(error &err, const int errNo=1)
addToRunTimeSelectionTable(polyPatch, mergedCyclicPolyPatch, word)
dimensionedSymmTensor sqr(const dimensionedVector &dv)
PointIndexHit< point > pointIndexHit
errorManip< error > abort(error &err)
vectorField pointField
pointField is a vectorField.
vector point
Point is a vector.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
Vector< scalar > vector
A scalar version of the templated Vector.
defineTypeNameAndDebug(combustionModel, 0)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
dimensionSet cmptMag(const dimensionSet &)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
bool ln(const fileName &src, const fileName &dst)
Create a softlink. dst should not exist. Returns true if successful.
scalarField samples(nIntervals, 0)