47 const pointField& sFeatLocalPts(surf.localPoints());
48 const edgeList& sFeatEds(surf.edges());
59 label nFeatEds = featureEdges.size();
60 label nFeatPts = featurePoints.size();
62 DynamicList<point> tmpPts;
64 DynamicList<vector> norms;
72 forAll(featurePointFeatureEdges, pI)
74 featurePointFeatureEdges[pI] =
pointEdges[featurePoints[pI]];
80 labelList pointMap(sFeatLocalPts.size(), -1);
90 List<edgeStatus> edStatus(nFeatEds,
NONE);
94 label sFPI = featurePoints[i];
96 tmpPts.append(sFeatLocalPts[sFPI]);
98 pointMap[sFPI] = tmpPts.size() - 1;
104 bitSet isRegionFeatureEdge(regionFeatureEdges);
108 label sFEI = featureEdges[i];
112 const edge& fE = sFeatEds[sFEI];
117 if (pointMap[fE.start()] == -1)
119 tmpPts.append(sFeatLocalPts[fE.start()]);
121 pointMap[fE.start()] = tmpPts.size() - 1;
124 eds[i].start() = pointMap[fE.start()];
126 if (pointMap[fE.end()] == -1)
128 tmpPts.append(sFeatLocalPts[fE.end()]);
130 pointMap[fE.end()] = tmpPts.size() - 1;
133 eds[i].end() = pointMap[fE.end()];
136 const labelList& eFaces = edgeFaces[sFEI];
143 label eFI = eFaces[j];
150 faceMap[eFI] = norms.size() - 1;
157 surf[eFI].
centre(surf.points())
158 - sFeatLocalPts[fE.start()];
164 & (fC0tofE0/(
mag(fC0tofE0)+ VSMALL))
174 if (eFaces.size() == 2)
177 surf[eFaces[1]].centre(surf.points())
178 - surf[eFaces[0]].centre(surf.points());
183 if (isRegionFeatureEdge.test(i))
190 DynamicList<label> newFeatureEdges;
192 forAll(featurePointFeatureEdges, pI)
194 const labelList& fpfe = featurePointFeatureEdges[pI];
196 newFeatureEdges.setCapacity(fpfe.size());
200 const label oldEdgeIndex = fpfe[eI];
202 const label newFeatureEdgeIndex = edgeMap[oldEdgeIndex];
204 if (newFeatureEdgeIndex != -1)
206 newFeatureEdges.append(newFeatureEdgeIndex);
210 featurePointFeatureEdges[pI].transfer(newFeatureEdges);
216 DynamicList<label>& externalEds(allEds[0]);
217 DynamicList<label>& internalEds(allEds[1]);
218 DynamicList<label>& flatEds(allEds[2]);
219 DynamicList<label>& openEds(allEds[3]);
220 DynamicList<label>& multipleEds(allEds[4]);
228 externalEds.append(i);
232 internalEds.append(i);
234 else if (eStat ==
FLAT)
238 else if (eStat ==
OPEN)
244 multipleEds.append(i);
246 else if (eStat ==
NONE)
249 <<
nl <<
"classifyEdge returned NONE on edge "
251 <<
". There is a problem with definition of this edge."
263 ListListOps::combine<labelList>
266 accessOp<labelList>()
270 edMap =
invert(edMap.size(), edMap);
279 forAll(featurePointFeatureEdges, pI)
301 List<DynamicList<label>> allPts(3);
303 DynamicList<label>& convexPts(allPts[0]);
304 DynamicList<label>& concavePts(allPts[1]);
305 DynamicList<label>& mixedPts(allPts[2]);
317 concavePts.append(i);
319 else if (ptStatus ==
MIXED)
326 <<
nl <<
"classifyFeaturePoint returned NONFEATURE on point at "
328 <<
". There is a problem with definition of this feature point."
338 ListListOps::combine<labelList>
341 accessOp<labelList>()
345 ftPtMap =
invert(ftPtMap.size(), ftPtMap);
354 ptMap[i] = ftPtMap[i];
368 edgeMesh newmesh(std::move(pts), std::move(eds));
378 DynamicList<label> tmpFtPtNorms;
388 if (!tmpFtPtNorms.found(ptEdNorms[
k]))
390 bool addNormal =
true;
410 tmpFtPtNorms.append(ptEdNorms[
k]);