OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
IncidenceAngles.cpp
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // "Copyright Centre National d'Etudes Spatiales"
4 //
5 // License: LGPL
6 //
7 // See LICENSE.txt file in the top level directory for more details.
8 //
9 //----------------------------------------------------------------------------
10 // $Id$
11 
12 #include <otb/IncidenceAngles.h>
13 #include <ossim/base/ossimDpt3d.h>
15 #include <ossim/base/ossimNotify.h>
16 #include <ossim/base/ossimString.h>
17 
18 
19 namespace ossimplugins
20 {
21 static const char INCIDENCE_ANGLES[] = "incidenceAngles";
22 static const char NUMBER_OF_CORNER_INCIDENCE_ANGLES[] = "numberOfCornerIncidenceAngles";
23 static const char CENTER_INCIDENCE_ANGLE[] = "centerInfoIncidenceAngle";
24 static const char CORNERS_INCIDENCE_ANGLE[] = "cornersInfoIncidenceAngle";
25 
27  _numberOfCornerIncidenceAngles(0),
28  _centerInfoIncidenceAngle(),
29  _tabCornersInfoIncidenceAngle()
30 {
31 }
32 
34 {
35 }
36 
37 
39  _numberOfCornerIncidenceAngles(rhs._numberOfCornerIncidenceAngles),
40  _centerInfoIncidenceAngle(rhs._centerInfoIncidenceAngle),
41  _tabCornersInfoIncidenceAngle(rhs._tabCornersInfoIncidenceAngle)
42 {
43 }
44 
46 {
50  return *this;
51 }
52 
53 bool IncidenceAngles::saveState(ossimKeywordlist& kwl, const char* prefix) const
54 {
55  std::string pfx("");
56  std::string pfx2("");
57  if (prefix)
58  {
59  pfx = prefix;
60  }
61  pfx += INCIDENCE_ANGLES;
62  pfx2 = pfx;
63  pfx2 += ".";
64 
65  kwl.add(pfx2.c_str(), NUMBER_OF_CORNER_INCIDENCE_ANGLES, _numberOfCornerIncidenceAngles);
66 
67  std::string s = pfx + "." + CENTER_INCIDENCE_ANGLE;
68  _centerInfoIncidenceAngle.saveState(kwl, s.c_str());
69 
70  std::string s2 =pfx + "." + CORNERS_INCIDENCE_ANGLE;
71  for (unsigned int i = 0; i < _tabCornersInfoIncidenceAngle.size(); ++i)
72  {
73  std::string s3 = s2 + "[" + ossimString::toString(i).c_str() + "]";
74  _tabCornersInfoIncidenceAngle[i].saveState(kwl, s3.c_str());
75  }
76 
77  return true;
78 }
79 
80 bool IncidenceAngles::loadState(const ossimKeywordlist& kwl, const char* prefix)
81 {
82  static const char MODULE[] = "IncidenceAngles::loadState";
83 
84  bool result = true;
85 
86  ossimString s;
87  const char* lookup = 0;
88 
89  std::string pfx("");
90  if (prefix)
91  {
92  pfx = prefix;
93  }
94  pfx += INCIDENCE_ANGLES;
95  pfx += ".";
96 
97 
98  lookup = kwl.find(pfx.c_str(), NUMBER_OF_CORNER_INCIDENCE_ANGLES);
99 
100  if (lookup)
101  {
102  s = lookup;
104  }
105  else
106  {
108  << MODULE << " Keyword not found: " << NUMBER_OF_CORNER_INCIDENCE_ANGLES << " in "<<pfx.c_str()<<" path.\n";
109  result = false;
110  }
111 
112  std::string s1 = pfx + CENTER_INCIDENCE_ANGLE;
113 
114  result = _centerInfoIncidenceAngle.loadState(kwl, s1.c_str());
115 
117  std::string s2 = pfx + CORNERS_INCIDENCE_ANGLE;
118  for (unsigned int i = 0; i < _numberOfCornerIncidenceAngles; ++i)
119  {
120  std::string s3 = s2 + "[" + ossimString::toString(i).c_str() + "]";
121  InfoIncidenceAngle iia;
122  result = iia.loadState(kwl, s3.c_str());
123  _tabCornersInfoIncidenceAngle.push_back(iia);
124  }
126  {
128  << MODULE << " Keyword " << NUMBER_OF_CORNER_INCIDENCE_ANGLES << " is different with the number of ImageNoise nodes \n";
129  }
130 
131  return result;
132 }
133 
134 
136 {
137  out << setprecision(15) << setiosflags(ios::fixed)
138  << "\n IncidentAngles class data members:\n";
139 
140  const char* prefix = 0;
141  ossimKeywordlist kwl;
142  ossimString pfx;
143  pfx += INCIDENCE_ANGLES;
144  ossimString s = pfx + "." + NUMBER_OF_CORNER_INCIDENCE_ANGLES;
145  kwl.add(prefix, s.c_str(), _numberOfCornerIncidenceAngles);
146 
147  ossimString s1 = pfx + "." + CENTER_INCIDENCE_ANGLE;
149 
150  ossimString s2 =pfx + "." + CORNERS_INCIDENCE_ANGLE;
151  for (unsigned int i = 0; i < _tabCornersInfoIncidenceAngle.size(); ++i)
152  {
153  ossimString s3 = s2 + "[" + ossimString::toString(i) + "]";
154  _tabCornersInfoIncidenceAngle[i].saveState(kwl, s3.c_str());
155  }
156  out << kwl;
157 
158  return out;
159 }
160 
161 }
This class represents an InfoIncidenceAngle.
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
Represents serializable keyword/value map.
ossim_uint32 _numberOfCornerIncidenceAngles
Number of incidence angles.
const char * find(const char *key) const
IncidenceAngles & operator=(const IncidenceAngles &rhs)
Affectation operator.
static ossimString toString(bool aValue)
Numeric to string methods.
ossim_uint32 toUInt32() const
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual std::ostream & print(std::ostream &out) const
std::vector< InfoIncidenceAngle > _tabCornersInfoIncidenceAngle
Corners InfoIncidenceAngle.
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
This class represents Incidence Angles.
InfoIncidenceAngle _centerInfoIncidenceAngle
Center InfoIncidenceAngle.
virtual ~IncidenceAngles()
Destructor.
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23