1 #include "vpgl_io_lvcs.h"
2 //:
3 // \file
4 #include "vpgl/vpgl_lvcs.h"
5 #include <vnl/io/vnl_io_matrix_fixed.h>
6 
7 void
vsl_b_write(vsl_b_ostream & os,vpgl_lvcs const & lvcs)8 vsl_b_write(vsl_b_ostream & os, vpgl_lvcs const & lvcs)
9 {
10   if (!os)
11     return;
12   unsigned version = 1;
13   vsl_b_write(os, version);
14   auto csn = static_cast<unsigned>(lvcs.get_cs_name());
15   vsl_b_write(os, csn);
16   double lat, lon, elev;
17   lvcs.get_origin(lat, lon, elev);
18   vsl_b_write(os, lat);
19   vsl_b_write(os, lon);
20   vsl_b_write(os, elev);
21   double lat_scale, lon_scale;
22   lvcs.get_scale(lat_scale, lon_scale);
23   vsl_b_write(os, lat_scale);
24   vsl_b_write(os, lon_scale);
25   auto gaunit = static_cast<unsigned>(lvcs.geo_angle_unit());
26   vsl_b_write(os, gaunit);
27   auto xyzunit = static_cast<unsigned>(lvcs.local_length_unit());
28   vsl_b_write(os, xyzunit);
29   double lox, loy, theta;
30   lvcs.get_transform(lox, loy, theta);
31   vsl_b_write(os, lox);
32   vsl_b_write(os, loy);
33   vsl_b_write(os, theta);
34 }
35 
36 //: Binary load lvcs from stream.
37 void
vsl_b_read(vsl_b_istream & is,vpgl_lvcs & lvcs)38 vsl_b_read(vsl_b_istream & is, vpgl_lvcs & lvcs)
39 {
40   if (!is)
41     return;
42   short ver;
43   vsl_b_read(is, ver);
44   switch (ver)
45   {
46     case 1: {
47       unsigned cs_name;
48       vsl_b_read(is, cs_name);
49       auto name = static_cast<vpgl_lvcs::cs_names>(cs_name);
50       double lat, lon, elev, lat_scale, lon_scale;
51       vsl_b_read(is, lat);
52       vsl_b_read(is, lon);
53       vsl_b_read(is, elev);
54       vsl_b_read(is, lat_scale);
55       vsl_b_read(is, lon_scale);
56       unsigned gaunit;
57       vsl_b_read(is, gaunit);
58       auto geo_angle_unit = static_cast<vpgl_lvcs::AngUnits>(gaunit);
59       unsigned lunit;
60       vsl_b_read(is, lunit);
61       auto localXYZUnit = static_cast<vpgl_lvcs::LenUnits>(lunit);
62       double lox, loy, theta;
63       vsl_b_read(is, lox);
64       vsl_b_read(is, loy);
65       vsl_b_read(is, theta);
66       vpgl_lvcs temp(lat, lon, elev, name, lat_scale, lon_scale, geo_angle_unit, localXYZUnit, lox, loy, theta);
67       lvcs = temp;
68       break;
69     }
70     default:
71       std::cerr << "I/O ERROR: vpgl_lvcs::b_read(vsl_b_istream&)\n"
72                 << "           Unknown version number " << ver << '\n';
73       is.is().clear(std::ios::badbit); // Set an unrecoverable IO error on stream
74       return;
75   }
76 }
77 
78 //: Print human readable summary of object to a stream
79 void
vsl_print_summary(std::ostream & os,const vpgl_lvcs & c)80 vsl_print_summary(std::ostream & os, const vpgl_lvcs & c)
81 {
82   os << c << '\n';
83 }
84 
85 //: Binary save lvcs sptr to stream
86 void
vsl_b_write(vsl_b_ostream & os,vpgl_lvcs_sptr const & lvcs_sptr)87 vsl_b_write(vsl_b_ostream & os, vpgl_lvcs_sptr const & lvcs_sptr)
88 {
89   if (!lvcs_sptr)
90     return;
91   vpgl_lvcs * lvcs = lvcs_sptr.ptr();
92   vsl_b_write(os, *lvcs);
93 }
94 
95 //: Binary load lvcs sptr from stream.
96 void
vsl_b_read(vsl_b_istream & is,vpgl_lvcs_sptr & lvcs_sptr)97 vsl_b_read(vsl_b_istream & is, vpgl_lvcs_sptr & lvcs_sptr)
98 {
99   vpgl_lvcs * lvcs = nullptr;
100   vsl_b_read(is, *lvcs);
101   lvcs_sptr = lvcs;
102 }
103