35 template<
class Po
intList>
39 const scalar mergeTol,
42 typename PointList::const_reference origin
45 typedef typename PointList::value_type point_type;
58 point_type compareOrigin = origin;
64 for (label pointi=1; pointi <
nPoints; ++pointi)
66 compareOrigin +=
points[pointi];
80 const scalar mergeTolSqr =
Foam::sqr(mergeTol);
83 List<scalar> magSqrDist(
nPoints);
86 magSqrDist[pointi] =
magSqr(
points[pointi] - compareOrigin);
91 Field<scalar> sortedTol(
nPoints);
94 const point_type& pt =
points[order[sortI]];
100 mag(scalar(pt.x() - compareOrigin.x()))
101 +
mag(scalar(pt.y() - compareOrigin.y()))
102 +
mag(scalar(pt.z() - compareOrigin.z()))
109 label pointi = order[0];
112 for (label sortI = 1; sortI < order.size(); ++sortI)
115 const label pointi = order[sortI];
116 const scalar mag2 = magSqrDist[order[sortI]];
124 scalar(
points[pointi].z())
129 label equalPointi = -1;
133 label prevSortI = sortI - 1;
135 && (
mag(magSqrDist[order[prevSortI]] - mag2) <= sortedTol[sortI]);
139 const label prevPointi = order[prevSortI];
145 scalar(
points[prevPointi].
x()),
146 scalar(
points[prevPointi].
y()),
147 scalar(
points[prevPointi].z())
150 if (
magSqr(pt - prevPt) <= mergeTolSqr)
153 equalPointi = prevPointi;
160 if (equalPointi != -1)
163 pointMap[pointi] = pointMap[equalPointi];
167 Pout<<
"Foam::mergePoints : Merging points "
168 << pointi <<
" and " << equalPointi
169 <<
" with coordinates:" <<
points[pointi]
170 <<
" and " <<
points[equalPointi]
185 template<
class Po
intList>
189 const scalar mergeTol,
193 typename PointList::const_reference origin
208 newPoints[pointMap[pointi]] =
points[pointi];
211 return (nUnique !=
points.size());