1 #include "volm_osm_object_polygon.h"
2 //:
3 // \file
4 
print()5 void volm_osm_object_polygon::print()
6 {
7   std::cout << " object property: ";
8   prop_.print();
9   std::cout << " polygon: ";
10   poly_.print(std::cout);
11 }
12 
b_write(vsl_b_ostream & os)13 void volm_osm_object_polygon::b_write(vsl_b_ostream& os)
14 {
15   vsl_b_write(os, this->version());
16   vsl_b_write(os, prop_.id_);
17   vsl_b_write(os, prop_.name_);
18   vsl_b_write(os, prop_.level_);
19   vsl_b_write(os, prop_.width_);
20   vsl_b_write(os, poly_.num_sheets());
21   for (unsigned i = 0; i < poly_.num_sheets(); i++) {
22     unsigned n_vert = poly_[i].size();
23     vsl_b_write(os, n_vert);
24     for (unsigned j = 0; j < n_vert; j++) {
25       vsl_b_write(os, poly_[i][j].x());
26       vsl_b_write(os, poly_[i][j].y());
27     }
28   }
29 }
30 
b_read(vsl_b_istream & is)31 void volm_osm_object_polygon::b_read(vsl_b_istream& is)
32 {
33   unsigned ver;
34   vsl_b_read(is, ver);
35   if (ver == 1) {
36     unsigned char id, level;
37     std::string name;
38     double width;
39     unsigned n_sheet;
40     vsl_b_read(is, id);
41     vsl_b_read(is, name);
42     vsl_b_read(is, level);
43     vsl_b_read(is, width);
44     vsl_b_read(is, n_sheet);
45     for (unsigned i = 0; i < n_sheet; i++) {
46       poly_.new_sheet();
47       unsigned n_vert;
48       vsl_b_read(is, n_vert);
49       for (unsigned j = 0; j < n_vert; j++) {
50         double x, y;
51         vsl_b_read(is, x);
52         vsl_b_read(is, y);
53         poly_.push_back(vgl_point_2d<double>(x, y));
54       }
55     }
56     if (name.compare("invalid") == 0)
57       prop_ = volm_land_layer(id, name, level, width, vil_rgb<vxl_byte>(0,0,0));
58     else
59       prop_ = volm_land_layer(id, name, level, width);
60   }
61   else {
62     std::cout << "volm_osm_object_polygon -- unknown binary io version " << ver << '\n';
63     return;
64   }
65 }
66 
vsl_b_write(vsl_b_ostream & os,const volm_osm_object_polygon * rptr)67 void vsl_b_write(vsl_b_ostream& os, const volm_osm_object_polygon* rptr)
68 {
69   if (rptr == nullptr) {
70     vsl_b_write(os, false);
71     return;
72   }
73   else
74     vsl_b_write(os, true);
75   auto* ptr = const_cast<volm_osm_object_polygon*>(rptr);
76   ptr->b_write(os);
77 }
78 
vsl_b_read(vsl_b_istream & is,volm_osm_object_polygon * & rptr)79 void vsl_b_read(vsl_b_istream& is, volm_osm_object_polygon*& rptr)
80 {
81   bool valid_ptr = false;
82   vsl_b_read(is, valid_ptr);
83   if (valid_ptr) {
84     rptr = new volm_osm_object_polygon();
85     rptr->b_read(is);
86     return;
87   }
88   rptr = nullptr;
89 }
90 
vsl_b_write(vsl_b_ostream & os,const volm_osm_object_polygon_sptr & sptr)91 void vsl_b_write(vsl_b_ostream& os, const volm_osm_object_polygon_sptr& sptr)
92 {
93   volm_osm_object_polygon* rptr = sptr.ptr();
94   vsl_b_write(os, rptr);
95 }
96 
vsl_b_read(vsl_b_istream & is,volm_osm_object_polygon_sptr & sptr)97 void vsl_b_read(vsl_b_istream& is, volm_osm_object_polygon_sptr& sptr)
98 {
99   volm_osm_object_polygon* rptr = nullptr;
100   vsl_b_read(is, rptr);
101   sptr = rptr;
102 }
103