67 else if (span[dir] < VSMALL)
83 <<
"Span should have two positive and one zero entry: "
96 const scalar nearestDistSqr
109 info.point()[normalDir_] = origin_[normalDir_];
114 if (dir != normalDir_)
116 if (info.point()[dir] < origin_[dir])
118 info.point()[dir] = origin_[dir];
120 else if (info.point()[dir] > origin_[dir]+span_[dir])
122 info.point()[dir] = origin_[dir]+span_[dir];
129 if (info.point().distSqr(sample) > nearestDistSqr)
152 const vector dir(end-start);
154 if (
mag(dir[normalDir_]) < VSMALL)
161 scalar t = (origin_[normalDir_]-start[normalDir_]) / dir[normalDir_];
170 info.point() = start+t*dir;
171 info.point()[normalDir_] = origin_[normalDir_];
176 if (dir != normalDir_)
178 if (info.point()[dir] < origin_[dir])
184 else if (info.point()[dir] > origin_[dir]+span_[dir])
199 bb.min()[normalDir_] -= 1
e-6;
200 bb.
max()[normalDir_] += 1
e-6;
202 if (!bb.contains(info.point()))
205 <<
"bb:" << bb <<
endl
206 <<
"origin_:" << origin_ <<
endl
207 <<
"span_:" << span_ <<
endl
208 <<
"normalDir_:" << normalDir_ <<
endl
209 <<
"hitPoint:" << info.point()
220Foam::searchablePlate::searchablePlate
230 normalDir_(calcNormal(span_))
233 <<
" origin:" << origin_
234 <<
" origin+span:" << origin_+span_
241Foam::searchablePlate::searchablePlate
255 if (regions_.empty())
258 regions_.first() =
"region0";
279 centres[0] = origin_ + 0.5*span_;
290 auto&
pts = tpts.ref();
294 if (span_.x() < span_.y() && span_.x() < span_.z())
296 pts[1].y() += span_.y();
297 pts[3].z() += span_.z();
299 else if (span_.y() < span_.z())
301 pts[1].x() += span_.x();
302 pts[3].z() += span_.z();
306 pts[1].x() += span_.x();
320void Foam::searchablePlate::findNearest
331 info[i] = findNearest(
samples[i], nearestDistSqr[i]);
336void Foam::searchablePlate::findLine
340 List<pointIndexHit>& info
343 info.setSize(start.size());
347 info[i] = findLine(start[i], end[i]);
359 findLine(start, end,
info);
371 findLine(start, end, nearestInfo);
373 info.setSize(start.
size());
376 if (nearestInfo[pointi].hit())
378 info[pointi].setSize(1);
379 info[pointi][0] = nearestInfo[pointi];
383 info[pointi].clear();
395 region.setSize(
info.size());
410 normal[i][normalDir_] = 1.0;
418 List<volumeType>& volType
422 <<
"Volume type not supported for plate."
Macros for easy insertion into run-time selection tables.
#define addNamedToRunTimeSelectionTable(baseType, thisType, argNames, lookupName)
Add to construction table with 'lookupName' as the key.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
void max(const dimensioned< Type > &lower)
Use maximum of the field and specified value. ie, clamp_min().
Defines the attributes of an object for which implicit objectRegistry management is supported,...
InfoProxy< IOobject > info() const noexcept
Return info proxy, for printing information to a stream.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
void setSize(label n)
Alias for resize().
void resize(const label len)
Adjust allocated size of list.
void size(const label n)
Older name for setAddressableSize.
static const char *const componentNames[]
static constexpr direction nComponents
Number of components in this vector space.
A bounding box defined in terms of min/max extrema points.
bool overlaps(const boundBox &bb) const
Overlaps/touches boundingBox?
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Searching on finite plate. Plate has to be aligned with coordinate axes. Plate defined as origin and ...
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit > > &) const
Get all intersections in order from start to end.
virtual bool overlaps(const boundBox &bb) const
Does any part of the surface overlap the supplied bound box?
virtual void findLineAny(const pointField &start, const pointField &end, List< pointIndexHit > &) const
Return any intersection on segment from start to end.
virtual void boundingSpheres(pointField ¢res, scalarField &radiusSqr) const
Get bounding spheres (centre and radius squared), one per element.
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
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 tmp< pointField > points() const
Get the points that define the surface.
Base class of (analytical or triangulated) surface. Encapsulates all the search routines....
virtual const boundBox & bounds() const
Return const reference to boundBox.
A class for managing temporary objects.
static tmp< T > New(Args &&... args)
Construct tmp with forwarding arguments.
Standard boundBox with extra functionality for use in octree.
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
#define DebugInFunction
Report an information message using Foam::Info.
List< word > wordList
List of word.
List< label > labelList
A List of labels.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
errorManip< error > abort(error &err)
Field< vector > vectorField
Specialisation of Field<T> for vector.
vector point
Point is a vector.
static constexpr const zero Zero
Global zero (0).
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
vectorField pointField
pointField is a vectorField.
PointIndexHit< point > pointIndexHit
A PointIndexHit with a 3D point.
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
constexpr char nl
The newline '\n' character (0x0a).
#define forAll(list, i)
Loop across all elements in list.
scalarField samples(nIntervals, Zero)