directly use std::multiset as the double keys are not needed

This commit is contained in:
Sébastien Loriot 2023-04-12 09:19:55 +02:00
parent a3bf5d80b7
commit 4dc91d18be
1 changed files with 30 additions and 28 deletions

View File

@ -384,10 +384,6 @@ namespace internal {
void split_long_edges(const EdgeRange& edge_range,
const double& high)
{
typedef boost::bimap<
boost::bimaps::set_of<halfedge_descriptor>,
boost::bimaps::multiset_of<double, std::greater<double> > > Boost_bimap;
typedef typename Boost_bimap::value_type long_edge;
#ifdef CGAL_PMP_REMESHING_VERBOSE
std::cout << "Split long edges (" << high << ")...";
@ -396,12 +392,17 @@ namespace internal {
double sq_high = high*high;
//collect long edges
Boost_bimap long_edges;
typedef std::pair<halfedge_descriptor, double> H_and_sql;
std::multiset< H_and_sql, std::function<bool(H_and_sql,H_and_sql)> >
long_edges(
[](const H_and_sql& p1, const H_and_sql& p2)
{ return p1.second > p2.second; }
);
for(edge_descriptor e : edge_range)
{
double sqlen = sqlength(e);
if (sqlen > sq_high)
long_edges.insert(long_edge(halfedge(e, mesh_), sqlen));
long_edges.emplace(halfedge(e, mesh_), sqlen);
}
//split long edges
@ -411,10 +412,10 @@ namespace internal {
while (!long_edges.empty())
{
//the edge with longest length
typename Boost_bimap::right_map::iterator eit = long_edges.right.begin();
halfedge_descriptor he = eit->second;
double sqlen = eit->first;
long_edges.right.erase(eit);
auto eit = long_edges.begin();
halfedge_descriptor he = eit->first;
double sqlen = eit->second;
long_edges.erase(eit);
//split edge
Point refinement_point = this->midpoint(he);
@ -438,8 +439,8 @@ namespace internal {
if (sqlen_new > sq_high)
{
//if it was more than twice the "long" threshold, insert them
long_edges.insert(long_edge(hnew, sqlen_new));
long_edges.insert(long_edge(next(hnew, mesh_), sqlen_new));
long_edges.emplace(hnew, sqlen_new);
long_edges.emplace(next(hnew, mesh_), sqlen_new);
}
//insert new edges to keep triangular faces, and update long_edges
@ -479,25 +480,26 @@ namespace internal {
//is split at its midpoint and the two adjacent triangles are bisected (2-4 split)"
void split_long_edges(const double& high)
{
typedef boost::bimap<
boost::bimaps::set_of<halfedge_descriptor>,
boost::bimaps::multiset_of<double, std::greater<double> > > Boost_bimap;
typedef typename Boost_bimap::value_type long_edge;
#ifdef CGAL_PMP_REMESHING_VERBOSE
std::cout << "Split long edges (" << high << ")..." << std::endl;
#endif
double sq_high = high*high;
//collect long edges
Boost_bimap long_edges;
typedef std::pair<halfedge_descriptor, double> H_and_sql;
std::multiset< H_and_sql, std::function<bool(H_and_sql,H_and_sql)> >
long_edges(
[](const H_and_sql& p1, const H_and_sql& p2)
{ return p1.second > p2.second; }
);
for(edge_descriptor e : edges(mesh_))
{
if (!is_split_allowed(e))
continue;
double sqlen = sqlength(e);
if(sqlen > sq_high)
long_edges.insert(long_edge(halfedge(e, mesh_), sqlen));
long_edges.emplace(halfedge(e, mesh_), sqlen);
}
//split long edges
@ -507,13 +509,13 @@ namespace internal {
while (!long_edges.empty())
{
//the edge with longest length
typename Boost_bimap::right_map::iterator eit = long_edges.right.begin();
halfedge_descriptor he = eit->second;
double sqlen = eit->first;
long_edges.right.erase(eit);
auto eit = long_edges.begin();
halfedge_descriptor he = eit->first;
double sqlen = eit->second;
long_edges.erase(eit);
#ifdef CGAL_PMP_REMESHING_VERBOSE_PROGRESS
std::cout << "\r\t(" << long_edges.left.size() << " long edges, ";
std::cout << "\r\t(" << long_edges.size() << " long edges, ";
std::cout << nb_splits << " splits)";
std::cout.flush();
#endif
@ -550,8 +552,8 @@ namespace internal {
if (sqlen_new > sq_high)
{
//if it was more than twice the "long" threshold, insert them
long_edges.insert(long_edge(hnew, sqlen_new));
long_edges.insert(long_edge(next(hnew, mesh_), sqlen_new));
long_edges.emplace(hnew, sqlen_new);
long_edges.emplace(next(hnew, mesh_), sqlen_new);
}
//insert new edges to keep triangular faces, and update long_edges
@ -573,7 +575,7 @@ namespace internal {
{
double sql = sqlength(hnew2);
if (sql > sq_high)
long_edges.insert(long_edge(hnew2, sql));
long_edges.emplace(hnew2, sql);
}
}
@ -596,7 +598,7 @@ namespace internal {
{
double sql = sqlength(hnew2);
if (sql > sq_high)
long_edges.insert(long_edge(hnew2, sql));
long_edges.emplace(hnew2, sql);
}
}
}