VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtCoordinateSystem.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2018 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 
9 #pragma once
10 #include <vrvUtil/vrvUtil.h>
12 #include <matrix/vlVector.h>
13 #include <boost/unordered_map.hpp>
14 
15 class DtMapDatum;
16 class DtTaitBryan;
17 class DtDcm;
18 class DtReferenceEllipsoid;
19 
20 namespace makVrv
21 {
22 
23  class DtNoOpCoordinateConverter;
24  class DtFlatEarthCoordinateConverter;
25  class DtGeocentricCoordinateConverter;
26  class DtUtmCoordinateConverter;
27  class DtCartesianCoordinateConverter;
28  class DtLambertCoordinateConverter;
29  class DtCoordinateConverterFactory;
30  class DtCoordinateConverter;
31 
32  class DtCoordinateDisplay;
33  class DtCoordinateDisplayCollection;
34  class DtUnitConverterCollection;
35  class DtUnicode;
36 
41  {
42  public:
43 
44  typedef DtCoordinateSystem* (*CoordinateSystemCreatorFn)();
45  typedef DtCoordinateSystem* (*CoordinateSystemCloneFn)(const DtCoordinateSystem&);
46  typedef void (*TypeChangedFn)(DtCoordinateSystem*, void*);
47 
49  static DtCoordinateSystem* create();
50 
52  DtCoordinateSystem* clone() const;
53 
55  virtual ~DtCoordinateSystem();
56 
59  const std::string& type() const;
60 
64  bool isGeocentric() const;
65 
67  const std::string& parameters() const;
68 
71  bool set(const std::string& type, const std::string& origin);
72 
76  bool addConverter(const std::string& t, DtCoordinateConverter* converter);
77 
79  DtCoordinateConverter* converter() const;
80 
82  DtCoordinateConverter* converter(const std::string& type) const;
83 
85  virtual DtCoordinateDisplay* display(
87 
88  virtual DtCoordinateDisplay* display(
89  const DtUnicode& coordSysName ) const;
90 
92  virtual DtCoordinateDisplayCollection& displays();
93  virtual const DtCoordinateDisplayCollection& displays() const;
94 
96  virtual DtUnitConverterCollection& units();
97  virtual const DtUnitConverterCollection& units() const;
98 
100  DtNoOpCoordinateConverter* noopConverter();
101  const DtNoOpCoordinateConverter* noopConverter() const;
102 
104  DtUtmCoordinateConverter* utmConverter() ;
105  const DtUtmCoordinateConverter* utmConverter() const;
106 
108  DtLambertCoordinateConverter* lambertConverter() ;
109  const DtLambertCoordinateConverter* lambertConverter() const;
110 
112  DtCartesianCoordinateConverter* cartesianConverter() ;
113  const DtCartesianCoordinateConverter* cartesianConverter() const;
114 
116  DtGeocentricCoordinateConverter* geocentricConverter() ;
117  const DtGeocentricCoordinateConverter* geocentricConverter() const;
118 
120  DtFlatEarthCoordinateConverter* flatEarthConverter() ;
121  const DtFlatEarthCoordinateConverter* flatEarthConverter() const;
122 
129  void setUseTopoForFlatEarthVectorConversion( bool flag );
130  bool useTopoForFlatEarthVectorConversion() const;
131 
133  const DtMapDatum& datum() const;
134 
138  void setDatum(const DtMapDatum& datum);
139 
142  void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
143  void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
144  void netToLocalVec(const DtVector& localpos, const DtVector32& netvec, DtVector32& localvec) const;
145  void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
146  void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;
147  void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
148 
149 
151  /* FIXME: This function does not work
152  inline void netToLocalPos(const double netpos[3], double localpos[3]) const
153  {
154  DtVector localpos_v;
155  DtVector netpos_v;
156  memcpy(&netpos_v,netpos,sizeof(netpos));
157  netToLocalPos( netpos_v, localpos_v);
158  memcpy(localpos,&localpos_v,sizeof(localpos));
159  }*/
160 
162  void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
163 
166  void localToNetPos( const DtVector& localpos, DtVector& netpos) const;
167  void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
168  void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
169  void localToNetVec(const DtVector& localpos, const DtVector32& localvec, DtVector32& netvec) const;
170 
172  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
173  {
174  DtVector localpos_v;
175  memcpy(&localpos_v,localpos,sizeof(localpos));
176  DtVector netpos_v;
177  localToNetPos( localpos_v, netpos_v);
178  memcpy(netpos,&netpos_v,sizeof(netpos));
179  }
180 
182  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
183 
184  public:
185 
187  static DtCoordinateConverterFactory& converterFactory();
188 
192  static void setCreator(CoordinateSystemCreatorFn fn);
193 
195 
196  static const DtReferenceEllipsoid* referenceEllipsoid();
198 
199 
200  protected:
201 
204 
207 
208  private:
209 
211  DtCoordinateSystem& operator=(const DtCoordinateSystem&);
212 
213  protected:
214 
215  typedef boost::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
216 
220 
224 
225  protected:
226 
227  static CoordinateSystemCreatorFn theCreatorFn;
228  static CoordinateSystemCloneFn theCloneFn;
230  static DtReferenceEllipsoid* theReferenceEllipsoidPtr;
231 
232 
233 
234  };
235 
236 }

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)