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