VR-Forces 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 
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 
58  DtCoordinateSystem& operator=(const DtCoordinateSystem&) = delete;
59 
62  const std::string& type() const;
63 
67  bool isGeocentric() const;
68 
70  const std::string& parameters() const;
71 
74  bool set(const std::string& type, const std::string& origin);
75 
79  bool addConverter(const std::string& t, DtCoordinateConverter* converter);
80 
82  DtCoordinateConverter* converter() const;
83 
85  DtCoordinateConverter* converter(const std::string& type) const;
86 
88  virtual DtCoordinateDisplay* display(
90 
91  virtual DtCoordinateDisplay* display(
92  const DtUnicode& coordSysName ) const;
93 
95  virtual DtCoordinateDisplayCollection& displays();
96  virtual const DtCoordinateDisplayCollection& displays() const;
97 
99  virtual DtUnitConverterCollection& units();
100  virtual const DtUnitConverterCollection& units() const;
101 
103  DtNoOpCoordinateConverter* noopConverter();
104  const DtNoOpCoordinateConverter* noopConverter() const;
105 
107  DtUtmCoordinateConverter* utmConverter() ;
108  const DtUtmCoordinateConverter* utmConverter() const;
109 
111  DtLambertCoordinateConverter* lambertConverter() ;
112  const DtLambertCoordinateConverter* lambertConverter() const;
113 
115  DtCartesianCoordinateConverter* cartesianConverter() ;
116  const DtCartesianCoordinateConverter* cartesianConverter() const;
117 
119  DtGeocentricCoordinateConverter* geocentricConverter() ;
120  const DtGeocentricCoordinateConverter* geocentricConverter() const;
121 
123  DtFlatEarthCoordinateConverter* flatEarthConverter() ;
124  const DtFlatEarthCoordinateConverter* flatEarthConverter() const;
125 
132  void setUseTopoForFlatEarthVectorConversion( bool flag );
133  bool useTopoForFlatEarthVectorConversion() const;
134 
136  const DtMapDatum& datum() const;
137 
141  void setDatum(const DtMapDatum& datum);
142 
145  void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
146  void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
147  void netToLocalVec(const DtVector& localpos, const DtVector32& netvec, DtVector32& localvec) const;
148  void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
149  void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;
150  void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
151 
152 
154  /* FIXME: This function does not work
155  inline void netToLocalPos(const double netpos[3], double localpos[3]) const
156  {
157  DtVector localpos_v;
158  DtVector netpos_v;
159  memcpy(&netpos_v,netpos,sizeof(netpos));
160  netToLocalPos( netpos_v, localpos_v);
161  memcpy(localpos,&localpos_v,sizeof(localpos));
162  }*/
163 
165  void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
166 
169  void localToNetPos( const DtVector& localpos, DtVector& netpos) const;
170  void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
171  void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
172  void localToNetVec(const DtVector& localpos, const DtVector32& localvec, DtVector32& netvec) const;
173 
175  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
176  {
177  DtVector localpos_v;
178  memcpy(&localpos_v,localpos,sizeof(localpos));
179  DtVector netpos_v;
180  localToNetPos( localpos_v, netpos_v);
181  memcpy(netpos,&netpos_v,sizeof(netpos));
182  }
183 
185  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
186 
187  public:
188 
190  static DtCoordinateConverterFactory& converterFactory();
191 
195  static void setCreator(CoordinateSystemCreatorFn fn);
196 
198  static const DtReferenceEllipsoid* referenceEllipsoid();
201 
202 
203  protected:
204 
207 
210 
211  protected:
212 
213  typedef std::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
214 
218 
222 
223  protected:
224 
225  static CoordinateSystemCreatorFn theCreatorFn;
226  static CoordinateSystemCloneFn theCloneFn;
228  static DtReferenceEllipsoid* theReferenceEllipsoidPtr;
229  };
230 
231 }
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:216
#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:220
static DtCoordinateConverterFactory theCoordConverterFactory
Definition: DtCoordinateSystem.h:227
static CoordinateSystemCloneFn theCloneFn
Definition: DtCoordinateSystem.h:226
ConverterMap myConverters
Definition: DtCoordinateSystem.h:215
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
Contains DLL export macros.
Instances of vpNetLambertCoordConverter provide transformations and utilities for converting between ...
Definition: DtLambertCoordinateConverter.h:21
static CoordinateSystemCreatorFn theCreatorFn
Definition: DtCoordinateSystem.h:225
std::string myCoordinateSystemParameters
Definition: DtCoordinateSystem.h:217
static DtReferenceEllipsoid * theReferenceEllipsoidPtr
Definition: DtCoordinateSystem.h:228
Repository for all unit converters. Provides utility functions for converting value units without hav...
Definition: DtUnitConverterCollection.h:28
bool myUseTopoForFlatEarthVectorConversion
Definition: DtCoordinateSystem.h:221
DtCoordinateDisplayCollection * myDisplays
Definition: DtCoordinateSystem.h:219
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:175
std::unordered_map< std::string, DtCoordinateConverter * > ConverterMap
Definition: DtCoordinateSystem.h:213
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:20
Instances of DtGeocentricCoordinateConverter provide transformations and utilities for converting bet...
Definition: DtGeocentricCoordinateConverter.h:20
Contains the DtDisplayUnitsSettingsRecord class declaration.

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)