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)
173 if (!contains(midpoint()))
176 <<
"Illegal bounding box specification : " 180 bounds() =
static_cast<boundBox>(*this);
193 if (!contains(midpoint()))
196 <<
"Illegal bounding box specification : " 200 bounds() =
static_cast<boundBox>(*this);
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]);
519 +
vector(rootVSmall,rootVSmall,rootVSmall)
534 while (((pt-start[pointi])&dirVec[pointi]) <= magSqrDirVec[pointi])
551 pt = inter.
hitPoint() + smallVec[pointi];
558 info[pointi].
clear();
609 const point& pt = points[pointi];
613 if (pt[dir] <
min()[dir] || pt[dir] >
max()[dir])
static const FixedList< vector, 6 > faceNormals
Per face the unit normal.
virtual const wordList & regions() const
Names of regions.
#define forAll(list, i)
Loop across all elements in list.
void sort()
(stable) sort the list (if changed after construction time)
errorManipArg< error, int > exit(error &err, const int errNo=1)
A face is a list of labels corresponding to mesh vertices.
virtual ~searchableBox()
Destructor.
A list of keyword definitions, which are a keyword followed by any number of values (e...
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
A list that is sorted upon construction or when explicitly requested with the sort() method...
T & ref() const
Return non-const reference or generate a fatal error.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
virtual tmp< pointField > coordinates() const
Get representative set of element coordinates.
pointIndexHit findLineAny(const point &start, const point &end) const
Find any intersection of line between start and end.
virtual void boundingSpheres(pointField ¢res, scalarField &radiusSqr) const
Get bounding spheres (centre and radius squared), one per element.
void size(const label)
Override size to be inconsistent with allocated storage.
static faceList faces()
Return faces with correct point order.
void setIndex(const label index)
virtual tmp< pointField > points() const
Get the points that define the surface.
A bounding box defined in terms of the points at its extremities.
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
PointIndexHit< point > pointIndexHit
Base class of (analytical or triangulated) surface. Encapsulates all the search routines. WIP.
Vector< scalar > vector
A scalar version of the templated Vector.
Macros for easy insertion into run-time selection tables.
pointIndexHit findLine(const point &start, const point &end) const
Find nearest intersection of line between start and end.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
const Point & hitPoint() const
Return hit point.
static const direction nComponents
Number of components in this vector space.
vectorField pointField
pointField is a vectorField.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
void clear()
Clear the list, i.e. set size to zero.
DynamicList< T, SizeInc, SizeMult, SizeDiv > & append(const T &)
Append an element at the end of the list.
bool hit() const
Is there a hit.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit >> &) const
Get all intersections in order from start to end.
searchableBox(const IOobject &io, const treeBoundBox &bb)
Construct from components.
errorManip< error > abort(error &err)
pointIndexHit findNearestOnEdge(const point &sample, const scalar nearestDistSqr) const
Calculate nearest point on edge.
const Point & rawPoint() const
Return point with no checking.
const labelList & indices() const
Return the list of sorted indices. Updated every sort.
void cmptMag(FieldField< Field, Type > &cf, const FieldField< Field, Type > &f)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
static vector centre(const PointField &ps)
Return centre point given face points.
defineTypeNameAndDebug(combustionModel, 0)
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
void setSize(const label)
Reset size of List.
vector point
Point is a vector.
virtual void getRegion(const List< pointIndexHit > &, labelList ®ion) const
From a set of points and indices get the region.
tmp< pointField > points() const
Vertex coordinates. In octant coding.
Standard boundBox + extra functionality for use in octree.
A class for managing temporary objects.
T & last()
Return the last element of the list.
void clear()
Clear the addressed list, i.e. set the size to zero.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
void transfer(List< T > &)
Transfer the contents of the argument List into this list.
label index() const
Return index.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.