From 928d81c2829c1a642c724018b83b260a02344790 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Fri, 30 Mar 2012 09:23:34 +0100 Subject: [PATCH] ENH: cvMeshSurfaceSimplify: make robust for open surfaces --- .../cvMeshSurfaceSimplify.C | 2 ++ .../searchableSurfacesQueries.C | 30 +++++++++++++++++-- .../searchableSurfacesQueries.H | 7 ++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C index adc46f76237..c3518ef1a03 100644 --- a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C +++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C @@ -173,6 +173,8 @@ int main(int argc, char *argv[]) surfaces, points, scalarField(points.size(), sqr(GREAT)), + searchableSurface::OUTSIDE, // for non-closed surfaces treat as + // outside nearestSurfaces, signedDist ); diff --git a/src/meshTools/searchableSurface/searchableSurfacesQueries.C b/src/meshTools/searchableSurface/searchableSurfacesQueries.C index 4db8f9acf37..26f0a453243 100644 --- a/src/meshTools/searchableSurface/searchableSurfacesQueries.C +++ b/src/meshTools/searchableSurface/searchableSurfacesQueries.C @@ -693,6 +693,7 @@ void Foam::searchableSurfacesQueries::signedDistance const labelList& surfacesToTest, const pointField& samples, const scalarField& nearestDistSqr, + const searchableSurface::volumeType illegalHandling, labelList& nearestSurfaces, scalarField& distance ) @@ -753,9 +754,32 @@ void Foam::searchableSurfacesQueries::signedDistance } else { - FatalErrorIn("signedDistance()") - << "getVolumeType failure, neither INSIDE or OUTSIDE" - << exit(FatalError); + switch (illegalHandling) + { + case searchableSurface::OUTSIDE: + { + distance[pointI] = dist; + break; + } + case searchableSurface::INSIDE: + { + distance[pointI] = -dist; + break; + } + default: + { + FatalErrorIn("signedDistance()") + << "getVolumeType failure," + << " neither INSIDE or OUTSIDE." + << " point:" << surfPoints[i] + << " surface:" + << allSurfaces[surfacesToTest[testI]].name() + << " volType:" + << searchableSurface::volumeTypeNames[vT] + << exit(FatalError); + break; + } + } } } } diff --git a/src/meshTools/searchableSurface/searchableSurfacesQueries.H b/src/meshTools/searchableSurface/searchableSurfacesQueries.H index a2dba23cb5d..9f2ebfbadb6 100644 --- a/src/meshTools/searchableSurface/searchableSurfacesQueries.H +++ b/src/meshTools/searchableSurface/searchableSurfacesQueries.H @@ -184,13 +184,18 @@ public: List<pointIndexHit>& ); - //- Find signed distance to nearest surface + //- Find signed distance to nearest surface. Outside is positive. + // illegalHandling: how to handle non-inside or outside + // OUTSIDE : treat as outside + // INSIDE : treat as inside + // UNKNOWN : throw fatal error static void signedDistance ( const PtrList<searchableSurface>& allSurfaces, const labelList& surfacesToTest, const pointField& samples, const scalarField& nearestDistSqr, + const searchableSurface::volumeType illegalHandling, labelList& nearestSurfaces, scalarField& distance ); -- GitLab