VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtCoordinateSystem.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2003 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: DtCoordinateSystem.h,v $ $Revision: 1.14 $ $State: Exp $
7 *********************************************************************/
8 
11 
12 #pragma once
13 #include <vrvUtil/vrvUtil.h>
15 #include <matrix/vlVector.h>
16 #include <boost/unordered_map.hpp>
17 
18 class DtMapDatum;
19 class DtTaitBryan;
20 class DtDcm;
21 
22 namespace makVrv
23 {
24 
25  class DtNoOpCoordinateConverter;
26  class DtFlatEarthCoordinateConverter;
27  class DtGeocentricCoordinateConverter;
28  class DtUtmCoordinateConverter;
29  class DtCartesianCoordinateConverter;
30  class DtLambertCoordinateConverter;
31  class DtCoordinateConverterFactory;
32  class DtCoordinateConverter;
33 
34  class DtCoordinateDisplay;
35  class DtCoordinateDisplayCollection;
36  class DtUnitConverterCollection;
37  class DtUnicode;
38 
43  {
44  public:
45 
46  typedef DtCoordinateSystem* (*CoordinateSystemCreatorFn)();
47  typedef DtCoordinateSystem* (*CoordinateSystemCloneFn)(const DtCoordinateSystem&);
48  typedef void (*TypeChangedFn)(DtCoordinateSystem*, void*);
49 
51  static DtCoordinateSystem* create();
52 
54  DtCoordinateSystem* clone() const;
55 
57  virtual ~DtCoordinateSystem();
58 
61  const std::string& type() const;
62 
66  bool isGeocentric() const;
67 
69  const std::string& parameters() const;
70 
73  bool set(const std::string& type, const std::string& origin);
74 
78  bool addConverter(const std::string& t, DtCoordinateConverter* converter);
79 
81  DtCoordinateConverter* converter() const;
82 
84  DtCoordinateConverter* converter(const std::string& type) const;
85 
87  virtual DtCoordinateDisplay* display(
89 
90  virtual DtCoordinateDisplay* display(
91  const DtUnicode& coordSysName ) const;
92 
94  virtual DtCoordinateDisplayCollection& displays();
95  virtual const DtCoordinateDisplayCollection& displays() const;
96 
98  virtual DtUnitConverterCollection& units();
99  virtual const DtUnitConverterCollection& units() const;
100 
102  DtNoOpCoordinateConverter* noopConverter();
103  const DtNoOpCoordinateConverter* noopConverter() const;
104 
106  DtUtmCoordinateConverter* utmConverter() ;
107  const DtUtmCoordinateConverter* utmConverter() const;
108 
110  DtLambertCoordinateConverter* lambertConverter() ;
111  const DtLambertCoordinateConverter* lambertConverter() const;
112 
114  DtCartesianCoordinateConverter* cartesianConverter() ;
115  const DtCartesianCoordinateConverter* cartesianConverter() const;
116 
118  DtGeocentricCoordinateConverter* geocentricConverter() ;
119  const DtGeocentricCoordinateConverter* geocentricConverter() const;
120 
122  DtFlatEarthCoordinateConverter* flatEarthConverter() ;
123  const DtFlatEarthCoordinateConverter* flatEarthConverter() const;
124 
131  void setUseTopoForFlatEarthVectorConversion( bool flag );
132  bool useTopoForFlatEarthVectorConversion() const;
133 
135  const DtMapDatum& datum() const;
136 
140  void setDatum(const DtMapDatum& datum);
141 
144  void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
145  void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
146  void netToLocalVec(const DtVector& localpos, const DtVector32& netvec, DtVector32& localvec) const;
147  void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
148  void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;
149  void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
150 
151 
153  /* FIXME: This function does not work
154  inline void netToLocalPos(const double netpos[3], double localpos[3]) const
155  {
156  DtVector localpos_v;
157  DtVector netpos_v;
158  memcpy(&netpos_v,netpos,sizeof(netpos));
159  netToLocalPos( netpos_v, localpos_v);
160  memcpy(localpos,&localpos_v,sizeof(localpos));
161  }*/
162 
164  void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
165 
168  void localToNetPos( const DtVector& localpos, DtVector& netpos) const;
169  void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
170  void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
171  void localToNetVec(const DtVector& localpos, const DtVector32& localvec, DtVector32& netvec) const;
172 
174  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
175  {
176  DtVector localpos_v;
177  memcpy(&localpos_v,localpos,sizeof(localpos));
178  DtVector netpos_v;
179  localToNetPos( localpos_v, netpos_v);
180  memcpy(netpos,&netpos_v,sizeof(netpos));
181  }
182 
184  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
185 
186  public:
187 
189  static DtCoordinateConverterFactory& converterFactory();
190 
194  static void setCreator(CoordinateSystemCreatorFn fn);
195 
196  protected:
197 
200 
203 
204  private:
205 
207  DtCoordinateSystem& operator=(const DtCoordinateSystem&);
208 
209  protected:
210 
211  typedef boost::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
212 
215  DtMapDatum* myCurrentDatum;
217 
221 
222  protected:
223 
224  static CoordinateSystemCreatorFn theCreatorFn;
225  static CoordinateSystemCloneFn theCloneFn;
227 
228 
229 
230  };
231 
232 }

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)