summaryrefslogtreecommitdiff
path: root/GudhUI
diff options
context:
space:
mode:
Diffstat (limited to 'GudhUI')
-rw-r--r--GudhUI/CMakeLists.txt40
-rw-r--r--GudhUI/gui/KNearestNeighborsMenu.ui150
-rw-r--r--GudhUI/gui/MainWindow.cpp299
-rw-r--r--GudhUI/gui/MainWindow.h118
-rw-r--r--GudhUI/gui/MenuEdgeContraction.ui118
-rw-r--r--GudhUI/gui/Menu_edge_contraction.cpp97
-rw-r--r--GudhUI/gui/Menu_edge_contraction.h60
-rw-r--r--GudhUI/gui/Menu_k_nearest_neighbors.cpp59
-rw-r--r--GudhUI/gui/Menu_k_nearest_neighbors.h51
-rw-r--r--GudhUI/gui/Menu_persistence.cpp53
-rw-r--r--GudhUI/gui/Menu_persistence.h51
-rw-r--r--GudhUI/gui/Menu_uniform_neighbors.cpp60
-rw-r--r--GudhUI/gui/Menu_uniform_neighbors.h51
-rw-r--r--GudhUI/gui/PersistenceMenu.ui139
-rw-r--r--GudhUI/gui/UniformNeighborsMenu.ui153
-rw-r--r--GudhUI/gui/gudhui.cpp38
-rw-r--r--GudhUI/gui/main_window.ui255
-rw-r--r--GudhUI/model/Complex_typedefs.h49
-rw-r--r--GudhUI/model/Model.h355
-rw-r--r--GudhUI/todo.txt22
-rw-r--r--GudhUI/utils/Bar_code_persistence.h113
-rw-r--r--GudhUI/utils/Critical_points.h133
-rw-r--r--GudhUI/utils/Edge_collapsor.h97
-rw-r--r--GudhUI/utils/Edge_contractor.h97
-rw-r--r--GudhUI/utils/Furthest_point_epsilon_net.h132
-rw-r--r--GudhUI/utils/Is_manifold.h104
-rw-r--r--GudhUI/utils/K_nearest_builder.h90
-rw-r--r--GudhUI/utils/Lloyd_builder.h91
-rw-r--r--GudhUI/utils/MClock.h70
-rw-r--r--GudhUI/utils/Persistence_compute.h94
-rw-r--r--GudhUI/utils/Rips_builder.h69
-rw-r--r--GudhUI/utils/UI_utils.h45
-rw-r--r--GudhUI/utils/Vertex_collapsor.h89
-rw-r--r--GudhUI/view/Color.h35
-rw-r--r--GudhUI/view/FirstCoordProjector.h44
-rw-r--r--GudhUI/view/Projector3D.h39
-rw-r--r--GudhUI/view/View_parameter.h151
-rw-r--r--GudhUI/view/Viewer.cpp186
-rw-r--r--GudhUI/view/Viewer.h117
-rw-r--r--GudhUI/view/Viewer_instructor.cpp192
-rw-r--r--GudhUI/view/Viewer_instructor.h114
41 files changed, 0 insertions, 4320 deletions
diff --git a/GudhUI/CMakeLists.txt b/GudhUI/CMakeLists.txt
deleted file mode 100644
index b357b8f7..00000000
--- a/GudhUI/CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-project(GudhUI)
-
-# Need to find OpenGL first as find_package(Qt5) tries to #include"GL/gl.h" on some platforms
-find_package(OpenGL)
-
-if (OPENGL_FOUND)
- find_package(Qt5 COMPONENTS Widgets Xml OpenGL)
- find_package(QGLViewer)
-
- if ( CGAL_FOUND AND Qt5_FOUND AND QGLVIEWER_FOUND AND NOT CGAL_VERSION VERSION_EQUAL 4.8.0)
-
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
- SET(Boost_USE_STATIC_LIBS ON)
- SET(Boost_USE_MULTITHREAD OFF)
- include_directories (${QGLVIEWER_INCLUDE_DIR})
-
- add_executable ( GudhUI
- gui/gudhui.cpp
- gui/MainWindow.cpp
- gui/Menu_k_nearest_neighbors.cpp
- gui/Menu_uniform_neighbors.cpp
- gui/Menu_edge_contraction.cpp
- gui/Menu_persistence.cpp
- view/Viewer_instructor.cpp
- view/Viewer.cpp
- )
- target_link_libraries( GudhUI Qt5::Widgets Qt5::Xml Qt5::OpenGL )
- target_link_libraries( GudhUI ${QGLVIEWER_LIBRARIES} )
- target_link_libraries( GudhUI ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} )
- if (TBB_FOUND)
- target_link_libraries( GudhUI ${TBB_LIBRARIES})
- endif()
-
- install(TARGETS GudhUI DESTINATION bin)
-
- endif()
-endif(OPENGL_FOUND)
diff --git a/GudhUI/gui/KNearestNeighborsMenu.ui b/GudhUI/gui/KNearestNeighborsMenu.ui
deleted file mode 100644
index 472db48b..00000000
--- a/GudhUI/gui/KNearestNeighborsMenu.ui
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>KNearestNeighborsMenu</class>
- <widget class="QDialog" name="KNearestNeighborsMenu">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>298</width>
- <height>209</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>k-nearest neighbors</string>
- </property>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="geometry">
- <rect>
- <x>50</x>
- <y>160</y>
- <width>171</width>
- <height>32</height>
- </rect>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- <widget class="QWidget" name="formLayoutWidget">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>10</y>
- <width>229</width>
- <height>84</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>k </string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="spinBoxK">
- <property name="maximum">
- <number>10000000</number>
- </property>
- <property name="value">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Metric</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="comboBoxMetric">
- <item>
- <property name="text">
- <string>Ambient</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Reduced Space</string>
- </property>
- </item>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="gridLayoutWidget">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>110</y>
- <width>250</width>
- <height>40</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="1">
- <widget class="QPushButton" name="pushButtonCompute">
- <property name="text">
- <string>Compute</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QCheckBox" name="checkBoxAutoUpdate">
- <property name="text">
- <string>auto update</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>KNearestNeighborsMenu</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>KNearestNeighborsMenu</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/GudhUI/gui/MainWindow.cpp b/GudhUI/gui/MainWindow.cpp
deleted file mode 100644
index b11b80e9..00000000
--- a/GudhUI/gui/MainWindow.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- */
-
-#include "MainWindow.h"
-
-#include <QWidget>
-#include <QInputDialog>
-#include <QFileDialog>
-
-#include <fenv.h>
-
-#include "gui/Menu_k_nearest_neighbors.h"
-#include "gui/Menu_uniform_neighbors.h"
-#include "gui/Menu_edge_contraction.h"
-#include "gui/Menu_persistence.h"
-
-MainWindow::MainWindow(QWidget* parent) :
- menu_k_nearest_neighbors_(new Menu_k_nearest_neighbors(this)),
- menu_uniform_neighbors_(new Menu_uniform_neighbors(this)),
- menu_edge_contraction_(new Menu_edge_contraction(this, model_)),
- menu_persistence_(new Menu_persistence(this)) {
- // #ifndef NDEBUG // catch nan
- // feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
- // #endif
-
- setupUi(this);
-
- viewer_instructor_ = new Viewer_instructor(
- this,
- this->viewer,
- model_.complex_);
-
- connectActions();
-
- update_view();
-}
-
-void
-MainWindow::closeEvent(QCloseEvent *event) {
- exit(0);
-}
-
-void
-MainWindow::connectActions() {
- QObject::connect(this->actionLoad_complex, SIGNAL(triggered()), this,
- SLOT(off_file_open()));
- QObject::connect(this->actionLoad_points, SIGNAL(triggered()), this,
- SLOT(off_points_open()));
- QObject::connect(this->actionSave_complex, SIGNAL(triggered()), this,
- SLOT(off_file_save()));
- QObject::connect(this->actionSave_points, SIGNAL(triggered()), this,
- SLOT(off_points_save()));
-
- QObject::connect(this->actionShow_graph_stats, SIGNAL(triggered()), this,
- SLOT(show_graph_stats()));
- QObject::connect(this->actionShow_complex_stats, SIGNAL(triggered()), this,
- SLOT(show_complex_stats()));
- QObject::connect(this->actionShow_complex_dimension, SIGNAL(triggered()), this,
- SLOT(show_complex_dimension()));
-
- QObject::connect(this->actionUniform_proximity_graph, SIGNAL(triggered()), this,
- SLOT(build_rips_menu()));
- QObject::connect(this->actionK_nearest_neighbors_graph, SIGNAL(triggered()), this,
- SLOT(build_k_nearest_neighbors_menu()));
-
-
- QObject::connect(this->actionContract_edges, SIGNAL(triggered()), this,
- SLOT(contract_edge_menu()));
-
- QObject::connect(this->actionCollapse_vertices, SIGNAL(triggered()), this,
- SLOT(collapse_vertices()));
-
- QObject::connect(this->actionCollapse_edges, SIGNAL(triggered()), this,
- SLOT(collapse_edges()));
-
- QObject::connect(this->actionNoise, SIGNAL(triggered()), this,
- SLOT(uniform_noise()));
- QObject::connect(this->actionLloyd, SIGNAL(triggered()), this,
- SLOT(lloyd()));
-
-
- // view
- QObject::connect(this->actionPoints, SIGNAL(triggered()), this->viewer_instructor_,
- SLOT(change_draw_vertices()));
- QObject::connect(this->actionEdges, SIGNAL(triggered()), this->viewer_instructor_,
- SLOT(change_draw_edges()));
- QObject::connect(this->actionTriangles, SIGNAL(triggered()), this->viewer_instructor_,
- SLOT(change_draw_triangles()));
-
- // topology
- QObject::connect(this->actionShow_homology_group, SIGNAL(triggered()), this,
- SLOT(show_homology_group()));
- QObject::connect(this->actionEuler_characteristic, SIGNAL(triggered()), this,
- SLOT(show_euler_characteristic()));
- QObject::connect(this->actionPersistence, SIGNAL(triggered()), this,
- SLOT(persistence_menu()));
- QObject::connect(this->actionEstimate_topological_changes, SIGNAL(triggered()), this,
- SLOT(critical_points_menu()));
- QObject::connect(this->actionIs_manifold, SIGNAL(triggered()), this,
- SLOT(is_manifold_menu()));
-
-
- QObject::connect(this, SIGNAL(sceneChanged()), this->viewer_instructor_,
- SLOT(sceneChanged()));
-}
-
-void
-MainWindow::init_view() const {
- viewer_instructor_->initialize_bounding_box();
- viewer_instructor_->show_entire_scene();
- update_view();
-}
-
-void
-MainWindow::update_view() const {
- emit(sceneChanged());
-}
-
-/**
- * open a file chooser to choose an off to load
- */
-void
-MainWindow::off_file_open() {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open off File"),
- "~/", tr("off files (*.off)"));
- if (!fileName.isEmpty()) {
- model_.off_file_open(fileName.toStdString());
- init_view();
- }
-}
-
-void
-MainWindow::off_points_open() {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open points in a off file"),
- "~/", tr("off files (*.off)"));
- if (!fileName.isEmpty()) {
- model_.off_points_open(fileName.toStdString());
- init_view();
- }
-}
-
-/**
- * open a file chooser to choose an off to save
- */
-void
-MainWindow::off_file_save() {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Save to off File"),
- "~/", tr("off files (*.off)"));
- if (!fileName.isEmpty()) {
- model_.off_file_save(fileName.toStdString());
- }
-}
-
-/**
- * open a file chooser to choose an off to save
- */
-void
-MainWindow::off_points_save() {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Save to off File"),
- "~/", tr("off files (*.off)"));
- if (!fileName.isEmpty()) {
- model_.off_points_save(fileName.toStdString());
- }
-}
-
-void
-MainWindow::show_graph_stats() {
- model_.show_graph_stats();
-}
-
-void
-MainWindow::show_complex_stats() {
- model_.show_complex_stats();
-}
-
-void
-MainWindow::show_complex_dimension() {
- model_.show_complex_dimension();
-}
-
-void
-MainWindow::build_rips_menu() {
- menu_uniform_neighbors_->show();
-}
-
-void
-MainWindow::build_rips(double alpha) {
- model_.build_rips(alpha);
- update_view();
-}
-
-void
-MainWindow::build_k_nearest_neighbors_menu() {
- menu_k_nearest_neighbors_->show();
-}
-
-void
-MainWindow::build_k_nearest_neighbors(unsigned k) {
- model_.build_k_nearest_neighbors(k);
- update_view();
-}
-
-void
-MainWindow::contract_edge_menu() {
- menu_edge_contraction_->show();
-}
-
-void
-MainWindow::contract_edges(unsigned num_collapses) {
- std::cerr << "Collapse " << num_collapses << " vertices\n";
- model_.contract_edges(num_collapses);
- update_view();
-}
-
-void
-MainWindow::collapse_edges() {
- model_.collapse_edges(model_.num_edges());
- update_view();
-}
-
-void
-MainWindow::collapse_vertices() {
- std::cerr << "Collapse vertices edges\n";
- model_.collapse_vertices(0);
- update_view();
-}
-
-void
-MainWindow::uniform_noise() {
- bool ok;
- double amplitude = QInputDialog::getDouble(this, tr("Uniform noise"),
- tr("Amplitude:"), 0, 0, 10000, 3, &ok);
- srand(time(NULL));
- if (ok)
- model_.uniform_noise(amplitude);
-}
-
-void
-MainWindow::lloyd() {
- // todo 1 ask lloyd parameters
- model_.lloyd(0, 0);
- update_view();
-}
-
-void
-MainWindow::show_homology_group() {
- model_.show_homology_group();
-}
-
-void
-MainWindow::show_euler_characteristic() {
- model_.show_euler_characteristic();
-}
-
-void
-MainWindow::persistence_menu() {
- menu_persistence_->show();
-}
-
-void
-MainWindow::compute_persistence(int p, double threshold, int max_dim, double min_pers) {
- model_.show_persistence(p, threshold, max_dim, min_pers);
-}
-
-void
-MainWindow::critical_points_menu() {
- bool ok;
- double max_length = QInputDialog::getDouble(this, tr("Maximal edge length for the Rips"),
- tr("Maximal edge length:"), 0, 0, 10000, 3, &ok);
- if (ok)
- model_.show_critical_points(max_length);
-}
-
-void
-MainWindow::is_manifold_menu() {
- model_.show_is_manifold();
-}
-
-
-#include "MainWindow.moc"
diff --git a/GudhUI/gui/MainWindow.h b/GudhUI/gui/MainWindow.h
deleted file mode 100644
index 6076c2ee..00000000
--- a/GudhUI/gui/MainWindow.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MAINWINDOW_H_
-#define GUI_MAINWINDOW_H_
-
-// Workaround https://svn.boost.org/trac/boost/ticket/12534
-#include <boost/container/flat_map.hpp>
-
-#include <QMainWindow>
-#include "ui_main_window.h"
-#include "model/Model.h"
-#include "view/Viewer_instructor.h"
-
-
-class Menu_k_nearest_neighbors;
-class Menu_uniform_neighbors;
-class Menu_edge_contraction;
-class Menu_persistence;
-
-class MainWindow : public QMainWindow, public Ui::MainWindow {
- Q_OBJECT
-
- private:
- Model model_;
- Viewer_instructor* viewer_instructor_;
- Menu_k_nearest_neighbors* menu_k_nearest_neighbors_;
- Menu_uniform_neighbors* menu_uniform_neighbors_;
- Menu_edge_contraction* menu_edge_contraction_;
- Menu_persistence* menu_persistence_;
-
- public:
- MainWindow(QWidget* parent = 0);
- void connectActions();
-
- /**
- * compute the bounding box and calls update view
- */
- void init_view() const;
- void update_view() const;
-
-
- protected:
- void closeEvent(QCloseEvent *event);
-
- void keyPressEvent(QKeyEvent *event) { }
-
- public:
- public slots:
- /**
- * open a file chooser to choose an off to load
- */
- void off_file_open();
-
- void off_points_open();
-
- /**
- * open a file chooser to choose an off to save
- */
- void off_file_save();
- void off_points_save();
-
- void show_graph_stats();
- void show_complex_stats();
- void show_complex_dimension();
-
-
- void build_rips_menu();
- void build_rips(double alpha);
- void build_k_nearest_neighbors_menu();
- void build_k_nearest_neighbors(unsigned k);
-
-
- void contract_edge_menu();
- void contract_edges(unsigned num_collapses);
-
-
- void collapse_vertices();
- void collapse_edges();
-
-
- void uniform_noise();
- void lloyd();
-
- void show_homology_group();
- void show_euler_characteristic();
- void persistence_menu();
- void compute_persistence(int p, double threshold, int max_dim, double min_pers);
- void critical_points_menu();
- void is_manifold_menu();
-
-
- public:
- signals:
- void sceneChanged() const;
-};
-
-
-#endif // GUI_MAINWINDOW_H_
diff --git a/GudhUI/gui/MenuEdgeContraction.ui b/GudhUI/gui/MenuEdgeContraction.ui
deleted file mode 100644
index b1696431..00000000
--- a/GudhUI/gui/MenuEdgeContraction.ui
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MenuEdgeContraction</class>
- <widget class="QDialog" name="MenuEdgeContraction">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>362</width>
- <height>209</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Edge contraction</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="5" column="2">
- <widget class="QSpinBox" name="spinBox_nb_remaining_vertices">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>999999999</number>
- </property>
- <property name="value">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="7" column="2">
- <widget class="QCheckBox" name="checkBox_link_condition">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Link condition</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="2" alignment="Qt::AlignRight">
- <widget class="QLabel" name="txt_nb_collapses">
- <property name="text">
- <string>1</string>
- </property>
- </widget>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Policy</string>
- </property>
- </widget>
- </item>
- <item row="6" column="2">
- <widget class="QComboBox" name="m_simplificationMethod">
- <item>
- <property name="text">
- <string>Length_midpoint</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="2" column="2" alignment="Qt::AlignRight">
- <widget class="QLabel" name="txt_nb_vertices">
- <property name="text">
- <string>0</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Number of vertices</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Number of contractions</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Number of vertices after </string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QSlider" name="horizontalSlider">
- <property name="minimum">
- <number>0</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QPushButton" name="pushButton_collapse">
- <property name="text">
- <string>Perform collapse</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/GudhUI/gui/Menu_edge_contraction.cpp b/GudhUI/gui/Menu_edge_contraction.cpp
deleted file mode 100644
index 041bdf9e..00000000
--- a/GudhUI/gui/Menu_edge_contraction.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MENU_EDGE_CONTRACTION_CPP_
-#define GUI_MENU_EDGE_CONTRACTION_CPP_
-
-#include "Menu_edge_contraction.h"
-
-Menu_edge_contraction::Menu_edge_contraction(MainWindow* parent, const Model& model) :
- parent_(parent), model_(model) {
- setupUi(this);
- connectActions(parent_);
-}
-
-void Menu_edge_contraction::connectActions(MainWindow* parent) {
- QObject::connect(
- this->horizontalSlider,
- SIGNAL(valueChanged(int)),
- this,
- SLOT(slider_value_changed(int)));
-
-
- QObject::connect(this, SIGNAL(contract_edges(unsigned)), parent, SLOT(contract_edges(unsigned)));
-
- QObject::connect(this->pushButton_collapse, SIGNAL(clicked()), this, SLOT(send_contract_edges()));
-}
-
-void Menu_edge_contraction::slider_value_changed(int new_slider_value) {
- int num_collapses =
- (horizontalSlider->value() == 1) ? 1 : horizontalSlider->value() * model_.num_vertices() / 100;
- this->txt_nb_vertices->setNum(static_cast<int>(model_.num_vertices()));
- this->txt_nb_collapses->setNum(num_collapses);
- this->spinBox_nb_remaining_vertices->setValue(model_.num_vertices() - num_collapses);
-}
-
-void
-Menu_edge_contraction::update_slider_value() {
- int num_vertices = model_.num_vertices();
- int num_collapses = (horizontalSlider->value() == 1) ? 1 : horizontalSlider->value() * num_vertices / 100;
- int horizontal_slider_position = num_vertices > 0 ? num_collapses / static_cast<double>(num_vertices * 100) : 1;
- horizontalSlider->setValue(horizontal_slider_position);
-}
-
-void
-Menu_edge_contraction::update_gui_numbers() {
- update_slider_value();
- bool ok;
- int num_collapses = this->txt_nb_collapses->text().toInt(&ok, 10);
- if (!ok) return;
- this->txt_nb_vertices->setNum(static_cast<int>(model_.num_vertices()));
- this->txt_nb_collapses->setNum(num_collapses);
- this->spinBox_nb_remaining_vertices->setValue(model_.num_vertices() - num_collapses);
-}
-
-void
-Menu_edge_contraction::update_gui_numbers(int new_value) {
- update_gui_numbers();
-}
-
-void
-Menu_edge_contraction::send_contract_edges() {
- emit(contract_edges(num_collapses()));
- update_gui_numbers();
-}
-
-unsigned
-Menu_edge_contraction::num_vertices() {
- return model_.num_vertices();
-}
-
-unsigned
-Menu_edge_contraction::num_collapses() {
- return (horizontalSlider->value() == 1) ? 1 : horizontalSlider->value() * num_vertices() / 100;
-}
-
-#include "Menu_edge_contraction.moc"
-
-#endif // GUI_MENU_EDGE_CONTRACTION_CPP_
diff --git a/GudhUI/gui/Menu_edge_contraction.h b/GudhUI/gui/Menu_edge_contraction.h
deleted file mode 100644
index 0ef7b267..00000000
--- a/GudhUI/gui/Menu_edge_contraction.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MENU_EDGE_CONTRACTION_H_
-#define GUI_MENU_EDGE_CONTRACTION_H_
-
-#include "gui/MainWindow.h"
-#include "ui_MenuEdgeContraction.h"
-
-#include "model/Model.h"
-
-class Menu_edge_contraction : public QDialog, public Ui::MenuEdgeContraction {
- Q_OBJECT
-
- private:
- MainWindow* parent_;
- const Model& model_;
-
- void update_slider_value();
-
- public:
- Menu_edge_contraction(MainWindow* parent, const Model& model);
-
- void connectActions(MainWindow* parent);
-
- private:
- unsigned num_vertices();
- unsigned num_collapses();
-
- public slots:
- void slider_value_changed(int new_slider_value);
- void update_gui_numbers();
- void update_gui_numbers(int gui_numbers);
-
- void send_contract_edges();
-
- signals:
- void contract_edges(unsigned num_collapses);
-};
-
-#endif // GUI_MENU_EDGE_CONTRACTION_H_
diff --git a/GudhUI/gui/Menu_k_nearest_neighbors.cpp b/GudhUI/gui/Menu_k_nearest_neighbors.cpp
deleted file mode 100644
index b1ad15c8..00000000
--- a/GudhUI/gui/Menu_k_nearest_neighbors.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- */
-
-#include "Menu_k_nearest_neighbors.h"
-
-Menu_k_nearest_neighbors::Menu_k_nearest_neighbors(QMainWindow* parent_)
- : parent(parent_) {
- setupUi(this);
- connectActions(parent_);
-}
-
-void Menu_k_nearest_neighbors::connectActions(QMainWindow* parent) {
- QObject::connect(this->pushButtonCompute,
- SIGNAL(clicked()),
- this,
- SLOT(send_compute_k_nearest_neighbors()));
- QObject::connect(this->spinBoxK,
- SIGNAL(valueChanged(int)),
- this,
- SLOT(update_k(int)));
- QObject::connect(this,
- SIGNAL(compute_k_nearest_neighbors(unsigned)),
- parent,
- SLOT(build_k_nearest_neighbors(unsigned)));
-}
-
-void Menu_k_nearest_neighbors::send_compute_k_nearest_neighbors() {
- emit(compute_k_nearest_neighbors((unsigned) spinBoxK->value()));
-}
-
-void Menu_k_nearest_neighbors::accept() {
- send_compute_k_nearest_neighbors();
-}
-
-void Menu_k_nearest_neighbors::update_k(int new_k_value) {
- if (checkBoxAutoUpdate->isChecked())
- emit(compute_k_nearest_neighbors((unsigned) spinBoxK->value()));
-}
-
-#include "Menu_k_nearest_neighbors.moc"
diff --git a/GudhUI/gui/Menu_k_nearest_neighbors.h b/GudhUI/gui/Menu_k_nearest_neighbors.h
deleted file mode 100644
index 56b5b63d..00000000
--- a/GudhUI/gui/Menu_k_nearest_neighbors.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MENU_K_NEAREST_NEIGHBORS_H_
-#define GUI_MENU_K_NEAREST_NEIGHBORS_H_
-
-#include <QMainWindow>
-#include "ui_KNearestNeighborsMenu.h"
-
-class QWidget;
-
-class Menu_k_nearest_neighbors : public QDialog, public Ui::KNearestNeighborsMenu {
- Q_OBJECT
-
- private:
- QMainWindow* parent;
-
- public:
- Menu_k_nearest_neighbors(QMainWindow* parent_);
-
- void connectActions(QMainWindow* parent);
-
- public slots:
- void send_compute_k_nearest_neighbors();
- void update_k(int k);
- void accept();
-
- signals:
- void compute_k_nearest_neighbors(unsigned k);
-};
-
-#endif // GUI_MENU_K_NEAREST_NEIGHBORS_H_
diff --git a/GudhUI/gui/Menu_persistence.cpp b/GudhUI/gui/Menu_persistence.cpp
deleted file mode 100644
index ec990559..00000000
--- a/GudhUI/gui/Menu_persistence.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-
-#include "Menu_persistence.h"
-
-Menu_persistence::Menu_persistence(QMainWindow* parent_) : parent(parent_) {
- setupUi(this);
- connectActions(parent_);
-}
-
-void Menu_persistence::connectActions(QMainWindow* parent) {
- QObject::connect(this,
- SIGNAL(compute_persistence(int, double, int, double)),
- parent,
- SLOT(compute_persistence(int, double, int, double)));
-}
-
-void Menu_persistence::send_compute_persistence() {
- emit(compute_persistence(p_spinBox->value(), threshold_doubleSpinBox->value(),
- maxdimension_spinBox->value(), minpersistence_doubleSpinBox->value()));
-}
-
-void Menu_persistence::accept() {
- send_compute_persistence();
-}
-
-// void Menu_persistence::compute_persistence(int p_fied,double threshold,int dim_max,double min_persistence) {
-// if(checkBoxAutoUpdate->isChecked())
-// emit(compute_k_nearest_neighbors((unsigned)spinBoxK->value()));
-// }
-
-#include "Menu_persistence.moc"
diff --git a/GudhUI/gui/Menu_persistence.h b/GudhUI/gui/Menu_persistence.h
deleted file mode 100644
index 32f0c5ca..00000000
--- a/GudhUI/gui/Menu_persistence.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MENU_PERSISTENCE_H_
-#define GUI_MENU_PERSISTENCE_H_
-
-#include <QMainWindow>
-#include "ui_PersistenceMenu.h"
-
-class QWidget;
-
-class Menu_persistence : public QDialog, public Ui::PersistenceMenu {
- Q_OBJECT
-
- private:
- QMainWindow* parent;
-
- public:
- Menu_persistence(QMainWindow* parent_);
-
- void connectActions(QMainWindow* parent);
-
- public slots:
- void send_compute_persistence();
- void accept();
-
- signals:
- void compute_persistence(int p_fied, double threshold, int dim_max, double min_persistence);
-};
-
-#endif // GUI_MENU_PERSISTENCE_H_
diff --git a/GudhUI/gui/Menu_uniform_neighbors.cpp b/GudhUI/gui/Menu_uniform_neighbors.cpp
deleted file mode 100644
index 7f392b6c..00000000
--- a/GudhUI/gui/Menu_uniform_neighbors.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-#include "Menu_uniform_neighbors.h"
-
-Menu_uniform_neighbors::Menu_uniform_neighbors(QMainWindow* parent_) :
- parent(parent_) {
- setupUi(this);
- connectActions(parent_);
-}
-
-void Menu_uniform_neighbors::connectActions(QMainWindow* parent) {
- QObject::connect(this->pushButtonCompute,
- SIGNAL(clicked()),
- this,
- SLOT(send_compute_uniform_neighbors()));
- QObject::connect(this->doubleSpinBoxAlpha,
- SIGNAL(valueChanged(double)),
- this,
- SLOT(update_alpha(double)));
- QObject::connect(this,
- SIGNAL(compute_uniform_neighbors(double)),
- parent,
- SLOT(build_rips(double)));
-}
-
-void Menu_uniform_neighbors::send_compute_uniform_neighbors() {
- emit(compute_uniform_neighbors(doubleSpinBoxAlpha->value()));
-}
-
-void Menu_uniform_neighbors::accept() {
- send_compute_uniform_neighbors();
-}
-
-void Menu_uniform_neighbors::update_alpha(double alpha) {
- if (checkBoxAutoUpdate->isChecked())
- emit(compute_uniform_neighbors(doubleSpinBoxAlpha->value()));
-}
-
-#include "Menu_uniform_neighbors.moc"
diff --git a/GudhUI/gui/Menu_uniform_neighbors.h b/GudhUI/gui/Menu_uniform_neighbors.h
deleted file mode 100644
index 88a3823b..00000000
--- a/GudhUI/gui/Menu_uniform_neighbors.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 GUI_MENU_UNIFORM_NEIGHBORS_H_
-#define GUI_MENU_UNIFORM_NEIGHBORS_H_
-
-#include <QMainWindow>
-#include "ui_UniformNeighborsMenu.h"
-
-class Menu_uniform_neighbors : public QDialog, public Ui::UniformMenu {
- Q_OBJECT
-
- private:
- QMainWindow* parent;
-
- public:
- Menu_uniform_neighbors(QMainWindow* parent_);
-
- void connectActions(QMainWindow* parent);
-
- public slots:
- void send_compute_uniform_neighbors();
- void update_alpha(double alpha);
- void accept();
-
- signals:
- void compute_uniform_neighbors(double alpha);
-};
-
-
-#endif // GUI_MENU_UNIFORM_NEIGHBORS_H_
diff --git a/GudhUI/gui/PersistenceMenu.ui b/GudhUI/gui/PersistenceMenu.ui
deleted file mode 100644
index 29327db2..00000000
--- a/GudhUI/gui/PersistenceMenu.ui
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PersistenceMenu</class>
- <widget class="QDialog" name="PersistenceMenu">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>354</width>
- <height>275</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Point cloud persistence</string>
- </property>
- <widget class="QWidget" name="">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>23</y>
- <width>318</width>
- <height>226</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QSpinBox" name="p_spinBox">
- <property name="minimum">
- <number>2</number>
- </property>
- <property name="value">
- <number>2</number>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Coefficient Z/pZ</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QSpinBox" name="maxdimension_spinBox">
- <property name="maximum">
- <number>9999</number>
- </property>
- <property name="value">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Max dimension</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QDoubleSpinBox" name="threshold_doubleSpinBox">
- <property name="maximum">
- <double>9999.000000000000000</double>
- </property>
- <property name="value">
- <double>1.000000000000000</double>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Max Rips offset</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QDoubleSpinBox" name="minpersistence_doubleSpinBox"/>
- </item>
- <item row="3" column="1">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Minimum Persistence</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>PersistenceMenu</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>PersistenceMenu</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/GudhUI/gui/UniformNeighborsMenu.ui b/GudhUI/gui/UniformNeighborsMenu.ui
deleted file mode 100644
index f8ef7a24..00000000
--- a/GudhUI/gui/UniformNeighborsMenu.ui
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UniformMenu</class>
- <widget class="QDialog" name="UniformMenu">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>292</width>
- <height>209</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Uniform neighbors (Rips)</string>
- </property>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="geometry">
- <rect>
- <x>50</x>
- <y>160</y>
- <width>171</width>
- <height>32</height>
- </rect>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- <widget class="QWidget" name="formLayoutWidget">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>10</y>
- <width>262</width>
- <height>84</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>alpha</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Metric</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="comboBoxMetric">
- <item>
- <property name="text">
- <string>Ambient</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Reduced Space</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QDoubleSpinBox" name="doubleSpinBoxAlpha">
- <property name="decimals">
- <number>3</number>
- </property>
- <property name="maximum">
- <double>100000000.000000000000000</double>
- </property>
- <property name="singleStep">
- <double>0.100000000000000</double>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="gridLayoutWidget">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>110</y>
- <width>250</width>
- <height>40</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="1">
- <widget class="QPushButton" name="pushButtonCompute">
- <property name="text">
- <string>Compute</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QCheckBox" name="checkBoxAutoUpdate">
- <property name="text">
- <string>auto update</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>UniformMenu</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>UniformMenu</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/GudhUI/gui/gudhui.cpp b/GudhUI/gui/gudhui.cpp
deleted file mode 100644
index 2a100fd5..00000000
--- a/GudhUI/gui/gudhui.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-#include "MainWindow.h"
-#include <QApplication>
-#include <CGAL/Qt/resources.h>
-
-int main(int argc, char** argv) {
- QApplication application(argc, argv);
- application.setOrganizationDomain("inria.fr");
- application.setOrganizationName("Inria");
- application.setApplicationName("GudhUI");
-
- MainWindow mw;
- application.setQuitOnLastWindowClosed(false);
- mw.show();
- return application.exec();
-}
diff --git a/GudhUI/gui/main_window.ui b/GudhUI/gui/main_window.ui
deleted file mode 100644
index 312480b6..00000000
--- a/GudhUI/gui/main_window.ui
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MainWindow</class>
- <widget class="QMainWindow" name="MainWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>861</width>
- <height>880</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>GudhUI</string>
- </property>
- <property name="tabShape">
- <enum>QTabWidget::Rounded</enum>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="Viewer" name="viewer" native="true">
- <property name="autoFillBackground">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>861</width>
- <height>34</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>File</string>
- </property>
- <addaction name="actionLoad_points"/>
- <addaction name="actionLoad_complex"/>
- <addaction name="actionSave_points"/>
- <addaction name="actionSave_complex"/>
- </widget>
- <widget class="QMenu" name="menuPoints">
- <property name="title">
- <string>Points</string>
- </property>
- <addaction name="actionNoise"/>
- </widget>
- <widget class="QMenu" name="menuGraph">
- <property name="title">
- <string>Graph</string>
- </property>
- <addaction name="actionK_nearest_neighbors_graph"/>
- <addaction name="actionUniform_proximity_graph"/>
- <addaction name="actionShow_graph_stats"/>
- </widget>
- <widget class="QMenu" name="menuComplex">
- <property name="title">
- <string>Complex</string>
- </property>
- <addaction name="actionContract_edges"/>
- <addaction name="actionCollapse_vertices"/>
- <addaction name="actionCollapse_edges"/>
- <addaction name="actionShow_complex_stats"/>
- <addaction name="actionShow_complex_dimension"/>
- </widget>
- <widget class="QMenu" name="menuView">
- <property name="title">
- <string>View</string>
- </property>
- <addaction name="actionPoints"/>
- <addaction name="actionEdges"/>
- <addaction name="actionTriangles"/>
- <addaction name="actionChange_projection"/>
- </widget>
- <widget class="QMenu" name="menuTopology">
- <property name="title">
- <string>Topology</string>
- </property>
- <addaction name="actionEuler_characteristic"/>
- <addaction name="actionShow_homology_group"/>
- <addaction name="actionPersistence"/>
- <addaction name="actionEstimate_topological_changes"/>
- <addaction name="actionIs_manifold"/>
- </widget>
- <addaction name="menuFile"/>
- <addaction name="menuPoints"/>
- <addaction name="menuGraph"/>
- <addaction name="menuComplex"/>
- <addaction name="menuTopology"/>
- <addaction name="menuView"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionLoad_points">
- <property name="text">
- <string>Load points</string>
- </property>
- </action>
- <action name="actionLoad_complex">
- <property name="text">
- <string>Load complex</string>
- </property>
- </action>
- <action name="actionSave_points">
- <property name="text">
- <string>Save points</string>
- </property>
- </action>
- <action name="actionSave_complex">
- <property name="text">
- <string>Save complex</string>
- </property>
- </action>
- <action name="actionNoise">
- <property name="text">
- <string>Noise</string>
- </property>
- </action>
- <action name="actionLloyd">
- <property name="text">
- <string>Lloyd</string>
- </property>
- </action>
- <action name="actionUniform_proximity_graph">
- <property name="text">
- <string>Uniform proximity graph</string>
- </property>
- </action>
- <action name="actionK_nearest_neighbors_graph">
- <property name="text">
- <string>k-nearest neighbors graph</string>
- </property>
- </action>
- <action name="actionShow_graph_stats">
- <property name="text">
- <string>Show graph stats</string>
- </property>
- </action>
- <action name="actionBuild_complex_from_graph">
- <property name="text">
- <string>Graph expansion</string>
- </property>
- </action>
- <action name="actionBuild_Delaunay_from_points">
- <property name="text">
- <string>Delaunay from points</string>
- </property>
- </action>
- <action name="actionContract_edges">
- <property name="text">
- <string>Contract edges</string>
- </property>
- </action>
- <action name="actionCollapse_vertices">
- <property name="text">
- <string>Collapse vertices</string>
- </property>
- </action>
- <action name="actionCollapse_edges">
- <property name="text">
- <string>Collapse edges</string>
- </property>
- </action>
- <action name="actionPoints">
- <property name="text">
- <string>Points</string>
- </property>
- </action>
- <action name="actionEdges">
- <property name="text">
- <string>Edges</string>
- </property>
- </action>
- <action name="actionTriangles">
- <property name="text">
- <string>Triangles</string>
- </property>
- </action>
- <action name="actionChange_projection">
- <property name="text">
- <string>Change projection</string>
- </property>
- </action>
- <action name="actionShow_complex_stats">
- <property name="text">
- <string>Show complex stats</string>
- </property>
- </action>
- <action name="actionShow_complex_dimension">
- <property name="text">
- <string>Show complex dimension</string>
- </property>
- </action>
- <action name="actionShow_homology_group">
- <property name="text">
- <string>Homology groups</string>
- </property>
- </action>
- <action name="actionPersistence">
- <property name="text">
- <string>Point cloud persistence</string>
- </property>
- </action>
- <action name="actionEuler_characteristic">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Euler characteristic</string>
- </property>
- <property name="visible">
- <bool>true</bool>
- </property>
- </action>
- <action name="actionHomology_groups">
- <property name="text">
- <string>Homology groups</string>
- </property>
- </action>
- <action name="actionEstimate_topological_changes">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Rips critical points approximation</string>
- </property>
- <property name="visible">
- <bool>false</bool>
- </property>
- </action>
- <action name="actionIs_manifold">
- <property name="text">
- <string>Is manifold</string>
- </property>
- </action>
- </widget>
- <customwidgets>
- <customwidget>
- <class>Viewer</class>
- <extends>QWidget</extends>
- <header>view/Viewer.h</header>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/GudhUI/model/Complex_typedefs.h b/GudhUI/model/Complex_typedefs.h
deleted file mode 100644
index 347db1e3..00000000
--- a/GudhUI/model/Complex_typedefs.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 MODEL_COMPLEX_TYPEDEFS_H_
-#define MODEL_COMPLEX_TYPEDEFS_H_
-
-#include <gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h>
-#include <gudhi/Skeleton_blocker_geometric_complex.h>
-
-#include <CGAL/Kernel_d/Point_d.h>
-#include <CGAL/Cartesian.h>
-#include <CGAL/Cartesian_d.h>
-
-struct Geometry_trait : public CGAL::Cartesian_d<double> {
- typedef CGAL::Cartesian<double>::Point_3 Point_3;
- typedef CGAL::Cartesian<double>::Vector_3 Vector_3;
- typedef CGAL::Point_d<Cartesian_d<double>> Point;
- typedef CGAL::Vector_d<Cartesian_d<double>> Vector;
-};
-
-typedef Geometry_trait::Point Point;
-
-using namespace Gudhi;
-using namespace Gudhi::skeleton_blocker;
-
-typedef Skeleton_blocker_simple_geometric_traits<Geometry_trait> Complex_geometric_traits;
-typedef Skeleton_blocker_geometric_complex< Complex_geometric_traits > Complex;
-
-#endif // MODEL_COMPLEX_TYPEDEFS_H_
diff --git a/GudhUI/model/Model.h b/GudhUI/model/Model.h
deleted file mode 100644
index 1d5cc087..00000000
--- a/GudhUI/model/Model.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 MODEL_MODEL_H_
-#define MODEL_MODEL_H_
-
-#include <gudhi/Clock.h>
-#include <gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h>
-#include <gudhi/Skeleton_blocker_geometric_complex.h>
-#include <gudhi/Off_reader.h>
-
-#include <CGAL/Euclidean_distance.h>
-
-#include <fstream>
-#include <limits>
-#include <string>
-#include <vector>
-
-#include "utils/UI_utils.h"
-#include "utils/Lloyd_builder.h"
-#include "utils/Rips_builder.h"
-#include "utils/K_nearest_builder.h"
-#include "utils/Vertex_collapsor.h"
-#include "utils/Edge_collapsor.h"
-#include "utils/Edge_contractor.h"
-#include "utils/Persistence_compute.h"
-#include "utils/Critical_points.h"
-#include "utils/Is_manifold.h"
-
-#include "Complex_typedefs.h"
-
-template<typename Complex>
-class CGAL_geometric_flag_complex_wrapper {
- Complex& complex_;
- typedef typename Complex::Vertex_handle Vertex_handle;
- typedef typename Complex::Point Point;
-
- const bool load_only_points_;
-
- public:
- CGAL_geometric_flag_complex_wrapper(Complex& complex, bool load_only_points = false) :
- complex_(complex),
- load_only_points_(load_only_points) { }
-
- void init(int dim, int num_vertices, int num_max_faces, int num_edges) const { }
-
- void point(const std::vector<double>& coords) {
- Point p(coords.size(), coords.begin(), coords.end());
- complex_.add_vertex(p);
- }
-
- void maximal_face(std::vector<int> vertices) {
- if (!load_only_points_) {
- // std::cout << "size:" << vertices.size() << std::endl;
- for (std::size_t i = 0; i < vertices.size(); ++i)
- for (std::size_t j = i + 1; j < vertices.size(); ++j)
- complex_.add_edge_without_blockers(Vertex_handle(vertices[i]), Vertex_handle(vertices[j]));
- }
- }
-
- void done() const { }
-};
-
-class Model {
- public:
- Complex complex_;
- typedef Complex::Vertex_handle Vertex_handle;
-
- Model() : complex_() { }
-
- public:
- void off_file_open(const std::string& name_file) {
- UIDBGMSG("load off file", name_file);
- complex_.clear();
- CGAL_geometric_flag_complex_wrapper<Complex> read_wraper(complex_, false);
- Gudhi::read_off(name_file, read_wraper);
- }
-
- void off_points_open(const std::string& name_file) {
- UIDBGMSG("load off points", name_file);
- complex_.clear();
- CGAL_geometric_flag_complex_wrapper<Complex> read_wraper(complex_, true);
- Gudhi::read_off(name_file, read_wraper);
- }
-
- void off_file_save(const std::string& name_file) {
- UIDBG("save off file");
- UIDBG("save off off_points_save");
- std::ofstream file(name_file);
- if (file.is_open()) {
- file << "OFF\n";
- file << complex_.num_vertices() << " " << complex_.num_edges() << " 0\n";
- for (auto v : complex_.vertex_range()) {
- const auto& pt(complex_.point(v));
- for (auto it = pt.cartesian_begin(); it != pt.cartesian_end(); ++it)
- file << *it << " ";
- file << std::endl;
- }
- for (auto e : complex_.edge_range())
- file << "2 " << complex_.first_vertex(e) << " " << complex_.second_vertex(e) << "\n";
- file.close();
- } else {
- std::cerr << "Could not open file " << name_file << std::endl;
- }
- }
-
- void off_points_save(const std::string& name_file) {
- UIDBG("save off off_points_save");
- std::ofstream file(name_file);
- if (file.is_open()) {
- file << "OFF\n";
- file << complex_.num_vertices() << " 0 0\n";
- for (auto v : complex_.vertex_range()) {
- const auto& pt(complex_.point(v));
- for (auto it = pt.cartesian_begin(); it != pt.cartesian_end(); ++it)
- file << *it << " ";
- file << std::endl;
- }
- file.close();
- } else {
- std::cerr << "Could not open file " << name_file << std::endl;
- }
- }
-
- // point sets operations
- void uniform_noise(double amplitude) {
- UIDBG("unif noise");
- for (auto v : complex_.vertex_range())
- complex_.point(v) = add_uniform_noise(complex_.point(v), amplitude);
- }
-
- private:
- Point add_uniform_noise(const Point& point, double amplitude) {
- std::vector<double> new_point(point.dimension());
- for (int i = 0; i < point.dimension(); ++i) {
- new_point[i] = point[i] + (rand() % 2 - .5) * amplitude;
- }
- return Point(point.dimension(), new_point.begin(), new_point.end());
- }
-
- public:
- void lloyd(int num_iterations, int num_closest_neighbors) {
- UIDBG("lloyd");
- Lloyd_builder<Complex> lloyd_builder(complex_, 1);
- }
-
- double squared_eucl_distance(const Point& p1, const Point& p2) const {
- return Geometry_trait::Squared_distance_d()(p1, p2);
- }
-
- // complex operations from points
-
- void build_rips(double alpha) {
- UIDBG("build_rips");
- Rips_builder<Complex> rips_builder(complex_, alpha);
- }
-
- void build_k_nearest_neighbors(unsigned k) {
- UIDBG("build_k_nearest");
- complex_.keep_only_vertices();
- K_nearest_builder<Complex> k_nearest_builder(complex_, k);
- }
-
- void build_delaunay() {
- UIDBG("build_delaunay");
- complex_.keep_only_vertices();
- }
-
- void contract_edges(unsigned num_contractions) {
- Gudhi::Clock c;
- Edge_contractor<Complex> contractor(complex_, num_contractions);
- std::cout << "Time to simplify: " << c.num_seconds() << "s" << std::endl;
- }
-
- void collapse_vertices(unsigned num_collapses) {
- auto old_num_vertices = complex_.num_vertices();
- Vertex_collapsor<Complex> collapsor(complex_, complex_.num_vertices());
- UIDBGMSG("num vertices collapsed:", old_num_vertices - complex_.num_vertices());
- }
-
- void collapse_edges(unsigned num_collapses) {
- Edge_collapsor<Complex> collapsor(complex_, num_collapses);
- }
-
- void show_graph_stats() {
- std::cout << "++++++ Graph stats +++++++" << std::endl;
- std::cout << "Num vertices : " << complex_.num_vertices() << std::endl;
- std::cout << "Num edges : " << complex_.num_edges() << std::endl;
- std::cout << "Num connected components : " << complex_.num_connected_components() << std::endl;
- std::cout << "Min/avg/max degree : " << min_degree() << "/" << avg_degree() << "/" << max_degree() << std::endl;
- std::cout << "Num connected components : " << complex_.num_connected_components() << std::endl;
- std::cout << "Num connected components : " << complex_.num_connected_components() << std::endl;
- std::cout << "+++++++++++++++++++++++++" << std::endl;
- }
-
- private:
- int min_degree() const {
- int res = (std::numeric_limits<int>::max)();
- for (auto v : complex_.vertex_range())
- res = (std::min)(res, complex_.degree(v));
- return res;
- }
-
- int max_degree() const {
- int res = 0;
- for (auto v : complex_.vertex_range())
- res = (std::max)(res, complex_.degree(v));
- return res;
- }
-
- int avg_degree() const {
- int res = 0;
- for (auto v : complex_.vertex_range())
- res += complex_.degree(v);
- return res / complex_.num_vertices();
- }
-
- public:
- void show_complex_stats() {
- std::cout << "++++++ Mesh stats +++++++" << std::endl;
- std::cout << "Num vertices : " << complex_.num_vertices() << std::endl;
- std::cout << "Num edges : " << complex_.num_edges() << std::endl;
- std::cout << "Num connected components : " << complex_.num_connected_components() << std::endl;
- std::cout << "+++++++++++++++++++++++++" << std::endl;
- }
-
- void show_complex_dimension() {
- unsigned num_simplices = 0;
- int euler = 0;
- int dimension = 0;
- Gudhi::Clock clock;
- for (const auto &s : complex_.complex_simplex_range()) {
- num_simplices++;
- dimension = (std::max)(s.dimension(), dimension);
- if (s.dimension() % 2 == 0)
- euler += 1;
- else
- euler -= 1;
- }
- clock.end();
- std::cout << "++++++ Mesh dimension +++++++" << std::endl;
- std::cout << "Dimension : " << dimension << std::endl;
- std::cout << "Euler characteristic : " << euler << std::endl;
- std::cout << "Num simplices : " << num_simplices << std::endl;
- std::cout << "Total time: " << clock << std::endl;
- std::cout << "Time per simplex: " << clock.num_seconds() / num_simplices << " s" << std::endl;
- std::cout << "+++++++++++++++++++++++++" << std::endl;
- }
-
- void show_homology_group() {
-#ifdef _WIN32
- std::cout << "Works only on linux x64 for the moment\n";
-#else
- Gudhi::Clock clock;
- run_chomp();
- clock.end();
-#endif
- }
-
- void show_euler_characteristic() {
- unsigned num_simplices = 0;
- int euler = 0;
- int dimension = 0;
- for (const auto &s : complex_.complex_simplex_range()) {
- num_simplices++;
- dimension = (std::max)(s.dimension(), dimension);
- if (s.dimension() % 2 == 0)
- euler += 1;
- else
- euler -= 1;
- }
- std::cout << "Saw " << num_simplices << " simplices with maximum dimension " << dimension << std::endl;
- std::cout << "The euler characteristic is : " << euler << std::endl;
- }
-
- void show_persistence(int p, double threshold, int max_dim, double min_pers) {
- Persistence_compute<Complex> persistence(complex_, std::cout, Persistence_params(p, threshold, max_dim, min_pers));
- }
-
- void show_critical_points(double max_distance) {
- Critical_points<Complex> critical_points(complex_, std::cout, max_distance);
- }
-
- void show_is_manifold() {
- unsigned dim;
- bool is_manifold;
- Is_manifold<Complex> test_manifold(complex_, dim, is_manifold);
-
- if (is_manifold) {
- std::cout << "The complex is a " << dim << "-manifold\n";
- } else {
- if (dim < 4) {
- std::cout << "The complex has dimension greater than " << dim << " and is not a manifold\n";
- } else {
- std::cout << "The complex has dimension>=4 and may or may not be a manifold\n";
- }
- }
- }
-
- private:
- void run_chomp() {
- save_complex_in_file_for_chomp();
- std::cout << "Call CHOMP library\n";
- int returnValue = system("utils/homsimpl chomp.sim");
- std::cout << "CHOMP returns" << returnValue << std::endl;
- }
-
- void save_complex_in_file_for_chomp() {
- std::ofstream file;
- file.open("chomp.sim");
- for (const auto &s : complex_.complex_simplex_range()) {
- bool first = true;
- file << "(";
- for (auto x : s) {
- if (first)
- first = false;
- else
- file << ",";
- file << x;
- }
- file << ")\n";
- }
- }
-
- public:
- unsigned num_vertices() const {
- return complex_.num_vertices();
- }
-
- unsigned num_edges() const {
- return complex_.num_edges();
- }
-};
-
-#endif // MODEL_MODEL_H_
diff --git a/GudhUI/todo.txt b/GudhUI/todo.txt
deleted file mode 100644
index 19d99a77..00000000
--- a/GudhUI/todo.txt
+++ /dev/null
@@ -1,22 +0,0 @@
--- general
-
-o bug avec kreanrest neighbors lorsqu on baisse k après contraction après collapse vertices
-
-o clarify visitor sk_bl
-
-
-
--- ui
-
-x points dimension arbitraire
-x contractions
-
-
-x faire le lien MainWindow - Model
-
-
-
-
--- bug
-x bug ordre contraction -> just that first vertex placement dont work great
-x pb construction rips
diff --git a/GudhUI/utils/Bar_code_persistence.h b/GudhUI/utils/Bar_code_persistence.h
deleted file mode 100644
index 49c87b3c..00000000
--- a/GudhUI/utils/Bar_code_persistence.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-#include <math.h> // isfinite
-
-#include <QtGui/QApplication>
-
-#include <QGraphicsView>
-#include <QGraphicsScene>
-#include <QPointF>
-#include <QVector>
-#include <QGraphicsTextItem>
-
-#include <iostream>
-#include <vector>
-#include <limits> // NaN, infinity
-#include <utility> // for pair
-#include <string>
-
-#ifndef UTILS_BAR_CODE_PERSISTENCE_H_
-#define UTILS_BAR_CODE_PERSISTENCE_H_
-
-class Bar_code_persistence {
- private:
- typedef std::vector<std::pair<double, double>> Persistence;
- Persistence persistence_vector;
- double min_birth;
- double max_death;
-
- public:
- Bar_code_persistence()
- : min_birth(std::numeric_limits<double>::quiet_NaN()),
- max_death(std::numeric_limits<double>::quiet_NaN()) { }
-
- void insert(double birth, double death) {
- persistence_vector.push_back(std::make_pair(birth, death));
- if (std::isfinite(birth)) {
- if ((birth < min_birth) || (std::isnan(min_birth)))
- min_birth = birth;
- if ((birth > max_death) || (std::isnan(max_death)))
- max_death = birth;
- }
- if (std::isfinite(death))
- if ((death > max_death) || (std::isnan(max_death)))
- max_death = death;
- }
-
- void show(const std::string& window_title) {
- // Create a view, put a scene in it
- QGraphicsView * view = new QGraphicsView();
- QGraphicsScene * scene = new QGraphicsScene();
- view->setScene(scene);
- double ratio = 600.0 / (max_death - min_birth);
- // std::cout << "min_birth=" << min_birth << " - max_death=" << max_death << " - ratio=" << ratio << std::endl;
-
- double height = 0.0, birth = 0.0, death = 0.0;
- int pers_num = 1;
- for (auto& persistence : persistence_vector) {
- height = 5.0 * pers_num;
- // std::cout << "[" << pers_num << "] birth=" << persistence.first << " - death=" << persistence.second << std::endl;
- if (std::isfinite(persistence.first))
- birth = ((persistence.first - min_birth) * ratio) + 50.0;
- else
- birth = 0.0;
-
- if (std::isfinite(persistence.second))
- death = ((persistence.second - min_birth) * ratio) + 50.0;
- else
- death = 700.0;
-
- scene->addLine(birth, height, death, height, QPen(Qt::blue, 2));
- pers_num++;
- }
- height += 10.0;
- // scale line
- scene->addLine(0, height, 700.0, height, QPen(Qt::black, 1));
- int modulo = 0;
- for (double scale = 50.0; scale < 700.0; scale += 50.0) {
- modulo++;
- // scale small dash
- scene->addLine(scale, height - 3.0, scale, height + 3.0, QPen(Qt::black, 1));
- // scale text
- QString scale_value = QString::number(((scale - 50.0) / ratio) + min_birth);
- QGraphicsTextItem* dimText = scene->addText(scale_value, QFont("Helvetica", 8));
- dimText->setPos(scale - (3.0 * scale_value.size()), height + 9.0 * (modulo % 2));
- }
- view->setWindowTitle(window_title.c_str());
- // Show the view
- view->show();
- }
-};
-
-#endif // UTILS_BAR_CODE_PERSISTENCE_H_
diff --git a/GudhUI/utils/Critical_points.h b/GudhUI/utils/Critical_points.h
deleted file mode 100644
index fbd690f8..00000000
--- a/GudhUI/utils/Critical_points.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_CRITICAL_POINTS_H_
-#define UTILS_CRITICAL_POINTS_H_
-
-#include <deque>
-#include <utility> // for pair<>
-#include <algorithm> // for sort
-
-#include "utils/Edge_contractor.h"
-
-/**
- * Iteratively tries to anticollapse smallest edge non added so far.
- * If its link is contractible then no topological change and else possible topological change.
- *
- * todo do a sparsification with some parameter eps while growing
- */
-template<typename SkBlComplex> class Critical_points {
- private:
- SkBlComplex filled_complex_;
- const SkBlComplex& input_complex_;
- double max_length_;
- std::ostream& stream_;
-
- public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
- typedef typename std::pair<Vertex_handle, Vertex_handle> Edge;
-
- /**
- * @brief check all pair of points with length smaller than max_length
- */
- Critical_points(const SkBlComplex& input_complex, std::ostream& stream, double max_length) :
- input_complex_(input_complex), max_length_(max_length), stream_(stream) {
- std::deque<Edge> edges;
- auto vertices = input_complex.vertex_range();
- for (auto p = vertices.begin(); p != vertices.end(); ++p) {
- filled_complex_.add_vertex(input_complex.point(*p));
- for (auto q = p; ++q != vertices.end(); /**/)
- if (squared_eucl_distance(input_complex.point(*p), input_complex.point(*q)) < max_length_ * max_length_)
- edges.emplace_back(*p, *q);
- }
-
- std::sort(edges.begin(), edges.end(),
- [&](Edge e1, Edge e2) {
- return squared_edge_length(e1) < squared_edge_length(e2);
- });
-
- anti_collapse_edges(edges);
- }
-
- private:
- double squared_eucl_distance(const Point& p1, const Point& p2) const {
- return Geometry_trait::Squared_distance_d()(p1, p2);
- }
-
- void anti_collapse_edges(const std::deque<Edge>& edges) {
- unsigned pos = 0;
- for (Edge e : edges) {
- std::cout << "edge " << pos++ << "/" << edges.size() << "\n";
- auto eh = filled_complex_.add_edge_without_blockers(e.first, e.second);
- int is_contractible(is_link_reducible(eh));
-
- switch (is_contractible) {
- case 0:
- stream_ << "alpha=" << std::sqrt(squared_edge_length(e)) << " topological change" << std::endl;
- break;
- case 2:
- stream_ << "alpha=" << std::sqrt(squared_edge_length(e)) << " maybe a topological change" << std::endl;
- break;
- default:
- break;
- }
- }
- }
-
- // 0 -> not
- // 1 -> yes
- // 2 -> maybe
-
- int is_link_reducible(Edge_handle e) {
- auto link = filled_complex_.link(e);
-
- if (link.empty())
- return 0;
-
- Edge_contractor<Complex> contractor(link, link.num_vertices() - 1);
- (void)contractor;
-
- if (link.num_connected_components() > 1)
- // one than more CC -> not contractible
- return 0;
-
- if (link.num_vertices() == 1)
- // reduced to one point -> contractible
- return 1;
- else
- // we dont know
- return 2;
- }
-
- double squared_edge_length(Edge_handle e) const {
- return squared_eucl_distance(input_complex_.point(input_complex_.first_vertex(e)),
- input_complex_.point(input_complex_.second_vertex(e)));
- }
-
- double squared_edge_length(Edge e) const {
- return squared_eucl_distance(input_complex_.point(e.first), input_complex_.point(e.second));
- }
-};
-
-#endif // UTILS_CRITICAL_POINTS_H_
diff --git a/GudhUI/utils/Edge_collapsor.h b/GudhUI/utils/Edge_collapsor.h
deleted file mode 100644
index b3cc7df7..00000000
--- a/GudhUI/utils/Edge_collapsor.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_EDGE_COLLAPSOR_H_
-#define UTILS_EDGE_COLLAPSOR_H_
-
-#include <list>
-#include "utils/Edge_contractor.h"
-#include "utils/UI_utils.h"
-
-/**
- * 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);
- }
-};
-
-#endif // UTILS_EDGE_COLLAPSOR_H_
diff --git a/GudhUI/utils/Edge_contractor.h b/GudhUI/utils/Edge_contractor.h
deleted file mode 100644
index 090baabe..00000000
--- a/GudhUI/utils/Edge_contractor.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_EDGE_CONTRACTOR_H_
-#define UTILS_EDGE_CONTRACTOR_H_
-
-
-#include <gudhi/Skeleton_blocker_contractor.h>
-#include <gudhi/Contraction/Edge_profile.h>
-#include <gudhi/Contraction/policies/Cost_policy.h>
-
-#include <vector>
-
-/**
- * Iteratively puts every vertex at the center of its neighbors
- */
-template<typename SkBlComplex> class Edge_contractor {
- private:
- SkBlComplex& complex_;
- unsigned num_contractions_;
-
- /**
- * @brief return a cost corresponding to the squared length of the edge
- */
- template< typename EdgeProfile> class Length_cost : public contraction::Cost_policy<EdgeProfile> {
- public:
- typedef typename contraction::Cost_policy<EdgeProfile>::Cost_type Cost_type;
- typedef typename EdgeProfile::Point Point;
-
- Cost_type operator()(const EdgeProfile& profile, const boost::optional<Point>& placement) const override {
- Cost_type res;
- if (!placement)
- return res;
- return Geometry_trait::Squared_distance_d()(profile.p0(), profile.p1()); // not working??
- }
- };
-
- /**
- * @brief return a cost corresponding to the squared length of the edge
- */
- template< typename EdgeProfile> class Middle_placement : public contraction::Placement_policy<EdgeProfile> {
- public:
- typedef typename contraction::Placement_policy<EdgeProfile>::Placement_type Placement_type;
- typedef typename EdgeProfile::Point Point;
-
- Placement_type operator()(const EdgeProfile& profile) const override {
- std::vector<double> mid_coords(profile.p0().dimension(), 0);
- for (int i = 0; i < profile.p0().dimension(); ++i) {
- mid_coords[i] = (profile.p0()[i] + profile.p1()[i]) / 2.;
- }
- return Point(profile.p0().dimension(), mid_coords.begin(), mid_coords.end());
- }
- };
-
- public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
-
- /**
- * @brief Modify complex to be the expansion of the k-nearest neighbor
- * symetric graph.
- */
- Edge_contractor(SkBlComplex& complex, unsigned num_contractions) :
- complex_(complex), num_contractions_(num_contractions) {
- typedef typename contraction::Edge_profile<Complex> Profile;
- num_contractions = (std::min)(static_cast<int>(num_contractions), static_cast<int>(complex_.num_vertices() - 1));
- typedef typename contraction::Skeleton_blocker_contractor<Complex> Contractor;
- Contractor contractor(complex_,
- new Length_cost<contraction::Edge_profile < Complex >> (),
- new Middle_placement<contraction::Edge_profile < Complex >> (),
- contraction::make_link_valid_contraction<Profile>(),
- contraction::make_remove_popable_blockers_visitor<Profile>());
- contractor.contract_edges(num_contractions);
- }
-};
-
-#endif // UTILS_EDGE_CONTRACTOR_H_
diff --git a/GudhUI/utils/Furthest_point_epsilon_net.h b/GudhUI/utils/Furthest_point_epsilon_net.h
deleted file mode 100644
index dbb6661c..00000000
--- a/GudhUI/utils/Furthest_point_epsilon_net.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_FURTHEST_POINT_EPSILON_NET_H_
-#define UTILS_FURTHEST_POINT_EPSILON_NET_H_
-
-#include <vector>
-#include <algorithm> // for sort
-
-#include "utils/UI_utils.h"
-
-/**
- * Computes an epsilon net with furthest point strategy.
- */
-template<typename SkBlComplex> class Furthest_point_epsilon_net {
- private:
- SkBlComplex& complex_;
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
-
- /**
- * Let V be the set of vertices.
- * Initially v0 is one arbitrarly vertex and the set V0 is {v0}.
- * Then Vk is computed as follows.
- * First we compute the vertex pk that is the furthest from Vk
- * then Vk = Vk \cup pk.
- * The radius of pk is its distance to Vk and its meeting vertex
- * is the vertex of Vk for which this distance is achieved.
- */
- struct Net_filtration_vertex {
- Vertex_handle vertex_handle;
- Vertex_handle meeting_vertex;
- double radius;
-
- Net_filtration_vertex(Vertex_handle vertex_handle_,
- Vertex_handle meeting_vertex_,
- double radius_) :
- vertex_handle(vertex_handle_), meeting_vertex(meeting_vertex_), radius(radius_) { }
-
- bool operator<(const Net_filtration_vertex& other) const {
- return radius < other.radius;
- }
- };
-
- public:
- std::vector<Net_filtration_vertex> net_filtration_;
-
- /**
- * @brief Modify complex to be the expansion of the k-nearest neighbor
- * symetric graph.
- */
- Furthest_point_epsilon_net(SkBlComplex& complex) :
- complex_(complex) {
- if (!complex.empty()) {
- init_filtration();
- for (std::size_t k = 2; k < net_filtration_.size(); ++k) {
- update_radius_value(k);
- }
- }
- }
-
- // xxx does not work if complex not full
-
- double radius(Vertex_handle v) {
- return net_filtration_[v.vertex].radius;
- }
-
- private:
- void init_filtration() {
- Vertex_handle v0 = *(complex_.vertex_range().begin());
- net_filtration_.reserve(complex_.num_vertices());
- for (auto v : complex_.vertex_range()) {
- if (v != v0)
- net_filtration_.push_back(Net_filtration_vertex(v,
- Vertex_handle(-1),
- squared_eucl_distance(v, v0)));
- }
- net_filtration_.push_back(Net_filtration_vertex(v0, Vertex_handle(-1), 1e10));
- auto n = net_filtration_.size();
- sort_filtration(n - 1);
- }
-
- void update_radius_value(int k) {
- int n = net_filtration_.size();
- int index_to_update = n - k;
- for (int i = 0; i < index_to_update; ++i) {
- net_filtration_[i].radius = (std::min)(net_filtration_[i].radius,
- squared_eucl_distance(net_filtration_[i].vertex_handle,
- net_filtration_[index_to_update].vertex_handle));
- }
- sort_filtration(n - k);
- }
-
- /**
- * sort all i first elements.
- */
- void sort_filtration(int i) {
- std::sort(net_filtration_.begin(), net_filtration_.begin() + i);
- }
-
- double squared_eucl_distance(Vertex_handle v1, Vertex_handle v2) const {
- return std::sqrt(Geometry_trait::Squared_distance_d()(complex_.point(v1), complex_.point(v2)));
- }
-
- void print_filtration() const {
- for (auto v : net_filtration_) {
- std::cerr << "v=" << v.vertex_handle << "-> d=" << v.radius << std::endl;
- }
- }
-};
-
-#endif // UTILS_FURTHEST_POINT_EPSILON_NET_H_
diff --git a/GudhUI/utils/Is_manifold.h b/GudhUI/utils/Is_manifold.h
deleted file mode 100644
index 732df607..00000000
--- a/GudhUI/utils/Is_manifold.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Is_manifold.h
- * Created on: Jan 28, 2015
- * This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_IS_MANIFOLD_H_
-#define UTILS_IS_MANIFOLD_H_
-
-#include "utils/UI_utils.h"
-#include "utils/Edge_contractor.h"
-
-/**
- * Iteratively tries to anticollapse smallest edge non added so far.
- * If its link is contractible then no topological change and else possible topological change.
- *
- * todo do a sparsification with some parameter eps while growing
- */
-template<typename SkBlComplex> class Is_manifold {
- private:
- const SkBlComplex& input_complex_;
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
-
- public:
- /*
- * return dim the maximum dimension around one simplex and res which is true if the complex is a manifold.
- * If the complex has dimension <= 3 then if res is false, the complex is not a manifold.
- * For d-manifold with d>=4, res may be false while the complex is a manifold.
- */
- Is_manifold(const SkBlComplex& input_complex, unsigned& dim, bool & res) : input_complex_(input_complex) {
- res = true;
- dim = -1;
- if (!input_complex_.empty()) {
- for (auto v : input_complex_.vertex_range()) {
- dim = local_dimension(v);
- break;
- }
- // check that the link of every vertex is a dim-1 sphere
- for (auto v : input_complex_.vertex_range()) {
- if (!is_k_sphere(v, dim - 1)) {
- res = false;
- break;
- }
- }
- }
- }
-
- private:
- unsigned local_dimension(Vertex_handle v) {
- unsigned dim = 0;
- for (const auto& s : input_complex_.star_simplex_range(v))
- dim = (std::max)(dim, (unsigned) s.dimension());
- return dim;
- }
-
- bool is_k_sphere(Vertex_handle v, int k) {
- auto link = input_complex_.link(v);
- Edge_contractor<Complex> contractor(link, link.num_vertices() - 1);
- (void)contractor;
- return (is_sphere_simplex(link) == k);
- }
-
- // A minimal sphere is a complex that contains vertices v1...vn and all faces
- // made upon this set except the face {v1,...,vn}
- // return -2 if not a minimal sphere
- // and d otherwise if complex is a d minimal sphere
-
- template<typename SubComplex>
- int is_sphere_simplex(const SubComplex& complex) {
- if (complex.empty()) return -1;
- if (complex.num_blockers() != 1) return -2;
-
- // necessary and sufficient condition : there exists a unique blocker that passes through all vertices
- auto first_blocker = *(complex.const_blocker_range().begin());
-
- if (first_blocker->dimension() + 1 != complex.num_vertices())
- return -2;
- else
- return (first_blocker->dimension() - 1);
- }
-};
-
-#endif // UTILS_IS_MANIFOLD_H_
diff --git a/GudhUI/utils/K_nearest_builder.h b/GudhUI/utils/K_nearest_builder.h
deleted file mode 100644
index 14851d96..00000000
--- a/GudhUI/utils/K_nearest_builder.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_K_NEAREST_BUILDER_H_
-#define UTILS_K_NEAREST_BUILDER_H_
-
-#include <CGAL/Euclidean_distance.h>
-#include <CGAL/Orthogonal_k_neighbor_search.h>
-#include <CGAL/Search_traits_d.h>
-#include <CGAL/Search_traits_adapter.h>
-#include <CGAL/property_map.h>
-
-#include <unordered_map>
-#include <list>
-#include <utility>
-
-#include "utils/UI_utils.h"
-#include "model/Complex_typedefs.h"
-
-template<typename SkBlComplex> class K_nearest_builder {
- private:
- typedef Geometry_trait Kernel;
- typedef Point Point_d;
- typedef std::pair<Point_d, unsigned> Point_d_with_id;
- typedef CGAL::Search_traits_d<Kernel> Traits_base;
- typedef CGAL::Search_traits_adapter<Point_d_with_id, CGAL::First_of_pair_property_map<Point_d_with_id>,
- Traits_base> Traits;
- typedef CGAL::Orthogonal_k_neighbor_search<Traits> Neighbor_search;
- typedef Neighbor_search::Tree Tree;
- typedef Neighbor_search::Distance Distance;
-
- SkBlComplex& complex_;
-
- public:
- /**
- * @brief Modify complex to be the expansion of the k-nearest neighbor
- * symetric graph.
- */
- K_nearest_builder(SkBlComplex& complex, unsigned k) : complex_(complex) {
- complex.keep_only_vertices();
- compute_edges(k);
- }
-
- private:
- double squared_eucl_distance(const Point& p1, const Point& p2) const {
- return Geometry_trait::Squared_distance_d()(p1, p2);
- }
-
- void compute_edges(unsigned k) {
- std::list<Point_d_with_id> points_with_id;
- for (auto v : complex_.vertex_range()) {
- Point_d_with_id point_v(complex_.point(v), v.vertex);
- points_with_id.push_back(point_v);
- }
-
- Tree tree(points_with_id.begin(), points_with_id.end());
-
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- for (auto p : complex_.vertex_range()) {
- Neighbor_search search(tree, complex_.point(p), k + 1);
- for (auto it = ++search.begin(); it != search.end(); ++it) {
- Vertex_handle q(std::get<1>(it->first));
- if (p != q && complex_.contains_vertex(p) && complex_.contains_vertex(q))
- complex_.add_edge_without_blockers(p, q);
- }
- }
- }
-};
-
-#endif // UTILS_K_NEAREST_BUILDER_H_
diff --git a/GudhUI/utils/Lloyd_builder.h b/GudhUI/utils/Lloyd_builder.h
deleted file mode 100644
index 67595d33..00000000
--- a/GudhUI/utils/Lloyd_builder.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_LLOYD_BUILDER_H_
-#define UTILS_LLOYD_BUILDER_H_
-
-#include <vector>
-#include <list>
-
-/**
- * Iteratively puts every vertex at the center of its neighbors
- */
-template<typename SkBlComplex> class Lloyd_builder {
- private:
- SkBlComplex& complex_;
- int dim;
-
- public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
-
- /**
- * @brief Modify complex to be the expansion of the k-nearest neighbor
- * symetric graph.
- */
- Lloyd_builder(SkBlComplex& complex, unsigned num_iterations) : complex_(complex), dim(-1) {
- if (!complex_.empty()) {
- dim = get_dimension();
- while (num_iterations--) {
- std::list<Point> new_points;
- for (auto v : complex.vertex_range())
- new_points.push_back(barycenter_neighbors(v));
-
- auto new_points_it = new_points.begin();
- for (auto v : complex.vertex_range())
- complex_.point(v) = *(new_points_it++);
- }
- }
- }
-
- private:
- int get_dimension() {
- assert(!complex_.empty());
- for (auto v : complex_.vertex_range())
- return complex_.point(v).dimension();
- return -1;
- }
-
- Point barycenter_neighbors(Vertex_handle v) const {
- if (complex_.degree(v) == 0)
- return complex_.point(v);
-
- std::vector<double> res(dim, 0);
- unsigned num_points = 0;
- for (auto nv : complex_.vertex_range(v)) {
- ++num_points;
- const Point& point = complex_.point(nv);
- assert(point.dimension() == dim);
- for (int i = 0; i < point.dimension(); ++i)
- res[i] += point[i];
- }
- for (auto& x : res)
- x /= num_points;
- return Point(dim, res.begin(), res.end());
- }
-
- double squared_eucl_distance(const Point& p1, const Point& p2) const {
- return Geometry_trait::Squared_distance_d()(p1, p2);
- }
-};
-
-#endif // UTILS_LLOYD_BUILDER_H_
diff --git a/GudhUI/utils/MClock.h b/GudhUI/utils/MClock.h
deleted file mode 100644
index 992f6fa5..00000000
--- a/GudhUI/utils/MClock.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_MCLOCK_H_
-#define UTILS_MCLOCK_H_
-
-#include <sys/time.h>
-
-class MClock {
- public:
- MClock() {
- end_called = false;
- begin();
- }
-
- void begin() const {
- end_called = false;
- gettimeofday(&startTime, NULL);
- }
-
- void end() const {
- end_called = true;
- gettimeofday(&endTime, NULL);
- }
-
- friend std::ostream& operator<<(std::ostream& stream, const MClock& clock) {
- // if(!clock.end_called) clock.end();
- if (!clock.end_called) {
- stream << "end not called";
- } else {
- long totalTime = (clock.endTime.tv_sec - clock.startTime.tv_sec) * 1000000L;
- totalTime += (clock.endTime.tv_usec - clock.startTime.tv_usec);
- stream << clock.num_seconds() << "s";
- }
- return stream;
- }
-
- double num_seconds() const {
- if (!end_called) end();
- long totalTime = (endTime.tv_sec - startTime.tv_sec) * 1000000L;
- totalTime += (endTime.tv_usec - startTime.tv_usec);
- return (totalTime / 1000L) / static_cast<double>(1000);
- }
-
- private:
- mutable struct timeval startTime, endTime;
- mutable bool end_called;
-};
-
-#endif // UTILS_MCLOCK_H_
diff --git a/GudhUI/utils/Persistence_compute.h b/GudhUI/utils/Persistence_compute.h
deleted file mode 100644
index c8afded9..00000000
--- a/GudhUI/utils/Persistence_compute.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_PERSISTENCE_COMPUTE_H_
-#define UTILS_PERSISTENCE_COMPUTE_H_
-
-#include <gudhi/graph_simplicial_complex.h>
-#include <gudhi/Simplex_tree.h>
-#include <gudhi/distance_functions.h>
-#include <gudhi/Persistent_cohomology.h>
-#include <gudhi/Rips_complex.h>
-
-#include <vector>
-
-struct Persistence_params {
- int p;
- double threshold;
- int max_dim;
- double min_pers;
-
- Persistence_params(int p_, double th_, int max_dim_ = 10, double min_pers_ = 0)
- : p(p_), threshold(th_), max_dim(max_dim_), min_pers(min_pers_) { }
-};
-
-/**
- * Show persistence into output stream
- */
-template<typename SkBlComplex> class Persistence_compute {
- public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
-
- /**
- * @brief Compute persistence
- * parameters :
- * unsigned dim_max
- * double threshold
- * int p for coefficient Z_p
- */
- Persistence_compute(SkBlComplex& complex, std::ostream& stream, const Persistence_params& params) {
- // for now everything is copied, todo boost adapt iterators to points of SkBlComplex instead of copying to an
- // initial vector
- typedef std::vector<double> Point_t;
- std::vector< Point_t > points;
- points.reserve(complex.num_vertices());
- for (auto v : complex.vertex_range()) {
- const auto & pt = complex.point(v);
- Point_t pt_to_add(pt.cartesian_begin(), pt.cartesian_end());
- points.emplace_back(std::move(pt_to_add));
- }
-
- using Simplex_tree = Gudhi::Simplex_tree<>;
- using Filtration_value = Simplex_tree::Filtration_value;
- using Rips_complex = Gudhi::rips_complex::Rips_complex<Filtration_value>;
- using Field_Zp = Gudhi::persistent_cohomology::Field_Zp;
- using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology<Simplex_tree, Field_Zp>;
-
- Rips_complex rips_complex(points, params.threshold, Euclidean_distance());
-
- Simplex_tree st;
- rips_complex.create_complex(st, params.max_dim);
- Persistent_cohomology pcoh(st);
- // initializes the coefficient field for homology
- pcoh.init_coefficients(params.p);
- // put params.min_pers
- pcoh.compute_persistent_cohomology(params.min_pers);
- stream << "persistence: \n";
- stream << "p dimension birth death: \n";
- pcoh.output_diagram(stream);
- }
-};
-
-#endif // UTILS_PERSISTENCE_COMPUTE_H_
diff --git a/GudhUI/utils/Rips_builder.h b/GudhUI/utils/Rips_builder.h
deleted file mode 100644
index ed62c1c0..00000000
--- a/GudhUI/utils/Rips_builder.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_RIPS_BUILDER_H_
-#define UTILS_RIPS_BUILDER_H_
-
-#include <boost/iterator/iterator_facade.hpp>
-
-#include <CGAL/Euclidean_distance.h>
-#include <CGAL/Orthogonal_k_neighbor_search.h>
-#include <CGAL/Search_traits_d.h>
-
-#include "utils/UI_utils.h"
-#include "model/Complex_typedefs.h"
-
-template<typename SkBlComplex> class Rips_builder {
- private:
- SkBlComplex& complex_;
-
- public:
- /**
- * @brief Modify complex to be the Rips complex
- * of its points with offset alpha.
- */
- Rips_builder(SkBlComplex& complex, double alpha) : complex_(complex) {
- complex.keep_only_vertices();
- if (alpha <= 0) return;
- compute_edges(alpha);
- }
-
- private:
- double squared_eucl_distance(const Point& p1, const Point& p2) const {
- return Geometry_trait::Squared_distance_d()(p1, p2);
- }
-
- void compute_edges(double alpha) {
- auto vertices = complex_.vertex_range();
- for (auto p = vertices.begin(); p != vertices.end(); ++p) {
- std::cout << *p << " ";
- std::cout.flush();
- for (auto q = p; ++q != vertices.end(); /**/)
- if (squared_eucl_distance(complex_.point(*p), complex_.point(*q)) < 4 * alpha * alpha)
- complex_.add_edge_without_blockers(*p, *q);
- }
- std::cout << std::endl;
- }
-};
-
-#endif // UTILS_RIPS_BUILDER_H_
diff --git a/GudhUI/utils/UI_utils.h b/GudhUI/utils/UI_utils.h
deleted file mode 100644
index 67a02869..00000000
--- a/GudhUI/utils/UI_utils.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_UI_UTILS_H_
-#define UTILS_UI_UTILS_H_
-
-#define UIDBG_VERBOSE
-
-#ifdef UIDBG_VERBOSE
-#define UIDBG(a) std::cerr << "UIDBG: " << (a) << std::endl
-#define UIDBGMSG(a, b) std::cerr << "UIDBG: " << a << b << std::endl
-#define UIDBGVALUE(a) std::cerr << "UIDBG: " << #a << ": " << a << std::endl
-#define UIDBGCONT(a) std::cerr << "UIDBG: container " << #a << " -> "; for (auto x : a) std::cerr << x << ","; std::cerr << std::endl }
-#else
-// #define DBG(a) a
-// #define DBGMSG(a, b) b
-// #define DBGVALUE(a) a
-// #define DBGCONT(a) a
-#define UIDBG(a)
-#define UIDBGMSG(a, b)
-#define UIDBGVALUE(a)
-#define UIDBGCONT(a)
-#endif
-
-#endif // UTILS_UI_UTILS_H_
diff --git a/GudhUI/utils/Vertex_collapsor.h b/GudhUI/utils/Vertex_collapsor.h
deleted file mode 100644
index fca57f7d..00000000
--- a/GudhUI/utils/Vertex_collapsor.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 UTILS_VERTEX_COLLAPSOR_H_
-#define UTILS_VERTEX_COLLAPSOR_H_
-
-#include <list>
-
-#include "utils/Edge_contractor.h"
-#include "utils/Furthest_point_epsilon_net.h"
-#include "utils/UI_utils.h"
-
-/**
- * Iteratively puts every vertex at the center of its neighbors
- */
-template<typename SkBlComplex> class Vertex_collapsor {
- private:
- SkBlComplex& complex_;
- size_t num_collapses_;
-
- public:
- typedef typename SkBlComplex::Vertex_handle Vertex_handle;
- typedef typename SkBlComplex::Edge_handle Edge_handle;
-
- /**
- * @brief Modify complex to be the expansion of the k-nearest neighbor
- * symetric graph.
- */
- Vertex_collapsor(SkBlComplex& complex, size_t num_collapses) :
- complex_(complex), num_collapses_(num_collapses) {
- // std::list<Vertex_handle> vertices;
- // vertices.insert(vertices.begin(),complex_.vertex_range().begin(),complex_.vertex_range().end());
- // UIDBG("Collapse vertices");
- // collapse_vertices(vertices);
-
- std::list<Vertex_handle> vertices;
-
- UIDBG("Compute eps net");
- Furthest_point_epsilon_net<Complex> eps_net(complex_);
-
- for (auto vh : eps_net.net_filtration_)
- vertices.push_back(vh.vertex_handle);
-
- UIDBG("Collapse vertices");
- collapse_vertices(vertices);
- }
-
- private:
- void collapse_vertices(std::list<Vertex_handle>& vertices) {
- while (!vertices.empty() && num_collapses_--) {
- Vertex_handle current_vertex = vertices.front();
- vertices.pop_front();
- if (is_link_reducible(current_vertex))
- complex_.remove_vertex(current_vertex);
- }
- }
-
- bool is_link_reducible(Vertex_handle v) {
- auto link = complex_.link(v);
- if (link.empty()) return false;
- if (link.is_cone()) return true;
- if (link.num_connected_components() > 1) return false;
- Edge_contractor<Complex> contractor(link, link.num_vertices() - 1);
- (void)contractor;
- return (link.num_vertices() == 1);
- }
-};
-
-#endif // UTILS_VERTEX_COLLAPSOR_H_
diff --git a/GudhUI/view/Color.h b/GudhUI/view/Color.h
deleted file mode 100644
index 808dc2d8..00000000
--- a/GudhUI/view/Color.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_COLOR_H_
-#define VIEW_COLOR_H_
-
-struct Color {
- double r;
- double g;
- double b;
-
- Color(double r_, double g_, double b_) : r(r_), g(g_), b(b_) { }
-};
-
-#endif // VIEW_COLOR_H_
diff --git a/GudhUI/view/FirstCoordProjector.h b/GudhUI/view/FirstCoordProjector.h
deleted file mode 100644
index 3f8a6fd9..00000000
--- a/GudhUI/view/FirstCoordProjector.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_FIRSTCOORDPROJECTOR_H_
-#define VIEW_FIRSTCOORDPROJECTOR_H_
-
-#include "utils/UI_utils.h"
-#include "Projector3D.h"
-
-class FirstCoordProjector3D : public Projector3D {
- typedef Projector3D::Point Point;
- typedef Projector3D::Point_3 Point_3;
-
- Point_3 operator()(const Point& p) const {
- if (p.dimension() >= 3)
- return Point_3(p.x(), p.y(), p.z());
- else if (p.dimension() >= 2)
- return Point_3(p.x(), p.y(), 0.0);
- else
- return Point_3(0.0, 0.0, 0.0);
- }
-};
-
-#endif // VIEW_FIRSTCOORDPROJECTOR_H_
diff --git a/GudhUI/view/Projector3D.h b/GudhUI/view/Projector3D.h
deleted file mode 100644
index a1421f51..00000000
--- a/GudhUI/view/Projector3D.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_PROJECTOR3D_H_
-#define VIEW_PROJECTOR3D_H_
-
-#include "model/Complex_typedefs.h"
-
-class Projector3D {
- public:
- typedef Geometry_trait::Point Point;
- typedef Geometry_trait::Point_3 Point_3;
-
- virtual Point_3 operator()(const Point&) const = 0;
-
- virtual ~Projector3D() { }
-};
-
-#endif // VIEW_PROJECTOR3D_H_
diff --git a/GudhUI/view/View_parameter.h b/GudhUI/view/View_parameter.h
deleted file mode 100644
index 578a0268..00000000
--- a/GudhUI/view/View_parameter.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_VIEW_PARAMETER_H_
-#define VIEW_VIEW_PARAMETER_H_
-
-#include <iostream>
-
-/**
- * Different parameters for the view such as the camera angle,
- * the light, options for vertices/edges/triangles.
- */
-class View_parameter {
- public:
- bool light;
- bool relative_light;
-
- double size_vertices;
- double size_edges;
- double light_edges; // in 0-1
- double light_triangles; // in 0-1
-
- /**
- * light angle
- */
- double theta;
- double phi;
-
- enum VERTEX_MODE {
- V_NONE, V_SIMPLE, V_COUNT
- };
-
- enum EDGE_MODE {
- E_NONE, E_SIMPLE, E_COUNT
- };
-
- enum TRIANGLE_MODE {
- T_NONE, T_SIMPLE, T_COUNT
- };
-
- VERTEX_MODE vertex_mode;
- EDGE_MODE edge_mode;
- TRIANGLE_MODE triangle_mode;
-
- void change_vertex_mode() {
- int current_value = vertex_mode;
- vertex_mode = static_cast<VERTEX_MODE> (++current_value % V_COUNT);
- std::cout << "Vertex mode : ";
- switch (vertex_mode) {
- case V_NONE:
- std::cout << "empty\n";
- break;
- case V_SIMPLE:
- std::cout << "simple\n";
- break;
- default:
- break;
- }
- }
-
- void change_vertex_mode(int new_mode) {
- vertex_mode = static_cast<VERTEX_MODE> (new_mode % V_COUNT);
- }
-
- void change_edge_mode() {
- int current_value = edge_mode;
- edge_mode = static_cast<EDGE_MODE> (++current_value % E_COUNT);
- }
-
- void change_edge_mode(int new_mode) {
- edge_mode = static_cast<EDGE_MODE> (new_mode % E_COUNT);
- }
-
- void change_triangle_mode() {
- int current_value = triangle_mode;
- triangle_mode = static_cast<TRIANGLE_MODE> (++current_value % T_COUNT);
- }
-
- View_parameter() {
- light = true;
- relative_light = true;
- vertex_mode = V_SIMPLE;
- edge_mode = E_SIMPLE;
- triangle_mode = T_NONE;
-
- size_vertices = 3;
- size_edges = 2;
-
- light_edges = 0.3;
- light_triangles = 0.85;
- theta = 0;
- phi = 0;
- }
-
- friend std::ostream& operator<<(std::ostream& stream, const View_parameter& param) {
- stream << param.light << " ";
- stream << param.relative_light << " ";
- stream << param.vertex_mode << " ";
- stream << param.edge_mode << " ";
- stream << param.triangle_mode << " ";
- stream << param.size_vertices << " ";
- stream << param.size_edges << " ";
- stream << param.light_edges << " ";
- stream << param.light_triangles << " ";
- stream << param.theta << " ";
- stream << param.phi << " ";
- return stream;
- }
-
- friend std::istream& operator>>(std::istream& stream, View_parameter& param) {
- stream >> param.light;
- stream >> param.relative_light;
- int a;
- stream >> a;
- param.vertex_mode = static_cast<VERTEX_MODE> (a % V_COUNT);
- stream >> a;
- param.edge_mode = static_cast<EDGE_MODE> (a % E_COUNT);
- stream >> a;
- param.triangle_mode = static_cast<TRIANGLE_MODE> (a % T_COUNT);
- stream >> a;
- stream >> param.size_vertices;
- stream >> param.size_edges;
- stream >> param.light_edges;
- stream >> param.light_triangles;
- stream >> param.theta;
- stream >> param.phi;
- return stream;
- }
-};
-
-#endif // VIEW_VIEW_PARAMETER_H_
diff --git a/GudhUI/view/Viewer.cpp b/GudhUI/view/Viewer.cpp
deleted file mode 100644
index 42e35d6c..00000000
--- a/GudhUI/view/Viewer.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-#include "Viewer.h"
-#include "utils/UI_utils.h"
-
-Viewer::Viewer(QWidget* parent) : QGLViewer(QGLFormat(QGL::SampleBuffers), parent), instructor(0), theta(0), phi(0) { }
-
-void Viewer::set_instructor(Viewer_instructor* instructor_) {
- instructor = instructor_;
-}
-
-void Viewer::show_entire_scene() {
- this->showEntireScene();
-}
-
-void Viewer::draw() {
- instructor->give_instructions();
-}
-
-void Viewer::set_bounding_box(const Point_3 & lower_left, const Point_3 & upper_right) {
- this->camera()->setSceneBoundingBox(qglviewer::Vec(lower_left[0], lower_left[1], lower_left[2]),
- qglviewer::Vec(upper_right[0], upper_right[1], upper_right[2]));
-}
-
-void Viewer::update_GL() {
- this->updateGL();
-}
-
-void Viewer::init_scene() {
- this->setBackgroundColor(Qt::white);
- ::glEnable(GL_LINE_SMOOTH);
- init_light();
-}
-
-void Viewer::init_light() {
- ::glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
-}
-
-void Viewer::set_light() {
- if (theta >= 0 && phi >= 0) {
- const GLfloat pos[4] = {static_cast<float> (sin(phi) * cos(theta)),
- static_cast<float> (sin(phi) * sin(theta)),
- static_cast<float> (cos(phi)), 0.};
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- }
-}
-
-void Viewer::set_light_direction(double theta_, double phi_) {
- theta = theta_;
- phi = phi_;
-}
-
-/**
- * set the light in the direction of the observer
- */
-void Viewer::set_light_direction() {
- theta = -1;
- phi = -1;
-}
-
-void Viewer::postSelection(const QPoint& point) {
- bool found;
-
- auto vec = this->camera()->pointUnderPixel(point, found);
-
- if (found) {
- Point_3 position(vec[0], vec[1], vec[2]);
- emit(click(position));
- }
-}
-
-////////////////////////
-// draw
-////////////////////////
-
-void Viewer::set_size_point(double size_points) {
- ::glPointSize(size_points);
-}
-
-void Viewer::draw_point(const Point_3& p, const Color& color, double size_points) {
- ::glColor3f(color.r, color.g, color.b);
- ::glDisable(GL_LIGHTING);
- ::glEnable(GL_POINT_SMOOTH);
- ::glPointSize(size_points);
- ::glBegin(GL_POINTS);
- ::glVertex3d(p.x(), p.y(), p.z());
- ::glEnd();
- ::glDisable(GL_POINT_SMOOTH);
-}
-
-void Viewer::begin_draw_points(double size, bool light) {
- light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING);
- ::glEnable(GL_POINT_SMOOTH);
- ::glPointSize(size);
- ::glBegin(GL_POINTS);
-}
-
-void Viewer::set_color(const Color& color) {
- ::glColor3f(color.r, color.g, color.b);
-}
-
-void Viewer::draw_points(const Point_3 & point) {
- ::glVertex3d(point.x(), point.y(), point.z());
-}
-
-void Viewer::end_draw_points() {
- ::glEnd();
- ::glDisable(GL_POINT_SMOOTH);
-}
-
-void Viewer::draw_edge(const Point_3 &a, const Point_3 &b, const Color& color, double size) {
- ::glColor3f(color.r, color.g, color.b);
- ::glPointSize(3.0);
- ::glLineWidth(size);
- ::glBegin(GL_LINES);
- ::glVertex3f(a.x(), a.y(), a.z());
- ::glVertex3f(b.x(), b.y(), b.z());
- ::glEnd();
-}
-
-void Viewer::begin_draw_edges(double size, bool light) {
- ::glLineWidth(size);
- ::glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- ::glEnable(GL_POLYGON_OFFSET_LINE);
- ::glPolygonOffset(3.0f, -3.0f);
- light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING);
- ::glBegin(GL_LINES);
-}
-
-void Viewer::draw_edges(const Point_3 &a, const Point_3 &b) {
- ::glVertex3f(a.x(), a.y(), a.z());
- ::glVertex3f(b.x(), b.y(), b.z());
-}
-
-void Viewer::end_draw_edges() {
- ::glEnd();
-}
-
-void Viewer::begin_draw_triangles(double size, bool light, bool transparent) {
- if (transparent) {
- ::glEnable(GL_BLEND);
- ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
- ::glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- ::glEnable(GL_POLYGON_OFFSET_FILL);
- ::glPolygonOffset(3.0f, -3.0f);
- light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING);
- ::glBegin(GL_TRIANGLES);
-}
-
-void Viewer::draw_triangles(const Point_3& p1, const Point_3& p2, const Point_3& p3) {
- if (!CGAL::collinear(p1, p2, p3)) {
- auto triangle_normal = CGAL::unit_normal(p1, p2, p3);
- ::glNormal3d(triangle_normal.x(), triangle_normal.y(), triangle_normal.z());
- ::glVertex3d(p1.x(), p1.y(), p1.z());
- ::glVertex3d(p2.x(), p2.y(), p2.z());
- ::glVertex3d(p3.x(), p3.y(), p3.z());
- }
-}
-
-void Viewer::end_draw_triangles() {
- ::glEnd();
-}
-
-#include "Viewer.moc"
diff --git a/GudhUI/view/Viewer.h b/GudhUI/view/Viewer.h
deleted file mode 100644
index 414044ef..00000000
--- a/GudhUI/view/Viewer.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_VIEWER_H_
-#define VIEW_VIEWER_H_
-
-#include <QGLViewer/qglviewer.h>
-
-#include <vector>
-
-#include "View_parameter.h"
-#include "model/Complex_typedefs.h"
-#include "Color.h"
-#include "Viewer_instructor.h"
-
-class Viewer_instructor;
-
-class Viewer : public QGLViewer {
- Q_OBJECT
-
- Viewer_instructor * instructor;
-
- /**
- * light angles
- */
- double theta, phi;
- typedef Complex::GT Gudhi_kernel;
- typedef Gudhi_kernel::Point_3 Point_3;
-
- public:
- Viewer(QWidget* parent);
-
- void set_instructor(Viewer_instructor* instructor_);
-
- void show_entire_scene();
-
- void draw();
-
- void set_bounding_box(const Point_3 & lower_left, const Point_3 & upper_right);
-
- void update_GL();
-
- void init_scene();
-
- void init_light();
-
- void set_light();
-
- void set_light_direction(double theta, double phi);
-
- /**
- * set the light in the direction of the observer
- */
- void set_light_direction();
-
- protected:
- virtual void postSelection(const QPoint& point);
-
- public:
- ////////////////////////
- // draw
- ////////////////////////
- void set_size_point(double size_points);
-
- void set_color(const Color& color);
-
- void draw_point(const Point_3& p, const Color& color, double size_points);
-
- void begin_draw_points(double size, bool light = false);
-
- void draw_points(const Point_3 & point);
-
- void end_draw_points();
-
- void draw_edge(const Point_3 &a, const Point_3 &b, const Color& color, double size);
-
- void begin_draw_edges(double size, bool light = false);
-
- void draw_edges(const Point_3 &a, const Point_3 &b);
-
- void end_draw_edges();
-
- void begin_draw_triangles(double size, bool light, bool transparent = false);
-
- void draw_triangles(const Point_3& p1, const Point_3& p2, const Point_3& p3);
-
- // todo remove
- void draw_triangles(const std::vector<Point_3*>& points);
-
- void end_draw_triangles();
-
-
- signals:
- void click(const Point_3& position);
-};
-
-#endif // VIEW_VIEWER_H_
diff --git a/GudhUI/view/Viewer_instructor.cpp b/GudhUI/view/Viewer_instructor.cpp
deleted file mode 100644
index a9dc4525..00000000
--- a/GudhUI/view/Viewer_instructor.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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/>.
- *
- */
-
-#include <utility>
-
-#include "Viewer_instructor.h"
-#include "utils/UI_utils.h"
-#include "FirstCoordProjector.h"
-
-Viewer_instructor::Viewer_instructor(QWidget* parent,
- Viewer* viewer,
- const Complex& mesh
- )
- : viewer_(viewer), mesh_(mesh), projector_(new FirstCoordProjector3D()) {
- viewer_->set_instructor(this);
-}
-
-void Viewer_instructor::initialize_bounding_box() {
- auto pair_bounding_box = compute_bounding_box_corners();
- viewer_->set_bounding_box(proj(pair_bounding_box.first), proj(pair_bounding_box.second));
- viewer_->init_scene();
-}
-
-std::pair<Complex::Point, Complex::Point> Viewer_instructor::compute_bounding_box_corners() {
- if (mesh_.empty()) {
- return std::make_pair(Point(-1, -1, -1, 1), Point(1, 1, 1, 1));
- } else {
- double x_min = 1e10;
- double y_min = 1e10;
- double z_min = 1e10;
- double x_max = -1e10;
- double y_max = -1e10;
- double z_max = -1e10;
- for (auto vi : mesh_.vertex_range()) {
- auto pt = proj(mesh_.point(vi));
- x_min = (std::min)(x_min, pt.x());
- y_min = (std::min)(y_min, pt.y());
- z_min = (std::min)(z_min, pt.z());
-
- x_max = (std::max)(x_max, pt.x());
- y_max = (std::max)(y_max, pt.y());
- z_max = (std::max)(z_max, pt.z());
- }
- return std::make_pair(Point(x_min, y_min, z_min, 1.),
- Point(x_max, y_max, z_max, 1.));
- }
-}
-
-void Viewer_instructor::show_entire_scene() {
- viewer_->show_entire_scene();
-}
-
-const qglviewer::Camera* Viewer_instructor::camera() const {
- return viewer_->camera();
-}
-
-int
-Viewer_instructor::width() const {
- return viewer_->width();
-}
-
-int
-Viewer_instructor::height() const {
- return viewer_->height();
-}
-
-/**
- * to change display parameters
- */
-View_parameter& Viewer_instructor::view_params() {
- return view_params_;
-}
-
-void
-Viewer_instructor::give_instructions() {
- if (view_params_.relative_light)
- viewer_->set_light_direction();
- else
- viewer_->set_light_direction(view_params_.theta, view_params_.phi);
- viewer_->set_light();
-
- if (view_params_.edge_mode) draw_edges();
- if (view_params_.triangle_mode) draw_triangles();
- if (view_params_.vertex_mode) draw_points();
-}
-
-void Viewer_instructor::draw_edges() {
- viewer_->begin_draw_edges(view_params_.size_edges, false);
-
- for (auto edge : mesh_.edge_range()) {
- set_color_edge(edge);
- const Point& a = mesh_.point(mesh_.first_vertex(edge));
- const Point& b = mesh_.point(mesh_.second_vertex(edge));
- viewer_->draw_edges(proj(a), proj(b));
- }
-
- viewer_->end_draw_edges();
-}
-
-void Viewer_instructor::draw_triangles() {
- const double size_triangles = 1.0;
- viewer_->begin_draw_triangles(size_triangles, view_params_.light);
-
- for (const auto& fit : mesh_.triangle_range()) {
- set_color_triangle(fit);
- if (view_params_.triangle_mode) {
- auto fit_it = fit.begin();
- const Point& p1 = mesh_.point(*fit_it);
- const Point& p2 = mesh_.point(*(++fit_it));
- const Point& p3 = mesh_.point(*(++fit_it));
- viewer_->draw_triangles(proj(p1), proj(p2), proj(p3));
- }
- }
- viewer_->end_draw_triangles();
-}
-
-void Viewer_instructor::draw_points() {
- viewer_->begin_draw_points(view_params_.size_vertices);
- for (auto vi : mesh_.vertex_range()) {
- viewer_->set_size_point(view_params_.size_vertices);
- set_color_vertex(vi);
- viewer_->draw_points(proj(mesh_.point(vi)));
- }
- viewer_->end_draw_points();
-}
-
-void Viewer_instructor::draw_edge(const Point&, const Point&) { }
-
-void Viewer_instructor::draw_point(const Point&) { }
-
-/**
- * set the right color of vertex/edge/triangle considering the view_params choice
- */
-void Viewer_instructor::set_color_vertex(Vertex_handle vh) {
- viewer_->set_color(Color(view_params_.light_edges, view_params_.light_edges, view_params_.light_edges));
-}
-
-void Viewer_instructor::set_color_edge(Edge_handle eh) {
- viewer_->set_color(Color(view_params_.light_edges, view_params_.light_edges, view_params_.light_edges));
-}
-
-void Viewer_instructor::set_color_triangle(const Simplex& triangle) {
- viewer_->set_color(Color(view_params_.light_triangles, view_params_.light_triangles, view_params_.light_triangles));
-}
-
-Viewer_instructor::Point_3
-Viewer_instructor::proj(const Point& p) const {
- return (*projector_)(p);
-}
-
-void Viewer_instructor::sceneChanged() {
- UIDBG("sceneChanged");
- viewer_->update_GL();
-}
-
-void Viewer_instructor::change_draw_vertices() {
- view_params_.change_vertex_mode();
-}
-
-void Viewer_instructor::change_draw_edges() {
- view_params_.change_edge_mode();
-}
-
-void Viewer_instructor::change_draw_triangles() {
- view_params_.change_triangle_mode();
-}
-
-void Viewer_instructor::change_light() {
- view_params_.light = !view_params_.light;
-}
-
-#include "Viewer_instructor.moc"
diff --git a/GudhUI/view/Viewer_instructor.h b/GudhUI/view/Viewer_instructor.h
deleted file mode 100644
index 4b06acb8..00000000
--- a/GudhUI/view/Viewer_instructor.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* This file is part of the Gudhi Library. The Gudhi library
- * (Geometric Understanding in Higher Dimensions) is a generic C++
- * library for computational topology.
- *
- * Author(s): David Salinas
- *
- * Copyright (C) 2014 Inria
- *
- * 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 VIEW_VIEWER_INSTRUCTOR_H_
-#define VIEW_VIEWER_INSTRUCTOR_H_
-
-// todo do a viewer instructor that have directely a pointer to a QGLviewer and buffer ot not triangles
-
-#include <QFileDialog>
-#include <QKeyEvent>
-#include <QGLViewer/camera.h>
-
-#include <memory>
-#include <utility> // for pair<>
-
-#include "model/Complex_typedefs.h"
-
-#include "Projector3D.h"
-#include "View_parameter.h"
-#include "Viewer.h"
-
-class Viewer;
-class Viewer_parameter;
-
-class Viewer_instructor : public QWidget {
- Q_OBJECT
-
- typedef Geometry_trait::Point_3 Point_3;
- typedef Complex::Point Point;
- typedef Complex::Vertex_handle Vertex_handle;
- typedef Complex::Edge_handle Edge_handle;
- typedef Complex::Simplex Simplex;
-
- Viewer* viewer_;
- View_parameter view_params_;
- const Complex& mesh_;
- std::unique_ptr<Projector3D> projector_;
-
- public:
- Viewer_instructor(QWidget* parent, Viewer* viewer, const Complex& mesh);
-
- void initialize_bounding_box();
-
- std::pair<Point, Point> compute_bounding_box_corners();
-
- void show_entire_scene();
-
- const qglviewer::Camera* camera() const;
-
- int width() const;
- int height() const;
-
- /**
- * to change display parameters
- */
- View_parameter& view_params();
-
- public:
- /**
- * gives instructions to the viewer
- */
- void give_instructions();
-
- void draw_edges();
- void draw_triangles();
- void draw_points();
-
- void draw_edge(const Point&, const Point&);
-
- void draw_point(const Point&);
-
- /**
- * set the right color of vertex/edge/triangle considering the view_params choice
- */
- void set_color_vertex(Vertex_handle vh);
- void set_color_edge(Edge_handle eh);
-
- void set_color_triangle(const Simplex& triangle);
-
- private:
- /**
- * Projection to 3D needed for the viewer.
- */
- Point_3 proj(const Point& p) const;
-
- public slots:
- void sceneChanged();
- void change_draw_vertices();
- void change_draw_edges();
- void change_draw_triangles();
- void change_light();
-};
-
-#endif // VIEW_VIEWER_INSTRUCTOR_H_