45 bool fullMatch =
true;
47 point compareOrigin = origin;
49 if (origin ==
point(vGreat, vGreat, vGreat))
53 compareOrigin =
sum(pts1)/pts1.
size();
62 scalar dist0 = pts0MagSqr[i];
66 scalar matchDist = matchDistances[face0I];
77 scalar minDistSqr = vGreat;
84 (j < pts1MagSqr.
size())
85 && (pts1MagSqr[j] < 1.00001*dist0 + 2*matchDist)
92 scalar distSqr =
magSqr(pts0[face0I] - pts1[facei]);
94 if (distSqr <=
sqr(matchDist) && distSqr < minDistSqr)
107 Pout<<
"Cannot find point in pts1 matching point " << face0I
108 <<
" coord:" << pts0[face0I]
109 <<
" in pts0 when using tolerance " << matchDist <<
endl;
112 Pout<<
"Searching started from:" << startI <<
" in pts1"
118 (j < pts1MagSqr.
size())
119 && (pts1MagSqr[j] < 1.00001*dist0 + 2*matchDist)
126 Pout<<
" Compared coord: " << pts1[facei]
128 <<
" with difference to point "
129 <<
mag(pts1[facei] - pts0[face0I]) <<
endl;
134 from0To1[face0I] = minFacei;
156 bool fullMatch =
true;
158 point compareOrigin = origin;
160 if (origin ==
point(vGreat, vGreat, vGreat))
164 compareOrigin =
sum(pts1)/pts1.
size();
173 scalar dist0 = pts0MagSqr[i];
177 scalar matchDist = matchDistances[face0I];
179 label startI =
findLower(pts1MagSqr, 0.99999*dist0 - 2*matchDist);
187 scalar minDistSqr = vGreat;
188 scalar minDistNorm = 0;
195 (j < pts1MagSqr.
size())
196 && (pts1MagSqr[j] < 1.00001*dist0 + 2*matchDist)
203 scalar distSqr =
magSqr(pts0[face0I] - pts1[facei]);
205 scalar distNorm = (pts0Dir[face0I] & pts1Dir[facei]);
216 if (distSqr <=
sqr(matchDist) && distSqr < minDistSqr)
219 if (distNorm < minDistNorm)
221 minDistNorm = distNorm;
222 minDistSqr = distSqr;
234 Pout<<
"Cannot find point in pts1 matching point " << face0I
235 <<
" coord:" << pts0[face0I]
236 <<
" in pts0 when using tolerance " << matchDist <<
endl;
239 Pout<<
"Searching started from:" << startI <<
" in pts1"
245 (j < pts1MagSqr.
size())
246 && (pts1MagSqr[j] < 1.00001*dist0 + 2*matchDist)
253 Pout<<
" Compared coord: " << pts1[facei]
255 <<
" with difference to point "
256 <<
mag(pts1[facei] - pts0[face0I]) <<
endl;
261 from0To1[face0I] = minFacei;
Various functions to operate on Lists.
#define forAll(list, i)
Loop across all elements in list.
Pre-declare SubField and related Field type.
void size(const label)
Override size to be inconsistent with allocated storage.
void setSize(const label)
Reset size of List.
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.
Determine correspondence between points. See below.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
label findLower(const ListType &, typename ListType::const_reference, const label stary, const BinaryOp &bop)
Find last element < given value in sorted list and return index,.
vector point
Point is a vector.
tmp< DimensionedField< typename outerProduct< Type, Type >::type, GeoMesh, Field >> sqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
bool matchPoints(const Field< point > &pts0, const Field< point > &pts1, const Field< scalar > &matchDistance, const bool verbose, labelList &from0To1, const point &origin=point::zero)
Determine correspondence between pointFields. Gets passed.
prefixOSstream Pout(cout, "Pout")
tmp< DimensionedField< scalar, GeoMesh, Field > > mag(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
tmp< DimensionedField< scalar, GeoMesh, Field > > magSqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)