From 6ff58f02e2150a5c541ac14838a58b9f9eac4208 Mon Sep 17 00:00:00 2001 From: edgarriba Date: Wed, 30 Jul 2014 12:57:18 +0200 Subject: [PATCH] Code tutorial --- .../real_time_pose_estimation/src/CsvReader.cpp | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/CsvReader.cpp diff --git a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/CsvReader.cpp b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/CsvReader.cpp new file mode 100644 index 0000000..8061df6 --- /dev/null +++ b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/CsvReader.cpp @@ -0,0 +1,81 @@ +#include +#include "CsvReader.h" + +/** The default constructor of the CSV reader Class */ +CsvReader::CsvReader(const std::string &path, const char &separator){ + _file.open(path.c_str(), ifstream::in); + _separator = separator; +} + +/* Read a plane text file with .ply format */ +void CsvReader::readPLY(std::vector &list_vertex, std::vector > &list_triangles) +{ +std::string line, tmp_str, n; + int num_vertex, num_triangles; + int count = 0; + bool end_header = false; + bool end_vertex = false; + + // Read the whole *.ply file + while (getline(_file, line)) { + stringstream liness(line); + + // read header + if(!end_header) + { + getline(liness, tmp_str, _separator); + if( tmp_str == "element" ) + { + getline(liness, tmp_str, _separator); + getline(liness, n); + if(tmp_str == "vertex") num_vertex = boost::lexical_cast< int >(n); + if(tmp_str == "face") num_triangles = boost::lexical_cast< int >(n); + } + if(tmp_str == "end_header") end_header = true; + } + + // read file content + else if(end_header) + { + // read vertex and add into 'list_vertex' + if(!end_vertex && count < num_vertex) + { + string x, y, z; + getline(liness, x, _separator); + getline(liness, y, _separator); + getline(liness, z); + + cv::Point3f tmp_p; + tmp_p.x = boost::lexical_cast< float >(x); + tmp_p.y = boost::lexical_cast< float >(y); + tmp_p.z = boost::lexical_cast< float >(z); + list_vertex.push_back(tmp_p); + + count++; + if(count == num_vertex) + { + count = 0; + end_vertex = !end_vertex; + } + } + // read faces and add into 'list_triangles' + else if(end_vertex && count < num_triangles) + { + std::string num_pts_per_face, id0, id1, id2; + getline(liness, num_pts_per_face, _separator); + getline(liness, id0, _separator); + getline(liness, id1, _separator); + getline(liness, id2); + + std::vector tmp_triangle(3); + tmp_triangle[0] = boost::lexical_cast< int >(id0); + tmp_triangle[1] = boost::lexical_cast< int >(id1); + tmp_triangle[2] = boost::lexical_cast< int >(id2); + list_triangles.push_back(tmp_triangle); + + count++; + } + } + } +} + -- 2.7.4