77 int main(
int argc,
char *argv[])
94 surf1.writeStats(
Info);
100 meshSubsetDict.lookup(
"localPoints")
105 meshSubsetDict.lookup(
"edges")
110 meshSubsetDict.lookup(
"faces")
115 meshSubsetDict.lookup(
"zone")
118 if (markedZone.size() && markedZone.size() != 2)
121 <<
"zone specification should be two points, min and max of "
122 <<
"the boundingbox" << endl
123 <<
"zone:" << markedZone
129 meshSubsetDict.lookup(
"addFaceNeighbours")
134 meshSubsetDict.lookup(
"invertSelection")
140 boolList facesToSubset(surf1.size(),
false);
147 if (markedPoints.size())
149 Info <<
"Found " << markedPoints.size() <<
" marked point(s)." <<
endl;
153 forAll (markedPoints, pointI)
157 markedPoints[pointI] < 0
158 || markedPoints[pointI] >= surf1.nPoints()
162 <<
"localPoint label " << markedPoints[pointI]
164 <<
" The mesh has got "
165 << surf1.nPoints() <<
" localPoints."
170 surf1.pointFaces()[markedPoints[pointI]];
174 facesToSubset[curFaces[i]] =
true;
185 if (markedEdges.size())
187 Info <<
"Found " << markedEdges.size() <<
" marked edge(s)." <<
endl;
191 forAll (markedEdges, edgeI)
195 markedEdges[edgeI] < 0
196 || markedEdges[edgeI] >= surf1.nEdges()
200 <<
"edge label " << markedEdges[edgeI]
202 <<
" The mesh has got "
203 << surf1.nEdges() <<
" edges."
207 const labelList& curFaces = surf1.edgeFaces()[markedEdges[edgeI]];
211 facesToSubset[curFaces[i]] =
true;
221 if (markedZone.size() == 2)
226 Info <<
"Using zone min:" << min <<
" max:" << max <<
endl;
235 (centre.
x() >= min.
x())
236 && (centre.
y() >= min.
y())
237 && (centre.
z() >= min.
z())
238 && (centre.
x() <= max.
x())
239 && (centre.
y() <= max.
y())
240 && (centre.
z() <= max.
z())
243 facesToSubset[faceI] =
true;
253 if (meshSubsetDict.found(
"surface"))
263 Info<<
"Selecting all triangles with centre outside surface "
268 Info<<
"Selecting all triangles with centre inside surface "
285 bb.extend(rndGen, 1
E-4),
292 forAll(facesToSubset, faceI)
294 if (!facesToSubset[faceI])
296 const point fc(surf1[faceI].centre(surf1.points()));
299 selectTree.getVolumeType(fc);
303 facesToSubset[faceI] =
true;
311 facesToSubset[faceI] =
true;
323 label nFaceNeighbours = 0;
325 if (markedFaces.size())
327 Info <<
"Found " << markedFaces.size() <<
" marked face(s)." <<
endl;
330 forAll (markedFaces, faceI)
334 markedFaces[faceI] < 0
335 || markedFaces[faceI] >= surf1.size()
339 <<
"Face label " << markedFaces[faceI] <<
"out of range."
340 <<
" The mesh has got "
341 << surf1.size() <<
" faces."
346 facesToSubset[markedFaces[faceI]] =
true;
349 if (addFaceNeighbours)
352 surf1.faceFaces()[markedFaces[faceI]];
356 label faceI = curFaces[i];
358 if (!facesToSubset[faceI])
360 facesToSubset[faceI] =
true;
368 if (addFaceNeighbours)
370 Info<<
"Added " << nFaceNeighbours
371 <<
" faces because of addFaceNeighbours" <<
endl;
377 Info<<
"Inverting selection." <<
endl;
378 boolList newFacesToSubset(facesToSubset.size());
382 if (facesToSubset[i])
384 newFacesToSubset[i] =
false;
388 newFacesToSubset[i] =
true;
391 facesToSubset.transfer(newFacesToSubset);
400 surf1.subsetMesh(facesToSubset, pointMap, faceMap)
404 surf2.writeStats(
Info);
409 Info <<
"Writing surface to " << outFileName <<
endl;
411 surf2.
write(outFileName);