VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtCoordinateConverter.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2022 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 
9 #pragma once
10 
11 #include <vrvUtil/vrvUtil.h>
12 
13 #include <matrix/geodeticCoord.h>
14 #include <matrix/utmReferencePoint.h>
15 #include <matrix/vlDcm.h>
16 #include <matrix/vlVector.h>
17 #include <string>
18 
19 namespace makVrv
20 {
21 
26 {
27 public:
28 
29  static const char* NoOp;
30  static const char* Geocentric;
31  static const char* UTM;
33  static const char* Lambert;
34  static const char* FlatEarth;
35  static const char* Cartesian;
36 
37 public:
38 
39  typedef DtCoordinateConverter* (*CreatorFn)();
40 
41 public:
42 
44  virtual ~DtCoordinateConverter();
45 
47  virtual const std::string& type() const;
48 
50  virtual DtCoordinateConverter* clone() const = 0;
51 
53  virtual bool init(const std::string& originstring) = 0;
54 
56  virtual std::string stringRep() = 0;
57 
59  virtual bool zIsAlt() const;
60 
62  virtual bool usesOffsetFile() const;
63 
66  virtual DtGeodeticCoord databaseOrigin() const;
67 
69  virtual void setGeocOriginOffset(const DtVector& offset){};
70 
73  virtual void reset();
74 
75  /* accessors for DCM's */
77  virtual const DtDcm& nedToCigDcm() const;
78 
80  virtual const DtDcm& cigToNedDcm() const;
81 
83  virtual const DtDcm& geocToCigDcm() const;
84 
87  virtual const DtDcm& cigToGeocDcm() const;
88 
90  virtual const DtDcm& geocToNedDcm() const;
91 
94 
96  virtual const DtDcm& cigToEnuDcm() const;
97 
99  virtual const DtDcm& nedToGeocDcm() const;
100 
101  /*************************** conversions **********************************/
103  virtual void geocToCig(const DtVector& geoc, DtVector& out) const = 0;
105  virtual void cigToGeoc(const DtVector& in, DtVector& geoc) const = 0;
106 
109  virtual void setupTopoFrame(const DtVector& truth);
110 
112  virtual void cigToEnu_coordTrans(const DtVector& cigPos,
113  DtVector& enuPos) const;
114 
116  virtual void cigToEnu_vecTrans(const DtVector& cigVec,
117  DtVector& enuVec) const;
118 
120  virtual void enuToCig_coordTrans(const DtVector& enuPos,
121  DtVector& cigPos) const;
122 
124  virtual void enuToCig_vecTrans(const DtVector& enuVec,
125  DtVector& cigVec) const;
126 
128  virtual DtTaitBryan nedToCig_EulerTrans(const DtTaitBryan& topo) const;
129 
130  /* ---------------------- Utilities ---------------------------- */
132  virtual DtVector up(const DtVector& orig) const;
133 
135  virtual void topoSurface(const DtVector& o, DtVector& surface) const;
136 
137  const DtDcm nedToEnuDcm() const
138  {
139  return myNedToEnuDcm;
140  }
141 
143  virtual bool isGeocentric(void) const;
144 public:
145 
146  static double convertToDouble(const std::string& str);
147  static double convertToDouble(const DtDegMinSec& dms);
148  // hemisphere should be 'N' or 'S', I have '_' to use the previous behavior
149  static DtDegMinSec convertToDmsLat(double deg, char hemisphere = '_');
150  static DtDegMinSec convertToDmsLon(double deg);
151 
153  static bool isCoordinateSystemProjected( const std::string& csType );
154 
155 protected:
156 
158  DtCoordinateConverter(const std::string& t);
159 
161  std::string polarDirectionToStr(int dir);
162 
164  std::string parseLatLng( const DtDegMinSec& lat, const DtDegMinSec& lng);
165 
166 private:
167 
170 
172  DtCoordinateConverter& operator=(const DtCoordinateConverter& orig);
173 
174 protected:
175 
177  std::string myType;
179  bool myZAlt;
180 
182  DtGeodeticCoord myGeodOrigin;
183 
187 
190 
193 
195  const DtDcm myNedToEnuDcm;
196 
199 
202 };
203 
205 void DT_DLL_VRVUTIL DtQuaternionToEulerDeg(const double x, const double y, const double z,
206  const double w, double& yawOut, double& pitchOut, double& rollOut);
207 
209 void DT_DLL_VRVUTIL DtQuaternionToEulerRad(const double x, const double y, const double z,
210  const double w, double& yawOut, double& pitchOut, double& rollOut);
211 
213 void DT_DLL_VRVUTIL DtEulerToQuaternionDeg(const double yaw, const double pitch , const double roll,
214  double& xOut, double& yOut, double& zOut, double& wOut);
215 
217 void DT_DLL_VRVUTIL DtEulerToQuaternionRad(const double yaw, const double pitch , const double roll,
218  double& xOut, double& yOut, double& zOut, double& wOut);
219 
220 }
DT_DLL_EXAMPLESCENEROOTPLUGIN void init(DtDe &anIG)
void DT_DLL_VRVUTIL DtQuaternionToEulerDeg(const double x, const double y, const double z, const double w, double &yawOut, double &pitchOut, double &rollOut)
Converts Quaternions to Eulers. Eulers are in degrees.
#define DT_DLL_VRVUTIL
Definition: vrvUtil.h:34
DtDcm myGeocToNedDcm
Definition: DtCoordinateConverter.h:186
DtGeodeticCoord myGeodOrigin
initializing system
Definition: DtCoordinateConverter.h:182
DtCoordinateConverter is the base class for &#39;local (cig) to geocentric&#39; converters.
Definition: DtCoordinateConverter.h:25
static const char * Geocentric
Does no conversion.
Definition: DtCoordinateConverter.h:30
const DtDcm myNedToEnuDcm
Definition: DtCoordinateConverter.h:195
void DT_DLL_VRVUTIL DtEulerToQuaternionRad(const double yaw, const double pitch, const double roll, double &xOut, double &yOut, double &zOut, double &wOut)
Converts from Eulers to Quaternions. Eulers are in degrees.
DtDcm myNedToGeocDcm
topo frame DCM&#39;s
Definition: DtCoordinateConverter.h:185
void DT_DLL_VRVUTIL DtEulerToQuaternionDeg(const double yaw, const double pitch, const double roll, double &xOut, double &yOut, double &zOut, double &wOut)
Converts from Eulers to Quaternions. Eulers are in degrees.
bool myUsesWarbreaker
Definition: DtCoordinateConverter.h:178
bool myZAlt
Definition: DtCoordinateConverter.h:179
Contains DLL export macros.
virtual void setGeocOriginOffset(const DtVector &offset)
set origin offset (geoc cig origin)
Definition: DtCoordinateConverter.h:69
DtDcm myNed2CigEulerDcm
to-euler DCM&#39;s
Definition: DtCoordinateConverter.h:198
DtDcm myGeocToCigDcm
Definition: DtCoordinateConverter.h:191
static const char * Lambert
Converts between UTM and geocentric.
Definition: DtCoordinateConverter.h:33
const DtDcm nedToEnuDcm() const
Definition: DtCoordinateConverter.h:137
std::string myType
flags
Definition: DtCoordinateConverter.h:177
DtDcm myCigToNedDcm
Definition: DtCoordinateConverter.h:189
static const char * NoOp
Definition: DtCoordinateConverter.h:29
static const char * FlatEarth
Converts between Lambert and geocentric.
Definition: DtCoordinateConverter.h:34
DtDcm myCigToGeocDcm
Definition: DtCoordinateConverter.h:192
DtDcm myCigToEnuDcm
Definition: DtCoordinateConverter.h:194
DtVector myLastLocation
DtCoordTransform myGeocToNedTransform;.
Definition: DtCoordinateConverter.h:201
void DT_DLL_VRVUTIL DtQuaternionToEulerRad(const double x, const double y, const double z, const double w, double &yawOut, double &pitchOut, double &rollOut)
Converts Quaternions to Eulers. Eulers are in radians.
voidpf uLong offset
Definition: ioapi.h:42
static const char * Cartesian
Converts between Flat Earth and geocentric.
Definition: DtCoordinateConverter.h:35
DtDcm myNedToCigDcm
Definition: DtCoordinateConverter.h:188

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)