surfaceFeatureExtract: Refactored core line and edge functions corresponding classes

This commit is contained in:
Henry Weller
2018-04-10 21:52:44 +01:00
parent 21d5267b6f
commit a908847b9c
6 changed files with 58 additions and 60 deletions

View File

@ -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<pointIndexHit>& hitList,
@ -64,13 +60,11 @@ namespace Foam
void deleteBox
(
const triSurface& surf,
const treeBoundBox& bb,
const boundBox& bb,
const bool removeInside,
List<surfaceFeatures::edgeStatus>& edgeStat
);
bool onLine(const point& p, const linePointRef& line);
//- Deletes all edges inside/outside bounding box from set.
void deleteEdges
(

View File

@ -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<pointIndexHit>& 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<surfaceFeatures::edgeStatus>& 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;
}

View File

@ -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();

View File

@ -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));

View File

@ -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

View File

@ -257,6 +257,23 @@ Foam::scalar Foam::line<Point, PointRef>::nearestDist
}
template<class Point, class PointRef>
bool Foam::line<Point, PointRef>::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<class Point, class PointRef>