/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      surfaceFeatureExtractDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

surface1.stl
{
    // Extract raw features (none | extractFromFile | extractFromSurface)
    extractionMethod    extractFromSurface;

    // Mark edges whose adjacent surface normals are at an angle less
    // than includedAngle as features
    // - 0  : selects no edges
    // - 180: selects all edges
    includedAngle       120;

    // Do not mark region edges
    geometricTestOnly   yes;

    // Generate additional intersection features (none | self | region)
    intersectionMethod  none;

    // Tolerance for surface intersections
    // tolerance           1e-3;

// Output options:

    // Write features to obj format for postprocessing
    writeObj            yes;
}


// Self intersection (single or multiple surfaces).
// - Use 'surfaces' entry (a wordRe list) if it exists.
// - If the dictionary name does not have an extension, 'surfaces' is mandatory.
outputName1
{
    extractionMethod    none;

    surfaces            (surface1.stl surface2.nas);

    // mm -> m scaling
    // scale               0.001;

    // Generate additional intersection features (none | self | region)
    intersectionMethod  self;

    // Tolerance for surface intersections
    // tolerance           1e-3;

// Output options:

    // Write features to OBJ format for postprocessing
    writeObj            yes;
}


surface2.nas
{
    // Extract raw features (none | extractFromFile | extractFromSurface)
    extractionMethod    extractFromFile;

    // Load from an existing feature edge file
    featureEdgeFile     "constant/triSurface/featureEdges.nas";

    trimFeatures
    {
        // Remove features with fewer than the specified number of edges
        minElem         0;

        // Remove features shorter than the specified cumulative length
        minLen          0.0;
    }

    subsetFeatures
    {
        // Use a plane to select feature edges (normal)(basePoint)
        // Only keep edges that intersect the plane
        plane           (1 0 0)(0 0 0);

        // Select feature edges using a box // (minPt)(maxPt)
        // Only keep edges inside the box:
        insideBox       (0 0 0)(1 1 1);

        // Only keep edges outside the box:
        outsideBox      (0 0 0)(1 1 1);

        // Keep nonManifold edges (edges with >2 connected faces where
        // the faces form more than two different normal planes)
        nonManifoldEdges yes;

        // Keep open edges (edges with 1 connected face)
        openEdges       yes;
    }

    addFeatures
    {
        // Add (without merging) another extendedFeatureEdgeMesh
        name            axZ.extendedFeatureEdgeMesh;
    }


    // Generate additional intersection features (none | self | region)
    intersectionMethod  none;

    // Tolerance for surface intersections
    // tolerance           1e-3;

// Output options:

    // Output the closeness of surface elements to other surface elements.
    closeness           no;

    // Output surface curvature
    curvature           no;

    // Output the proximity of feature points and edges to another
    featureProximity    no;

    // Maximum search distance when checking feature proximity (default: 1m)
    maxFeatureProximity 1;

    // Write features to OBJ format for postprocessing
    writeObj            no;

    // Write closeness/curvature/proximity fields as VTK for postprocessing
    writeVTK            no;
}


// ************************************************************************* //
