LCOV - code coverage report
Current view: top level - src/PointCloud - ObjectInterpreter.cpp (source / functions) Hit Total Coverage
Test: HLR Lines: 37 44 84.1 %
Date: 2018-01-10 14:31:03 Functions: 6 6 100.0 %

          Line data    Source code
       1             : #include "ObjectInterpreter.hpp"
       2             : #include <boost/filesystem.hpp>
       3             : #include <boost/filesystem/fstream.hpp>
       4             : 
       5             : namespace HLR
       6             : {
       7             : namespace PointCloud
       8             : {
       9             : namespace
      10             : {
      11             : std::optional<CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>>
      12             : get_static_polyhedron();
      13             : }
      14             : 
      15           2 : std::vector<Object> ObjectInterpreter::get_current_objects()
      16             : {
      17           2 :     merge_objects();
      18           2 :     return current_objects;
      19             : }
      20             : 
      21           3 : std::vector<Object> ObjectInterpreter::get_changed_objects()
      22             : {
      23           3 :     merge_objects();
      24           6 :     std::vector<Object> changed_objects;
      25           3 :     if (!history.empty())
      26             :     {
      27           6 :         for (const auto& i : current_objects)
      28             :         {
      29           3 :             bool is_new = true;
      30           8 :             for (const auto& j : history[0])
      31             :             {
      32           5 :                 if (i.id == j.id)
      33             :                 {
      34           0 :                     is_new = false;
      35           0 :                     if (i != j)
      36             :                     {
      37           0 :                         changed_objects.push_back(i);
      38             :                     }
      39             :                 }
      40             :             }
      41           3 :             if (is_new)
      42             :             {
      43           3 :                 changed_objects.push_back(i);
      44             :             }
      45             :         }
      46           3 :         return changed_objects;
      47             :     }
      48           0 :     return current_objects;
      49             : }
      50             : 
      51           5 : void ObjectInterpreter::merge_objects()
      52             : {
      53           2 :     static auto polyhedron = get_static_polyhedron().value_or(
      54           6 :         CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>{});
      55             : 
      56           5 :     history.push_back(std::move(current_objects));
      57             : 
      58          10 :     Object object;
      59           5 :     object.id = 0;
      60           5 :     object.polyhedron = polyhedron;
      61           5 :     object.speed = std::nullopt;
      62           5 :     object.is_cup = false;
      63           5 :     object.is_deleted = false;
      64           5 :     current_objects.push_back(object);
      65           5 : }
      66             : namespace
      67             : {
      68             : std::optional<CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3>>
      69           1 : get_static_polyhedron() try
      70             : {
      71           1 :     boost::system::error_code ec;
      72           2 :     auto path = boost::filesystem::read_symlink("/proc/self/exe", ec);
      73             : 
      74           1 :     if (!ec)
      75             :     {
      76           1 :         path.remove_filename();
      77           1 :         path /= "poly.off";
      78             :     }
      79             :     else
      80             :     {
      81           0 :         path = "poly.off";
      82             :     }
      83             : 
      84           2 :     boost::filesystem::ifstream poly_stream{path};
      85             : 
      86           2 :     CGAL::Surface_mesh<CGAL::Simple_cartesian<double>::Point_3> polyhedron;
      87           1 :     poly_stream >> polyhedron;
      88             : 
      89           1 :     return polyhedron;
      90             : }
      91           0 : catch (...)
      92             : {
      93           0 :     return std::nullopt;
      94             : }
      95             : } // namespace
      96             : 
      97             : } // namespace PointCloud
      98           3 : } // namespace HLR

Generated by: LCOV version 1.12