vgl_io_polygon.cxx
Go to the documentation of this file.
1 // This is core/vgl/io/vgl_io_polygon.cxx
2 #include <iostream>
3 #include "vgl_io_polygon.h"
4 //:
5 // \file
6 
7 //====================================================================================
8 //: Binary save self to stream.
9 template <class T>
10 void vsl_b_write(vsl_b_ostream &os, vgl_polygon<T> const& p)
11 {
12  constexpr short io_version_no = 1;
13  vsl_b_write(os, io_version_no);
14  vsl_b_write(os, p.num_sheets());
15  for (unsigned int i=0;i<p.num_sheets();i++)
16  {
17  vsl_b_write(os,p[i].size());
18  for (unsigned int j=0;j<p[i].size();j++)
19  vsl_b_write(os, p[i][j]);
20  }
21 }
22 
23 template void vsl_b_write(vsl_b_ostream&, vgl_polygon<float> const&);
24 template void vsl_b_write(vsl_b_ostream&, vgl_polygon<double> const&);
25 
26 //====================================================================================
27 //: Binary load self from stream.
28 template <class T>
29 void vsl_b_read(vsl_b_istream &is, vgl_polygon<T> & p)
30 {
31  if (!is) return;
32 
33  short v;
34  vsl_b_read(is, v);
35  switch (v)
36  {
37  case 1:
38  unsigned int num_sheets;
39  vsl_b_read(is, num_sheets);
40  p.clear();
41  for (unsigned int i=0;i<num_sheets;i++)
42  {
43  p.new_sheet();
44  typedef typename vgl_polygon<T>::sheet_t::size_type size_type;
45  size_type npoints;
46  vsl_b_read(is, npoints);
47  vgl_point_2d<T> point;
48  for (size_type j=0;j<npoints;j++)
49  {
50  vsl_b_read(is, point);
51  p.push_back(point);
52  }
53  }
54  break;
55 
56  default:
57  std::cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, vgl_polygon<T>&)\n"
58  << " Unknown version number "<< v << '\n';
59  is.is().clear(std::ios::badbit); // Set an unrecoverable IO error on stream
60  return;
61  }
62 }
63 
64 template void vsl_b_read(vsl_b_istream&, vgl_polygon<float>&);
65 template void vsl_b_read(vsl_b_istream&, vgl_polygon<double>&);
66 
67 //====================================================================================
68 //: Output a human readable summary to the stream
69 template <class T>
70 void vsl_print_summary(std::ostream& os, vgl_polygon<T>const& p)
71 {
72  os<<"Polygon with points defined by sheets :\n";
73  for (unsigned int i=0;i<p.num_sheets();i++)
74  {
75  for (unsigned int j=0;j<p[i].size();j++)
76  os << p[i][j].x()<<','<<p[i][j].y()<<std::endl;
77  os<<std::endl;
78  }
79 }
80 
81 template void vsl_print_summary(std::ostream&, vgl_polygon<float>const&);
82 template void vsl_print_summary(std::ostream&, vgl_polygon<double>const&);
void new_sheet()
Add a new (empty) sheet to the polygon.
Definition: vgl_polygon.h:105
#define v
Definition: vgl_vector_2d.h:74
void vsl_b_read(vsl_b_istream &is, vgl_polygon< T > &p)
Binary load self from stream.
void push_back(T x, T y)
Add a new point to the last sheet.
Definition: vgl_polygon.hxx:81
void vsl_print_summary(std::ostream &os, vgl_polygon< T >const &p)
Output a human readable summary to the stream.
unsigned int num_sheets() const
Definition: vgl_polygon.h:116
Store a polygon.
Definition: vgl_area.h:6
void vsl_b_write(vsl_b_ostream &os, vgl_polygon< T > const &p)
Binary save self to stream.
void clear()
Set the number of sheets to zero, so the polygon becomes empty.
Definition: vgl_polygon.h:101