32 Triangulation::Finite_vertices_iterator& vit,
35 const label hitSurface
66 vit = Triangulation::Finite_vertices_iterator
70 Triangulation::All_vertices_iterator,
71 Triangulation::Infinite_tester
72 >(finite_vertices_end(), vit.predicate(), vit.base())
79 Triangulation::Finite_vertices_iterator& vit,
82 const scalar maxProtSize2
88 label interHitSurface = -1;
89 scalar interDist2 = 0;
91 Face_circulator fcStart = incident_faces(vit);
92 Face_circulator fc = fcStart;
100 label hitSurface = -1;
102 qSurf_.findSurfaceNearestIntersection
105 toPoint3D(vertices[vi]),
113 magSqr(toPoint2D(pHit.hitPoint()) - vertices[vi]);
116 if (dist2 > interDist2)
118 scalar mps2 = maxProtSize2;
125 mps2 = meshControls().maxNotchLen2();
131 interPoint = toPoint2D(pHit.hitPoint());
132 interTri = pHit.index();
134 interHitSurface = hitSurface;
141 }
while (++fc != fcStart);
145 insertPointPair(vit, interPoint, interTri, interHitSurface);
157 const fileName& fName
160 label nIntersections = 0;
164 Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
165 vit != finite_vertices_end();
170 if (!vit->nearOrOnBoundary())
176 Face_circulator fcStart = incident_faces(vit);
177 Face_circulator fc = fcStart;
179 bool infinite =
false;
180 bool changed =
false;
194 }
while (++fc != fcStart);
198 if (infinite || !changed)
continue;
205 vertices[nVerts++] = toPoint2D(circumcenter(fc));
207 if (nVerts == maxNvert)
211 }
while (++fc != fcStart);
215 if (nVerts == maxNvert)
continue;
218 vertices[nVerts] = vertices[0];
221 point2DFromPoint defVert = toPoint2D(vit->point());
223 scalar maxProtSize2 = meshControls().maxNotchLen2();
225 if (vit->internalOrBoundaryPoint())
231 scalar perimeter = 0;
236 for (
int vi=0; vi<nVerts; vi++)
238 vector2D edge(vertices[vi+1] - vertices[vi]);
239 perimeter +=
mag(edge);
245 if (areaT2 < meshControls().minEdgeLen2())
continue;
248 scalar cellWidth = areaT2/perimeter;
267 perimeter > 2*meshControls().minCellSize()
268 && areaT2 > meshControls().minCellSize2()
269 && cellWidth > 0.5*meshControls().minEdgeLen()
272 maxProtSize2 = 0.25*meshControls().maxNotchLen2();
276 if (insertPointPairAtIntersection(vit, defVert, vertices, maxProtSize2))
282 return nIntersections;
291 Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
292 vit != finite_vertices_end();
296 if (vit->internalPoint())
298 point vert(toPoint3D(vit->point()));
301 label hitSurface = -1;
303 qSurf_.findSurfaceNearest
306 4*meshControls().minCellSize2(),
313 vit->setNearBoundary();
319 Info<< count <<
" points marked as being near a boundary" <<
endl;