ENH: edgeMesh: Add function to eliminate duplicate edges

This commit is contained in:
laurence
2012-03-20 17:41:39 +00:00
parent 13e95e2a67
commit 9a7beff358
2 changed files with 37 additions and 11 deletions

View File

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

View File

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