mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: consistent member access for triFace / triangle etc.
- can access the vertices/points as a(), b(), c()
This commit is contained in:
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2017 OpenCFD Ltd.
|
Copyright (C) 2017-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -82,8 +82,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Info<< nl << "hash-like functionality" << nl;
|
Info<< nl << "hash-like functionality" << nl;
|
||||||
|
|
||||||
// doesn't work e4 = -1;
|
e4.clear();
|
||||||
e4.start() = e4.end() = -1;
|
|
||||||
|
|
||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
for (label i : {2, -1, 2, 1, 4, 1, 2, 3})
|
for (label i : {2, -1, 2, 1, 4, 1, 2, 3})
|
||||||
@ -93,24 +92,24 @@ int main(int argc, char *argv[])
|
|||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
}
|
}
|
||||||
|
|
||||||
e4.start() = e4.end() = -1;
|
e4.clear();
|
||||||
Info<< "insert from list\n";
|
Info<< "insert from list\n";
|
||||||
labelHashSet newIndices({2, -1, 2, 1, 4, 1, 2, 3});
|
labelHashSet newIndices({2, -1, 2, 1, 4, 1, 2, 3});
|
||||||
e4.insert(newIndices.toc());
|
e4.insert(newIndices.toc());
|
||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
|
|
||||||
e4.start() = e4.end() = -1;
|
e4.clear();
|
||||||
Info<< "insert from list\n";
|
Info<< "insert from list\n";
|
||||||
e4.insert({0, 5, 2, -1, 2, 1, 4, 1, 2, 3});
|
e4.insert({0, 5, 2, -1, 2, 1, 4, 1, 2, 3});
|
||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
|
|
||||||
FixedList<label, 8> otherIndices{12, 2, -1, 1, 4, 1, 2, 3};
|
FixedList<label, 8> otherIndices{12, 2, -1, 1, 4, 1, 2, 3};
|
||||||
e4.start() = e4.end() = -1;
|
e4.clear();
|
||||||
Info<< "insert from list: " << otherIndices << nl;
|
Info<< "insert from list: " << otherIndices << nl;
|
||||||
e4.insert(otherIndices);
|
e4.insert(otherIndices);
|
||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
|
|
||||||
e4.start() = e4.end();
|
e4.a() = e4.b();
|
||||||
Info<< "erase from list: " << otherIndices << nl;
|
Info<< "erase from list: " << otherIndices << nl;
|
||||||
Info<< "removed " << e4.erase(otherIndices) << " values" << nl;
|
Info<< "removed " << e4.erase(otherIndices) << " values" << nl;
|
||||||
printInfo(e4);
|
printInfo(e4);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||||
Copyright (C) 2017-2021 OpenCFD Ltd.
|
Copyright (C) 2017-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -107,27 +107,40 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return first vertex label
|
//- The first vertex
|
||||||
|
label a() const { return labelPair::first(); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
label b() const { return labelPair::second(); }
|
||||||
|
|
||||||
|
//- The first vertex
|
||||||
|
label& a() { return labelPair::first(); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
label& b() { return labelPair::second(); }
|
||||||
|
|
||||||
|
|
||||||
|
//- The first vertex label
|
||||||
using labelPair::first;
|
using labelPair::first;
|
||||||
|
|
||||||
//- Return last (second) vertex label
|
//- The second (last) vertex label
|
||||||
using labelPair::last;
|
|
||||||
|
|
||||||
//- Return second (last) vertex label
|
|
||||||
using labelPair::second;
|
using labelPair::second;
|
||||||
|
|
||||||
|
//- The last (second) vertex label
|
||||||
|
using labelPair::last;
|
||||||
|
|
||||||
//- Return start (first) vertex label
|
//- The start (first) vertex label
|
||||||
inline label start() const;
|
label start() const { return labelPair::first(); }
|
||||||
|
|
||||||
//- Return start (first) vertex label
|
//- The end (last/second) vertex label
|
||||||
inline label& start();
|
label end() const { return labelPair::second(); }
|
||||||
|
|
||||||
//- Return end (last/second) vertex label
|
//- The start (first) vertex label
|
||||||
inline label end() const;
|
label& start() { return labelPair::first(); }
|
||||||
|
|
||||||
|
//- The end (last/second) vertex label
|
||||||
|
label& end() { return labelPair::second(); }
|
||||||
|
|
||||||
//- Return end (last/second) vertex label
|
|
||||||
inline label& end();
|
|
||||||
|
|
||||||
//- Return reverse edge as copy.
|
//- Return reverse edge as copy.
|
||||||
// No special handling of negative point labels.
|
// No special handling of negative point labels.
|
||||||
|
|||||||
@ -92,29 +92,6 @@ inline Foam::edge::edge(Istream& is)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline Foam::label Foam::edge::start() const
|
|
||||||
{
|
|
||||||
return first();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Foam::label& Foam::edge::start()
|
|
||||||
{
|
|
||||||
return first();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::label Foam::edge::end() const
|
|
||||||
{
|
|
||||||
return second();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::label& Foam::edge::end()
|
|
||||||
{
|
|
||||||
return second();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::label Foam::edge::minVertex() const
|
inline Foam::label Foam::edge::minVertex() const
|
||||||
{
|
{
|
||||||
return (first() < second() ? first() : second());
|
return (first() < second() ? first() : second());
|
||||||
|
|||||||
@ -102,16 +102,35 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return first vertex label
|
//- The first vertex
|
||||||
|
label a() const { return operator[](0); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
label b() const { return operator[](1); }
|
||||||
|
|
||||||
|
//- The third vertex
|
||||||
|
label c() const { return operator[](2); }
|
||||||
|
|
||||||
|
//- The first vertex
|
||||||
|
label& a() { return operator[](0); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
label& b() { return operator[](1); }
|
||||||
|
|
||||||
|
//- The third vertex
|
||||||
|
label& c() { return operator[](2); }
|
||||||
|
|
||||||
|
|
||||||
|
//- The first vertex label
|
||||||
using FixedList<label, 3>::first;
|
using FixedList<label, 3>::first;
|
||||||
|
|
||||||
//- Return last (third) vertex label
|
//- The last (third) vertex label
|
||||||
using FixedList<label, 3>::last;
|
using FixedList<label, 3>::last;
|
||||||
|
|
||||||
//- Return second vertex label
|
//- The second vertex label
|
||||||
label& second() { return operator[](1); }
|
label& second() { return operator[](1); }
|
||||||
|
|
||||||
//- Return second vertex label
|
//- The second vertex label
|
||||||
label second() const { return operator[](1); }
|
label second() const { return operator[](1); }
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011 OpenFOAM Foundation
|
Copyright (C) 2011 OpenFOAM Foundation
|
||||||
Copyright (C) 2018-2021 OpenCFD Ltd.
|
Copyright (C) 2018-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -43,6 +43,7 @@ SourceFiles
|
|||||||
#include "vector.H"
|
#include "vector.H"
|
||||||
#include "PointHit.H"
|
#include "PointHit.H"
|
||||||
#include "FixedList.H"
|
#include "FixedList.H"
|
||||||
|
#include "Pair.H"
|
||||||
#include "UList.H"
|
#include "UList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -67,6 +68,55 @@ inline Ostream& operator<<(Ostream& os, const line<Point, PointRef>& l);
|
|||||||
typedef line<point, const point&> linePointRef;
|
typedef line<point, const point&> linePointRef;
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class linePoints Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
//- Line point storage. Default constructable (line is not)
|
||||||
|
class linePoints
|
||||||
|
:
|
||||||
|
public Pair<point>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Generated Methods
|
||||||
|
|
||||||
|
//- Default construct
|
||||||
|
linePoints() = default;
|
||||||
|
|
||||||
|
//- Inherit constructors
|
||||||
|
using Pair<point>::Pair;
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from point references
|
||||||
|
inline explicit linePoints(const linePointRef& pts);
|
||||||
|
|
||||||
|
//- Copy construct from subset of points
|
||||||
|
inline linePoints
|
||||||
|
(
|
||||||
|
const UList<point>& points,
|
||||||
|
const FixedList<label, 2>& indices
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- The first vertex
|
||||||
|
const point& a() const { return Pair<point>::first(); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
const point& b() const { return Pair<point>::second(); }
|
||||||
|
|
||||||
|
//- The first vertex
|
||||||
|
point& a() { return Pair<point>::first(); }
|
||||||
|
|
||||||
|
//- The second vertex
|
||||||
|
point& b() { return Pair<point>::second(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class line Declaration
|
Class line Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -106,20 +156,26 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return first point
|
//- The first point
|
||||||
inline PointRef first() const noexcept { return a_; }
|
PointRef a() const noexcept { return a_; }
|
||||||
|
|
||||||
//- Return second (last) point
|
//- The second point
|
||||||
inline PointRef second() const noexcept { return b_; }
|
PointRef b() const noexcept { return b_; }
|
||||||
|
|
||||||
//- Return last (second) point
|
//- The first point
|
||||||
inline PointRef last() const noexcept { return b_; }
|
PointRef first() const noexcept { return a_; }
|
||||||
|
|
||||||
//- Return start (first) point
|
//- The second (last) point
|
||||||
inline PointRef start() const noexcept { return a_; }
|
PointRef second() const noexcept { return b_; }
|
||||||
|
|
||||||
//- Return end (second) point
|
//- The last (second) point
|
||||||
inline PointRef end() const noexcept { return b_; }
|
PointRef last() const noexcept { return b_; }
|
||||||
|
|
||||||
|
//- The start (first) point
|
||||||
|
PointRef start() const noexcept { return a_; }
|
||||||
|
|
||||||
|
//- The end (second) point
|
||||||
|
PointRef end() const noexcept { return b_; }
|
||||||
|
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
@ -151,19 +207,10 @@ public:
|
|||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
// IOstream operators
|
// IOstream Operators
|
||||||
|
|
||||||
friend Istream& operator>> <Point, PointRef>
|
friend Istream& operator>> <Point, PointRef>(Istream&, line&);
|
||||||
(
|
friend Ostream& operator<< <Point, PointRef>(Ostream&, const line&);
|
||||||
Istream& is,
|
|
||||||
line& l
|
|
||||||
);
|
|
||||||
|
|
||||||
friend Ostream& operator<< <Point, PointRef>
|
|
||||||
(
|
|
||||||
Ostream& os,
|
|
||||||
const line& l
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,22 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::linePoints::linePoints(const linePointRef& pts)
|
||||||
|
:
|
||||||
|
Pair<point>(pts.a(), pts.b())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::linePoints::linePoints
|
||||||
|
(
|
||||||
|
const UList<point>& points,
|
||||||
|
const FixedList<label, 2>& indices
|
||||||
|
)
|
||||||
|
:
|
||||||
|
Pair<point>(points[indices.first()], points[indices.last()])
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class Point, class PointRef>
|
template<class Point, class PointRef>
|
||||||
inline Foam::line<Point, PointRef>::line(const Point& from, const Point& to)
|
inline Foam::line<Point, PointRef>::line(const Point& from, const Point& to)
|
||||||
:
|
:
|
||||||
@ -46,8 +62,8 @@ inline Foam::line<Point, PointRef>::line
|
|||||||
const FixedList<label, 2>& indices
|
const FixedList<label, 2>& indices
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
a_(points[indices[0]]),
|
a_(points[indices.first()]),
|
||||||
b_(points[indices[1]])
|
b_(points[indices.last()])
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -131,7 +131,7 @@ inline T& Foam::Pair<T>::second() noexcept
|
|||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline const T& Foam::Pair<T>::other(const T& a) const
|
inline const T& Foam::Pair<T>::other(const T& val) const
|
||||||
{
|
{
|
||||||
if (first() == second())
|
if (first() == second())
|
||||||
{
|
{
|
||||||
@ -139,15 +139,15 @@ inline const T& Foam::Pair<T>::other(const T& a) const
|
|||||||
<< "Call to other only valid for Pair with differing elements:"
|
<< "Call to other only valid for Pair with differing elements:"
|
||||||
<< *this << abort(FatalError);
|
<< *this << abort(FatalError);
|
||||||
}
|
}
|
||||||
else if (a == first())
|
else if (val == first())
|
||||||
{
|
{
|
||||||
return second();
|
return second();
|
||||||
}
|
}
|
||||||
else if (a != second())
|
else if (val != second())
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "Pair " << *this
|
<< "Pair " << *this
|
||||||
<< " does not contain " << a << abort(FatalError);
|
<< " does not contain " << val << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return first();
|
return first();
|
||||||
|
|||||||
@ -86,9 +86,9 @@ public:
|
|||||||
inline STLtriangle
|
inline STLtriangle
|
||||||
(
|
(
|
||||||
const STLpoint& normal,
|
const STLpoint& normal,
|
||||||
const STLpoint& a,
|
const STLpoint& p0,
|
||||||
const STLpoint& b,
|
const STLpoint& p1,
|
||||||
const STLpoint& c,
|
const STLpoint& p2,
|
||||||
uint16_t attrib
|
uint16_t attrib
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -127,18 +127,18 @@ public:
|
|||||||
(
|
(
|
||||||
Ostream& os,
|
Ostream& os,
|
||||||
const vector& norm,
|
const vector& norm,
|
||||||
const point& pt0,
|
const point& p0,
|
||||||
const point& pt1,
|
const point& p1,
|
||||||
const point& pt2
|
const point& p2
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Write components to Ostream (ASCII), calculating the normal
|
//- Write components to Ostream (ASCII), calculating the normal
|
||||||
inline static void write
|
inline static void write
|
||||||
(
|
(
|
||||||
Ostream& os,
|
Ostream& os,
|
||||||
const point& pt0,
|
const point& p0,
|
||||||
const point& pt1,
|
const point& p1,
|
||||||
const point& pt2
|
const point& p2
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -33,16 +33,16 @@ License
|
|||||||
inline Foam::STLtriangle::STLtriangle
|
inline Foam::STLtriangle::STLtriangle
|
||||||
(
|
(
|
||||||
const STLpoint& normal,
|
const STLpoint& normal,
|
||||||
const STLpoint& a,
|
const STLpoint& p0,
|
||||||
const STLpoint& b,
|
const STLpoint& p1,
|
||||||
const STLpoint& c,
|
const STLpoint& p2,
|
||||||
uint16_t attrib
|
uint16_t attrib
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
normal_(normal),
|
normal_(normal),
|
||||||
a_(a),
|
a_(p0),
|
||||||
b_(b),
|
b_(p1),
|
||||||
c_(c),
|
c_(p2),
|
||||||
attrib_(attrib)
|
attrib_(attrib)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -88,17 +88,17 @@ inline void Foam::STLtriangle::write
|
|||||||
(
|
(
|
||||||
Ostream& os,
|
Ostream& os,
|
||||||
const vector& norm,
|
const vector& norm,
|
||||||
const point& pt0,
|
const point& p0,
|
||||||
const point& pt1,
|
const point& p1,
|
||||||
const point& pt2
|
const point& p2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
os << " facet normal "
|
os << " facet normal "
|
||||||
<< norm.x() << ' ' << norm.y() << ' ' << norm.z() << nl
|
<< norm.x() << ' ' << norm.y() << ' ' << norm.z() << nl
|
||||||
<< " outer loop" << nl
|
<< " outer loop" << nl
|
||||||
<< " vertex " << pt0.x() << ' ' << pt0.y() << ' ' << pt0.z() << nl
|
<< " vertex " << p0.x() << ' ' << p0.y() << ' ' << p0.z() << nl
|
||||||
<< " vertex " << pt1.x() << ' ' << pt1.y() << ' ' << pt1.z() << nl
|
<< " vertex " << p1.x() << ' ' << p1.y() << ' ' << p1.z() << nl
|
||||||
<< " vertex " << pt2.x() << ' ' << pt2.y() << ' ' << pt2.z() << nl
|
<< " vertex " << p2.x() << ' ' << p2.y() << ' ' << p2.z() << nl
|
||||||
<< " endloop" << nl
|
<< " endloop" << nl
|
||||||
<< " endfacet" << nl;
|
<< " endfacet" << nl;
|
||||||
}
|
}
|
||||||
@ -107,15 +107,15 @@ inline void Foam::STLtriangle::write
|
|||||||
inline void Foam::STLtriangle::write
|
inline void Foam::STLtriangle::write
|
||||||
(
|
(
|
||||||
Ostream& os,
|
Ostream& os,
|
||||||
const point& pt0,
|
const point& p0,
|
||||||
const point& pt1,
|
const point& p1,
|
||||||
const point& pt2
|
const point& p2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Calculate the normal ourselves
|
// Calculate the normal ourselves
|
||||||
const vector norm = triPointRef(pt0, pt1, pt2).unitNormal();
|
const vector norm = triPointRef(p0, p1, p2).unitNormal();
|
||||||
|
|
||||||
write(os, norm, pt0, pt1, pt2);
|
write(os, norm, p0, p1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -123,11 +123,11 @@ inline void Foam::STLtriangle::write
|
|||||||
|
|
||||||
inline Foam::Ostream& Foam::operator<<(Ostream& os, const STLtriangle& tri)
|
inline Foam::Ostream& Foam::operator<<(Ostream& os, const STLtriangle& tri)
|
||||||
{
|
{
|
||||||
os << tri.normal_ << token::SPACE
|
os << tri.normal() << token::SPACE
|
||||||
<< tri.a_ << token::SPACE
|
<< tri.a() << token::SPACE
|
||||||
<< tri.b_ << token::SPACE
|
<< tri.b() << token::SPACE
|
||||||
<< tri.c_ << token::SPACE
|
<< tri.c() << token::SPACE
|
||||||
<< tri.attrib_;
|
<< tri.attrib();
|
||||||
|
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user