Loading...
Searching...
No Matches
Points_3D_off_io.h
/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
* See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
* Author(s): Vincent Rouvreau
*
* Copyright (C) 2015 Inria
*
* Modification(s):
* - YYYY/MM Author: Description of the modification
*/
#ifndef POINTS_3D_OFF_IO_H_
#define POINTS_3D_OFF_IO_H_
#include <gudhi/Off_reader.h>
#include <string>
#include <vector>
#include <fstream>
#include <map>
namespace Gudhi {
template<typename Point_3>
class Points_3D_off_visitor_reader {
private:
std::vector<Point_3> point_cloud_;
bool valid_;
public:
void init(int dim, int num_vertices, int num_faces, int num_edges) {
#ifdef DEBUG_TRACES
std::clog << "Points_3D_off_visitor_reader::init - dim=" << dim << " - num_vertices=" <<
num_vertices << " - num_faces=" << num_faces << " - num_edges=" << num_edges << std::endl;
#endif // DEBUG_TRACES
if (dim == 3) {
valid_ = true;
} else {
valid_ = false;
std::cerr << "Points_3D_off_reader::Points_3D_off_reader cannot read OFF files in dimension " << dim << "\n";
}
if (num_faces > 0) {
std::cerr << "Points_3D_off_visitor_reader::init faces are not taken into account from OFF file for Points.\n";
}
if (num_edges > 0) {
std::cerr << "Points_3D_off_visitor_reader::init edges are not taken into account from OFF file for Points.\n";
}
}
void point(const std::vector<double>& point) {
if (valid_) {
#ifdef DEBUG_TRACES
std::clog << "Points_3D_off_visitor_reader::point ";
for (auto coordinate : point) {
std::clog << coordinate << " | ";
}
std::clog << std::endl;
#endif // DEBUG_TRACES
// Fill the point cloud
point_cloud_.push_back(Point_3(point[0], point[1], point[2]));
}
}
// Off_reader visitor maximal_face implementation - Only points are read
void maximal_face(const std::vector<int>& face) { }
// Off_reader visitor done implementation - Only points are read
void done() { }
const std::vector<Point_3>& get_point_cloud() const {
return point_cloud_;
}
bool is_valid() const {
return valid_;
}
};
template<typename Point_3>
class Points_3D_off_reader {
public:
Points_3D_off_reader(const std::string& name_file)
: valid_(false) {
std::ifstream stream(name_file);
if (stream.is_open()) {
Off_reader off_reader(stream);
Points_3D_off_visitor_reader<Point_3> off_visitor;
valid_ = off_reader.read(off_visitor);
valid_ = valid_ && off_visitor.is_valid();
if (valid_) {
point_cloud = off_visitor.get_point_cloud();
}
} else {
std::cerr << "Points_3D_off_reader::Points_3D_off_reader could not open file " << name_file << "\n";
}
}
bool is_valid() const {
return valid_;
}
const std::vector<Point_3>& get_point_cloud() const {
return point_cloud;
}
private:
std::vector<Point_3> point_cloud;
bool valid_;
};
} // namespace Gudhi
#endif // POINTS_3D_OFF_IO_H_
Gudhi::Off_reader
OFF file reader top class visitor.
Definition Off_reader.h:29
Gudhi::Off_reader::read
bool read(OffVisitor &off_visitor)
Read an OFF file and calls the following methods :
Definition Off_reader.h:51
Gudhi::Points_3D_off_reader::Points_3D_off_reader
Points_3D_off_reader(const std::string &name_file)
Reads the OFF file and constructs a vector of points from the points that are in the OFF file.
Definition Points_3D_off_io.h:149
Gudhi::Points_3D_off_reader::is_valid
bool is_valid() const
Returns if the OFF file read operation was successful or not.
Definition Points_3D_off_io.h:169
Gudhi::Points_3D_off_reader::get_point_cloud
const std::vector< Point_3 > & get_point_cloud() const
Point cloud getter.
Definition Points_3D_off_io.h:177
Gudhi::Points_3D_off_visitor_reader
OFF file visitor implementation according to Off_reader in order to read points from an OFF file.
Definition Points_3D_off_io.h:26
Gudhi::Points_3D_off_visitor_reader::is_valid
bool is_valid() const
Returns if the OFF file read operation was successful or not.
Definition Points_3D_off_io.h:108
Gudhi::Points_3D_off_visitor_reader::get_point_cloud
const std::vector< Point_3 > & get_point_cloud() const
Point cloud getter.
Definition Points_3D_off_io.h:100
Gudhi::Points_3D_off_visitor_reader::init
void init(int dim, int num_vertices, int num_faces, int num_edges)
Off_reader visitor init implementation.
Definition Points_3D_off_io.h:42
Gudhi::Points_3D_off_visitor_reader::point
void point(const std::vector< double > &point)
Off_reader visitor point implementation.
Definition Points_3D_off_io.h:74
Gudhi
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14