VR-Forces 4.3 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>
14 #include <vrvUtil/DtUnicode.h>
16 #include <matrix/vlVector.h>
17 #include <boost/unordered_map.hpp>
18 #include <string>
19 
20 class DtMapDatum;
21 class DtTaitBryan;
22 class DtDcm;
23 
24 namespace makVrv
25 {
26 
27  class DtNoOpCoordinateConverter;
28  class DtFlatEarthCoordinateConverter;
29  class DtGeocentricCoordinateConverter;
30  class DtUtmCoordinateConverter;
31  class DtCartesianCoordinateConverter;
32  class DtLambertCoordinateConverter;
33  class DtCoordinateConverterFactory;
35 
36  class DtCoordinateDisplay;
37  class DtCoordinateDisplayCollection;
38  class DtUnitConverterCollection;
39 
44  {
45  public:
46 
47  typedef DtCoordinateSystem* (*CoordinateSystemCreatorFn)();
48  typedef DtCoordinateSystem* (*CoordinateSystemCloneFn)(const DtCoordinateSystem&);
49  typedef void (*TypeChangedFn)(DtCoordinateSystem*, void*);
50 
52  static DtCoordinateSystem* create();
53 
55  DtCoordinateSystem* clone() const;
56 
58  virtual ~DtCoordinateSystem();
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 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 
173  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
174  {
175  DtVector localpos_v;
176  memcpy(&localpos_v,localpos,sizeof(localpos));
177  DtVector netpos_v;
178  localToNetPos( localpos_v, netpos_v);
179  memcpy(netpos,&netpos_v,sizeof(netpos));
180  }
181 
183  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
184 
185  public:
186 
188  static DtCoordinateConverterFactory& converterFactory();
189 
193  static void setCreator(CoordinateSystemCreatorFn fn);
194 
195  protected:
196 
199 
202 
203  private:
204 
206  DtCoordinateSystem& operator=(const DtCoordinateSystem&);
207 
208  protected:
209 
210  typedef boost::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
211 
214  DtMapDatum* myCurrentDatum;
216 
220 
221  protected:
222 
223  static CoordinateSystemCreatorFn theCreatorFn;
224  static CoordinateSystemCloneFn theCloneFn;
226 
227 
228 
229  };
230 
231 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)