VR-Forces 4.8 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  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 }
Instances of DtUtmCoordSystem provide transformations and utilities for converting between network an...
Definition: DtUtmCoordinateConverter.h:23
A unicode string.
Definition: DtUnicode.h:33
DtCoordinateConverter * myCurrentConverter
Definition: DtCoordinateSystem.h:218
#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:23
Abstract interface class for all coordinate system displays.
Definition: DtCoordinateDisplay.h:27
voidpf uLong int origin
Definition: ioapi.h:42
DtUnitConverterCollection * myUnits
Definition: DtCoordinateSystem.h:222
static DtCoordinateConverterFactory theCoordConverterFactory
Definition: DtCoordinateSystem.h:229
static CoordinateSystemCloneFn theCloneFn
Definition: DtCoordinateSystem.h:228
ConverterMap myConverters
Definition: DtCoordinateSystem.h:217
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:23
Contains DLL export macros.
Instances of vpNetLambertCoordConverter provide transformations and utilities for converting between ...
Definition: DtLambertCoordinateConverter.h:24
static CoordinateSystemCreatorFn theCreatorFn
Definition: DtCoordinateSystem.h:227
std::string myCoordinateSystemParameters
Definition: DtCoordinateSystem.h:219
static DtReferenceEllipsoid * theReferenceEllipsoidPtr
Definition: DtCoordinateSystem.h:230
Repository for all unit converters.
Definition: DtUnitConverterCollection.h:28
bool myUseTopoForFlatEarthVectorConversion
Definition: DtCoordinateSystem.h:223
DtCoordinateDisplayCollection * myDisplays
Definition: DtCoordinateSystem.h:221
Instances of DtCartesianCoordinateConverter provide transformations and utilities for converting betw...
Definition: DtCartesianCoordinateConverter.h:26
vpNetNoOpCoordConverter does no coordinate conversions
Definition: DtNoOpCoordinateConverter.h:22
void localToNetPos(const double(&localpos)[3], double(&netpos)[3]) const
These functions are useful for converting raw double values coords.
Definition: DtCoordinateSystem.h:172
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
A factory class for holding coordinate convertor creators.
Definition: DtCoordinateConverterFactory.h:23
boost::unordered_map< std::string, DtCoordinateConverter * > ConverterMap
Definition: DtCoordinateSystem.h:215
Instances of DtGeocentricCoordinateConverter provide transformations and utilities for converting bet...
Definition: DtGeocentricCoordinateConverter.h:20
Contains the DtDisplayUnitsSettingsRecord class declaration.

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)