summaryrefslogtreecommitdiff
path: root/src/GudhUI/utils/Edge_collapsor.h
diff options
context:
space:
mode:
authorvrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2015-10-08 21:15:51 +0000
committervrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2015-10-08 21:15:51 +0000
commitcd2e83819689afd2cd1bc76810282111cf5cd59d (patch)
tree8cf97b1f5a8589fa160d03248ca3f429b436b814 /src/GudhUI/utils/Edge_collapsor.h
parent58e633f51ffa06aa219231cd1c08eab59457a12f (diff)
cpplint fixes on GudhUI
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@844 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 3acf1e789f3e4bded974f324ce3161bc1d1d2433
Diffstat (limited to 'src/GudhUI/utils/Edge_collapsor.h')
-rw-r--r--src/GudhUI/utils/Edge_collapsor.h156
1 files changed, 84 insertions, 72 deletions
diff --git a/src/GudhUI/utils/Edge_collapsor.h b/src/GudhUI/utils/Edge_collapsor.h
index 4dcd18ac..fcf2a248 100644
--- a/src/GudhUI/utils/Edge_collapsor.h
+++ b/src/GudhUI/utils/Edge_collapsor.h
@@ -1,12 +1,28 @@
-/*
- * Collapsor.h
+/* This file is part of the Gudhi Library. The Gudhi library
+ * (Geometric Understanding in Higher Dimensions) is a generic C++
+ * library for computational topology.
*
- * Created on: Sep 25, 2014
- * Author: dsalinas
+ * Author(s): David Salinas
+ *
+ * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
-#ifndef COLLAPSOR_H_
-#define COLLAPSOR_H_
+#ifndef UTILS_COLLAPSOR_H_
+#define UTILS_COLLAPSOR_H_
#include <list>
#include "utils/Edge_contractor.h"
@@ -15,71 +31,67 @@
/**
* Iteratively puts every vertex at the center of its neighbors
*/
-template<typename SkBlComplex> class Edge_collapsor{
-private:
- SkBlComplex& complex_;
- unsigned num_collapses_;
-public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
-
- /**
- * @brief Collapse num_collapses edges. If num_collapses<0 then it collapses all possible edges.
- * Largest edges are collapsed first.
- *
- */
- Edge_collapsor(SkBlComplex& complex,unsigned num_collapses):
- complex_(complex),num_collapses_(num_collapses)
- {
- std::list<Edge_handle> edges;
- edges.insert(edges.begin(),complex_.edge_range().begin(),complex_.edge_range().end());
-
- edges.sort(
- [&](Edge_handle e1,Edge_handle e2){
- return squared_edge_length(e1) < squared_edge_length(e2);
- });
-
- collapse_edges(edges);
-
- }
-
-private:
-
- void collapse_edges(std::list<Edge_handle>& edges){
- while(!edges.empty() && num_collapses_--){
- Edge_handle current_edge = edges.front();
- edges.pop_front();
- if(is_link_reducible(current_edge))
- complex_.remove_edge(current_edge);
- }
-
- }
-
- bool is_link_reducible(Edge_handle e){
- auto link = complex_.link(e);
-
- if(link.empty()) return false;
-
- if(link.is_cone()) return true;
-
- if(link.num_connected_components()>1) return false;
-
- Edge_contractor<SkBlComplex> contractor(link,link.num_vertices()-1);
-
- return (link.num_vertices()==1);
- }
-
-
- double squared_edge_length(Edge_handle e) const{
- return squared_eucl_distance(complex_.point(complex_.first_vertex(e)),complex_.point(complex_.second_vertex(e)));
- }
-
- double squared_eucl_distance(const Point& p1,const Point& p2) const{
- return Geometry_trait::Squared_distance_d()(p1,p2);
- }
-
+template<typename SkBlComplex> class Edge_collapsor {
+ private:
+ SkBlComplex& complex_;
+ unsigned num_collapses_;
+
+ public:
+ typedef typename SkBlComplex::Vertex_handle Vertex_handle;
+ typedef typename SkBlComplex::Edge_handle Edge_handle;
+
+ /**
+ * @brief Collapse num_collapses edges. If num_collapses<0 then it collapses all possible edges.
+ * Largest edges are collapsed first.
+ *
+ */
+ Edge_collapsor(SkBlComplex& complex, unsigned num_collapses) :
+ complex_(complex), num_collapses_(num_collapses) {
+ std::list<Edge_handle> edges;
+ edges.insert(edges.begin(), complex_.edge_range().begin(), complex_.edge_range().end());
+
+ edges.sort(
+ [&](Edge_handle e1, Edge_handle e2) {
+ return squared_edge_length(e1) < squared_edge_length(e2);
+ });
+
+ collapse_edges(edges);
+ }
+
+ private:
+ void collapse_edges(std::list<Edge_handle>& edges) {
+ while (!edges.empty() && num_collapses_--) {
+ Edge_handle current_edge = edges.front();
+ edges.pop_front();
+ if (is_link_reducible(current_edge))
+ complex_.remove_edge(current_edge);
+ }
+ }
+
+ bool is_link_reducible(Edge_handle e) {
+ auto link = complex_.link(e);
+
+ if (link.empty())
+ return false;
+
+ if (link.is_cone())
+ return true;
+
+ if (link.num_connected_components() > 1)
+ return false;
+
+ Edge_contractor<SkBlComplex> contractor(link, link.num_vertices() - 1);
+
+ return (link.num_vertices() == 1);
+ }
+
+ double squared_edge_length(Edge_handle e) const {
+ return squared_eucl_distance(complex_.point(complex_.first_vertex(e)), complex_.point(complex_.second_vertex(e)));
+ }
+
+ double squared_eucl_distance(const Point& p1, const Point& p2) const {
+ return Geometry_trait::Squared_distance_d()(p1, p2);
+ }
};
-
-
-#endif /* COLLAPSOR_H_ */
+#endif // UTILS_COLLAPSOR_H_