67 else if (span[dir] < VSMALL)
83 <<
"Span should have two positive and one zero entry: "
96 const scalar nearestDistSqr
109 info.rawPoint()[normalDir_] = origin_[normalDir_];
114 if (dir != normalDir_)
116 if (info.rawPoint()[dir] < origin_[dir])
118 info.rawPoint()[dir] = origin_[dir];
120 else if (info.rawPoint()[dir] > origin_[dir]+span_[dir])
122 info.rawPoint()[dir] = origin_[dir]+span_[dir];
152 const vector dir(end-start);
154 if (
mag(dir[normalDir_]) < VSMALL)
161 scalar t = (origin_[normalDir_]-start[normalDir_]) / dir[normalDir_];
170 info.rawPoint() = start+t*dir;
171 info.rawPoint()[normalDir_] = origin_[normalDir_];
176 if (dir != normalDir_)
178 if (info.rawPoint()[dir] < origin_[dir])
184 else if (info.rawPoint()[dir] > origin_[dir]+span_[dir])
198 treeBoundBox bb(origin_, origin_+span_);
199 bb.min()[normalDir_] -= 1
e-6;
200 bb.
max()[normalDir_] += 1
e-6;
202 if (!bb.contains(info.hitPoint()))
205 <<
"bb:" << bb <<
endl
206 <<
"origin_:" << origin_ <<
endl
207 <<
"span_:" << span_ <<
endl
208 <<
"normalDir_:" << normalDir_ <<
endl
209 <<
"hitPoint:" << info.hitPoint()
230 normalDir_(calcNormal(span_))
233 <<
" origin:" << origin_
234 <<
" origin+span:" << origin_+span_
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();
307 pts[3].y() += span_.y();
320void Foam::searchablePlate::findNearest
331 info[i] = findNearest(
samples[i], nearestDistSqr[i]);
336void Foam::searchablePlate::findLine
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();
410 normal[i][normalDir_] = 1.0;
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.
Minimal example by using system/controlDict.functions:
void max(const dimensioned< Type > &dt)
Use the maximum of the field and specified value.
Defines the attributes of an object for which implicit objectRegistry management is supported,...
void setSize(const label n)
Alias for resize()
void resize(const label len)
Adjust allocated size of list.
void clear()
Clear the list, i.e. set size to zero.
int overlaps
Flag to control which overlap calculations are performed.
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
void size(const label n)
Older name for setAddressableSize.
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,...
static const char *const componentNames[]
static constexpr direction nComponents
Number of components in bool is 1.
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 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.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false)
#define DebugInFunction
Report an information message using Foam::Info.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
PointIndexHit< point > pointIndexHit
A PointIndexHit for 3D points.
vector point
Point is a vector.
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0)
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)