From a908847b9c461f28bd7fc4144d9fd3cc1b200625 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Tue, 10 Apr 2018 21:52:44 +0100 Subject: [PATCH] surfaceFeatureExtract: Refactored core line and edge functions corresponding classes --- .../surfaceFeatureExtract.H | 8 +--- .../surfaceFeatureExtractUtilities.C | 42 ++----------------- src/OpenFOAM/meshes/meshShapes/edge/edge.H | 9 ++-- src/OpenFOAM/meshes/meshShapes/edge/edgeI.H | 38 ++++++++++++----- .../meshes/primitiveShapes/line/line.H | 4 +- .../meshes/primitiveShapes/line/lineI.H | 17 ++++++++ 6 files changed, 58 insertions(+), 60 deletions(-) diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.H b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.H index 7c326975e..85a9726ee 100644 --- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.H +++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.H @@ -43,10 +43,6 @@ namespace Foam extern const scalar externalAngleTolerance; extern const scalar externalToleranceCosAngle; - point randomPointInPlane(const plane& p); - - bool edgesConnected(const edge& e1, const edge& e2); - scalar calcProximityOfFeaturePoints ( const List& hitList, @@ -64,13 +60,11 @@ namespace Foam void deleteBox ( const triSurface& surf, - const treeBoundBox& bb, + const boundBox& bb, const bool removeInside, List& edgeStat ); - bool onLine(const point& p, const linePointRef& line); - //- Deletes all edges inside/outside bounding box from set. void deleteEdges ( diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractUtilities.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractUtilities.C index 42a5e083c..ad37d5908 100644 --- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractUtilities.C +++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtractUtilities.C @@ -51,23 +51,6 @@ const Foam::scalar Foam::externalToleranceCosAngle ); -bool Foam::edgesConnected(const edge& e1, const edge& e2) -{ - if - ( - e1.start() == e2.start() - || e1.start() == e2.end() - || e1.end() == e2.start() - || e1.end() == e2.end() - ) - { - return true; - } - - return false; -} - - Foam::scalar Foam::calcProximityOfFeaturePoints ( const List& hitList, @@ -146,7 +129,7 @@ Foam::scalar Foam::calcProximityOfFeatureEdges const edge& e2 = efem.edges()[pHit2.index()]; // Don't refine if the edges are connected to each other - if (!edgesConnected(e1, e2)) + if (!e1.connected(e2)) { scalar curDist = mag(pHit1.hitPoint() - pHit2.hitPoint()); @@ -165,7 +148,7 @@ Foam::scalar Foam::calcProximityOfFeatureEdges void Foam::deleteBox ( const triSurface& surf, - const treeBoundBox& bb, + const boundBox& bb, const bool removeInside, List& edgeStat ) @@ -182,25 +165,6 @@ void Foam::deleteBox } -bool Foam::onLine(const point& p, const linePointRef& line) -{ - const point& a = line.start(); - const point& b = line.end(); - - if - ( - ( p.x() < min(a.x(), b.x()) || p.x() > max(a.x(), b.x()) ) - || ( p.y() < min(a.y(), b.y()) || p.y() > max(a.y(), b.y()) ) - || ( p.z() < min(a.z(), b.z()) || p.z() > max(a.z(), b.z()) ) - ) - { - return false; - } - - return true; -} - - void Foam::deleteEdges ( const triSurface& surf, @@ -223,7 +187,7 @@ void Foam::deleteEdges point featPoint = intersect * (p1 - p0) + p0; - if (!onLine(featPoint, line)) + if (!line.insideBoundBox(featPoint)) { edgeStat[edgeI] = surfaceFeatures::NONE; } diff --git a/src/OpenFOAM/meshes/meshShapes/edge/edge.H b/src/OpenFOAM/meshes/meshShapes/edge/edge.H index e1c314d1f..896e7b34f 100644 --- a/src/OpenFOAM/meshes/meshShapes/edge/edge.H +++ b/src/OpenFOAM/meshes/meshShapes/edge/edge.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -97,12 +97,15 @@ public: //- Return end vertex label inline label& end(); - //- Given one vertex, return the other - inline label otherVertex(const label a) const; + //- Return true if connected to given edge + inline bool connected(const edge& a) const; //- Return common vertex inline label commonVertex(const edge& a) const; + //- Given one vertex, return the other + inline label otherVertex(const label a) const; + //- Flip the edge in-place. inline void flip(); diff --git a/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H b/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H index 8e967880f..cd778d989 100644 --- a/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H +++ b/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -100,20 +100,21 @@ inline Foam::label& Foam::edge::end() } -inline Foam::label Foam::edge::otherVertex(const label a) const +inline bool Foam::edge::connected(const edge& a) const { - if (a == start()) + if + ( + start() == a.start() + || start() == a.end() + || end() == a.start() + || end() == a.end() + ) { - return end(); - } - else if (a == end()) - { - return start(); + return true; } else { - // The given vertex is not on the edge in the first place. - return -1; + return false; } } @@ -136,6 +137,23 @@ inline Foam::label Foam::edge::commonVertex(const edge& a) const } +inline Foam::label Foam::edge::otherVertex(const label a) const +{ + if (a == start()) + { + return end(); + } + else if (a == end()) + { + return start(); + } + else + { + // The given vertex is not on the edge in the first place. + return -1; + } +} + inline void Foam::edge::flip() { Swap(operator[](0), operator[](1)); diff --git a/src/OpenFOAM/meshes/primitiveShapes/line/line.H b/src/OpenFOAM/meshes/primitiveShapes/line/line.H index 74bc68013..9ff476e6f 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/line/line.H +++ b/src/OpenFOAM/meshes/primitiveShapes/line/line.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -130,6 +130,8 @@ public: Point& edgePoint ) const; + bool insideBoundBox(const Point&) const; + // Ostream operator diff --git a/src/OpenFOAM/meshes/primitiveShapes/line/lineI.H b/src/OpenFOAM/meshes/primitiveShapes/line/lineI.H index dff9ba68e..14f7580cf 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/line/lineI.H +++ b/src/OpenFOAM/meshes/primitiveShapes/line/lineI.H @@ -257,6 +257,23 @@ Foam::scalar Foam::line::nearestDist } +template +bool Foam::line::insideBoundBox(const Point& p) const +{ + if + ( + ( p.x() < min(a_.x(), b_.x()) || p.x() > max(a_.x(), b_.x()) ) + || ( p.y() < min(a_.y(), b_.y()) || p.y() > max(a_.y(), b_.y()) ) + || ( p.z() < min(a_.z(), b_.z()) || p.z() > max(a_.z(), b_.z()) ) + ) + { + return false; + } + + return true; +} + + // * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * * // template