diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C index 3a9d667650..d06e5d03cb 100644 --- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C +++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C @@ -721,16 +721,34 @@ int main(int argc, char *argv[]) deleteBox(surf, bb, true, edgeStat); } - const Switch manifoldEdges = - subsetDict.lookupOrDefault("manifoldEdges", "no"); + const Switch nonManifoldEdges = + subsetDict.lookupOrDefault("nonManifoldEdges", "yes"); - if (manifoldEdges) + if (!nonManifoldEdges) { - Info<< "Removing all non-manifold edges" << endl; + Info<< "Removing all non-manifold edges" + << " (edges with > 2 connected faces)" << endl; forAll(edgeStat, edgeI) { - if (surf.edgeFaces()[edgeI].size() != 2) + if (surf.edgeFaces()[edgeI].size() > 2) + { + edgeStat[edgeI] = surfaceFeatures::NONE; + } + } + } + + const Switch openEdges = + subsetDict.lookupOrDefault("openEdges", "yes"); + + if (!openEdges) + { + Info<< "Removing all open edges" + << " (edges with 1 connected face)" << endl; + + forAll(edgeStat, edgeI) + { + if (surf.edgeFaces()[edgeI].size() == 1) { edgeStat[edgeI] = surfaceFeatures::NONE; } diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractDict b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractDict index 934d5869a9..6c1eab66e9 100644 --- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractDict +++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractDict @@ -59,15 +59,21 @@ surface2.nas { // Use a plane to select feature edges // (normal)(basePoint) + // Keep only edges that intersect the plane will be included plane (1 0 0)(0 0 0); // Select feature edges using a box // (minPt)(maxPt) + // Keep edges inside the box: insideBox (0 0 0)(1 1 1); + // Keep edges outside the box: outsideBox (0 0 0)(1 1 1); - // Remove any non-manifold (open or > 2 connected faces) edges - manifoldEdges no; + // Keep nonManifold edges (edges with >2 connected faces) + nonManifoldEdges yes; + + // Keep open edges (edges with 1 connected face) + openEdges yes; } addFeatures diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/surfaceFeatureExtractDict b/tutorials/incompressible/simpleFoam/motorBike/system/surfaceFeatureExtractDict new file mode 100644 index 0000000000..fa00f86001 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/surfaceFeatureExtractDict @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object surfaceFeatureExtractDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +motorBike.obj +{ + // How to obtain raw features (extractFromFile || extractFromSurface) + extractionMethod extractFromSurface; + + extractFromSurfaceCoeffs + { + // Mark edges whose adjacent surface normals are at an angle less + // than includedAngle as features + // - 0 : selects no edges + // - 180: selects all edges + includedAngle 150; + } + + subsetFeatures + { + // Keep nonManifold edges (edges with >2 connected faces) + nonManifoldEdges no; + + // Keep open edges (edges with 1 connected face) + openEdges yes; + } + + + // Write options + + // Write features to obj format for postprocessing + writeObj yes; +} + + +// ************************************************************************* //