mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: edgeMesh: Add function to eliminate duplicate edges
This commit is contained in:
@ -28,6 +28,7 @@ License
|
|||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
#include "addToMemberFunctionSelectionTable.H"
|
#include "addToMemberFunctionSelectionTable.H"
|
||||||
#include "ListOps.H"
|
#include "ListOps.H"
|
||||||
|
#include "EdgeMap.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -327,10 +328,7 @@ void Foam::edgeMesh::mergePoints(const scalar mergeDist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compact using a hashtable and commutative hash of edge.
|
// Compact using a hashtable and commutative hash of edge.
|
||||||
HashTable<label, edge, Hash<edge> > edgeToLabel
|
EdgeMap<label> edgeToLabel(2*edges_.size());
|
||||||
(
|
|
||||||
2*edges_.size()
|
|
||||||
);
|
|
||||||
|
|
||||||
label newEdgeI = 0;
|
label newEdgeI = 0;
|
||||||
|
|
||||||
@ -349,13 +347,7 @@ void Foam::edgeMesh::mergePoints(const scalar mergeDist)
|
|||||||
|
|
||||||
edges_.setSize(newEdgeI);
|
edges_.setSize(newEdgeI);
|
||||||
|
|
||||||
for
|
forAllConstIter(EdgeMap<label>, edgeToLabel, iter)
|
||||||
(
|
|
||||||
HashTable<label, edge, Hash<edge> >::const_iterator iter =
|
|
||||||
edgeToLabel.begin();
|
|
||||||
iter != edgeToLabel.end();
|
|
||||||
++iter
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
edges_[iter()] = iter.key();
|
edges_[iter()] = iter.key();
|
||||||
}
|
}
|
||||||
@ -363,4 +355,35 @@ void Foam::edgeMesh::mergePoints(const scalar mergeDist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::edgeMesh::mergeEdges()
|
||||||
|
{
|
||||||
|
EdgeMap<label> existingEdges(2*edges_.size());
|
||||||
|
|
||||||
|
label curEdgeI = 0;
|
||||||
|
forAll(edges_, edgeI)
|
||||||
|
{
|
||||||
|
const edge& e = edges_[edgeI];
|
||||||
|
|
||||||
|
if (existingEdges.insert(e, curEdgeI))
|
||||||
|
{
|
||||||
|
curEdgeI++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Merging duplicate edges: "
|
||||||
|
<< edges_.size() - existingEdges.size()
|
||||||
|
<< " edges will be deleted." << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
edges_.setSize(existingEdges.size());
|
||||||
|
|
||||||
|
forAllConstIter(EdgeMap<label>, existingEdges, iter)
|
||||||
|
{
|
||||||
|
edges_[iter()] = iter.key();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -246,6 +246,9 @@ public:
|
|||||||
//- Merge common points (points within mergeDist)
|
//- Merge common points (points within mergeDist)
|
||||||
void mergePoints(const scalar mergeDist);
|
void mergePoints(const scalar mergeDist);
|
||||||
|
|
||||||
|
//- Merge similar edges
|
||||||
|
void mergeEdges();
|
||||||
|
|
||||||
|
|
||||||
// Write
|
// Write
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user