VR-Forces 5.0.1 Developer's Guide
 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) 2022 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 
9 #pragma once
10 #include <vrvUtil/vrvUtil.h>
12 #include <matrix/vlVector.h>
13 
14 #include <unordered_map>
15 
16 class DtMapDatum;
17 class DtTaitBryan;
18 class DtDcm;
19 class DtReferenceEllipsoid;
20 
21 namespace makVrv
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  class DtWorldMagneticModel;
37 
42  {
43  public:
44 
45  typedef DtCoordinateSystem* (*CoordinateSystemCreatorFn)();
46  typedef DtCoordinateSystem* (*CoordinateSystemCloneFn)(const DtCoordinateSystem&);
47  typedef void (*TypeChangedFn)(DtCoordinateSystem*, void*);
48 
50  static DtCoordinateSystem* create();
51 
53  DtCoordinateSystem* clone() const;
54 
56  virtual ~DtCoordinateSystem();
57 
59  DtCoordinateSystem& operator=(const DtCoordinateSystem&) = delete;
60 
63  const std::string& type() const;
64 
68  bool isGeocentric() const;
69 
71  const std::string& parameters() const;
72 
75  bool set(const std::string& type, const std::string& origin);
76 
80  bool addConverter(const std::string& t, DtCoordinateConverter* converter);
81 
83  DtCoordinateConverter* converter() const;
84 
86  DtCoordinateConverter* converter(const std::string& type) const;
87 
89  virtual DtCoordinateDisplay* display(
91 
92  virtual DtCoordinateDisplay* display(
93  const DtUnicode& coordSysName ) const;
94 
96  virtual DtCoordinateDisplayCollection& displays();
97  virtual const DtCoordinateDisplayCollection& displays() const;
98 
100  virtual DtUnitConverterCollection& units();
101  virtual const DtUnitConverterCollection& units() const;
102 
104  DtNoOpCoordinateConverter* noopConverter();
105  const DtNoOpCoordinateConverter* noopConverter() const;
106 
108  DtUtmCoordinateConverter* utmConverter() ;
109  const DtUtmCoordinateConverter* utmConverter() const;
110 
112  DtLambertCoordinateConverter* lambertConverter() ;
113  const DtLambertCoordinateConverter* lambertConverter() const;
114 
116  DtCartesianCoordinateConverter* cartesianConverter() ;
117  const DtCartesianCoordinateConverter* cartesianConverter() const;
118 
120  DtGeocentricCoordinateConverter* geocentricConverter() ;
121  const DtGeocentricCoordinateConverter* geocentricConverter() const;
122 
124  DtFlatEarthCoordinateConverter* flatEarthConverter() ;
125  const DtFlatEarthCoordinateConverter* flatEarthConverter() const;
126 
133  void setUseTopoForFlatEarthVectorConversion( bool flag );
134  bool useTopoForFlatEarthVectorConversion() const;
135 
137  const DtMapDatum& datum() const;
138 
142  void setDatum(const DtMapDatum& datum);
143 
146  void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
147  void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
148  void netToLocalVec(const DtVector& localpos, const DtVector32& netvec, DtVector32& localvec) const;
149  void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
150  void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;
151  void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
152 
153 
155  /* FIXME: This function does not work
156  inline void netToLocalPos(const double netpos[3], double localpos[3]) const
157  {
158  DtVector localpos_v;
159  DtVector netpos_v;
160  memcpy(&netpos_v,netpos,sizeof(netpos));
161  netToLocalPos( netpos_v, localpos_v);
162  memcpy(localpos,&localpos_v,sizeof(localpos));
163  }*/
164 
166  void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
167 
170  void localToNetPos( const DtVector& localpos, DtVector& netpos) const;
171  void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
172  void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
173  void localToNetVec(const DtVector& localpos, const DtVector32& localvec, DtVector32& netvec) const;
174 
176  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
177  {
178  DtVector localpos_v;
179  memcpy(&localpos_v,localpos,sizeof(localpos));
180  DtVector netpos_v;
181  localToNetPos( localpos_v, netpos_v);
182  memcpy(netpos,&netpos_v,sizeof(netpos));
183  }
184 
186  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
187 
191  virtual bool createWorldMagneticModel(time_t unixTime);
192 
195  virtual DtWorldMagneticModel* findWorldMagneticModel() const;
196 
197  public:
198 
200  static DtCoordinateConverterFactory& converterFactory();
201 
205  static void setCreator(CoordinateSystemCreatorFn fn);
206 
208  static const DtReferenceEllipsoid* referenceEllipsoid();
211 
212 
213  protected:
214 
217 
220 
221  protected:
222 
223  typedef std::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
224 
228 
232 
234 
235  protected:
236 
237  static CoordinateSystemCreatorFn theCreatorFn;
238  static CoordinateSystemCloneFn theCloneFn;
240  static DtReferenceEllipsoid* theReferenceEllipsoidPtr;
241  };
242 
243 }
Instances of DtUtmCoordSystem provide transformations and utilities for converting between network an...
Definition: DtUtmCoordinateConverter.h:21
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
DtCoordinateConverter * myCurrentConverter
Definition: DtCoordinateSystem.h:226
#define DT_DLL_VRVUTIL
Definition: vrvUtil.h:34
DtCoordinateConverter is the base class for &#39;local (cig) to geocentric&#39; converters.
Definition: DtCoordinateConverter.h:25
Instances of DtFlatCigManager provide transformations and utilities for converting between Cig and Fl...
Definition: DtFlatEarthCoordinateConverter.h:20
Abstract interface class for all coordinate system displays.
Definition: DtCoordinateDisplay.h:24
voidpf uLong int origin
Definition: ioapi.h:42
DtUnitConverterCollection * myUnits
Definition: DtCoordinateSystem.h:230
static DtCoordinateConverterFactory theCoordConverterFactory
Definition: DtCoordinateSystem.h:239
Contains the interface to the world magnetic model. The class utilizes the WMM c code provided by NOA...
Definition: DtWorldMagneticModel.h:37
static CoordinateSystemCloneFn theCloneFn
Definition: DtCoordinateSystem.h:238
ConverterMap myConverters
Definition: DtCoordinateSystem.h:225
CoordSys
Enumeration of the different coordinate system types.
Definition: DtDisplayUnitsSettingsRecord.h:30
Collection of DtCoordinateSystemDisplay objects for displaying coordinates in multiple coordinate sys...
Definition: DtCoordinateDisplayCollection.h:20
DtWorldMagneticModel * myWorldMagneticModel
Definition: DtCoordinateSystem.h:233
Contains DLL export macros.
Instances of vpNetLambertCoordConverter provide transformations and utilities for converting between ...
Definition: DtLambertCoordinateConverter.h:21
static CoordinateSystemCreatorFn theCreatorFn
Definition: DtCoordinateSystem.h:237
std::string myCoordinateSystemParameters
Definition: DtCoordinateSystem.h:227
static DtReferenceEllipsoid * theReferenceEllipsoidPtr
Definition: DtCoordinateSystem.h:240
Repository for all unit converters. Provides utility functions for converting value units without hav...
Definition: DtUnitConverterCollection.h:27
bool myUseTopoForFlatEarthVectorConversion
Definition: DtCoordinateSystem.h:231
DtCoordinateDisplayCollection * myDisplays
Definition: DtCoordinateSystem.h:229
Instances of DtCartesianCoordinateConverter provide transformations and utilities for converting betw...
Definition: DtCartesianCoordinateConverter.h:23
vpNetNoOpCoordConverter does no coordinate conversions
Definition: DtNoOpCoordinateConverter.h:19
void localToNetPos(const double(&localpos)[3], double(&netpos)[3]) const
These functions are useful for converting raw double values coords.
Definition: DtCoordinateSystem.h:176
std::unordered_map< std::string, DtCoordinateConverter * > ConverterMap
Definition: DtCoordinateSystem.h:223
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:41
A factory class for holding coordinate convertor creators.
Definition: DtCoordinateConverterFactory.h:20
Instances of DtGeocentricCoordinateConverter provide transformations and utilities for converting bet...
Definition: DtGeocentricCoordinateConverter.h:20
Contains the DtDisplayUnitsSettingsRecord class declaration.

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)