VR-Forces 4.1.1 Class Documentation
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 
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 
127  const DtMapDatum& datum() const;
128 
132  void setDatum(const DtMapDatum& datum);
133 
136  void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
137  void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
138  void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
139  void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;
140  void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
141 
142 
144  /* FIXME: This function does not work
145  inline void netToLocalPos(const double netpos[3], double localpos[3]) const
146  {
147  DtVector localpos_v;
148  DtVector netpos_v;
149  memcpy(&netpos_v,netpos,sizeof(netpos));
150  netToLocalPos( netpos_v, localpos_v);
151  memcpy(localpos,&localpos_v,sizeof(localpos));
152  }*/
153 
155  void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
156 
159  void localToNetPos( const DtVector& localpos, DtVector& netpos) const;
160  void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
161  void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
162 
164  inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
165  {
166  DtVector localpos_v;
167  memcpy(&localpos_v,localpos,sizeof(localpos));
168  DtVector netpos_v;
169  localToNetPos( localpos_v, netpos_v);
170  memcpy(netpos,&netpos_v,sizeof(netpos));
171  }
172 
174  void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
175 
176  public:
177 
179  static DtCoordinateConverterFactory& converterFactory();
180 
184  static void setCreator(CoordinateSystemCreatorFn fn);
185 
186  protected:
187 
190 
193 
194  private:
195 
197  DtCoordinateSystem& operator=(const DtCoordinateSystem&);
198 
199  protected:
200 
201  typedef boost::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
202 
205  DtMapDatum* myCurrentDatum;
207 
210 
211  protected:
212 
213  static CoordinateSystemCreatorFn theCreatorFn;
214  static CoordinateSystemCloneFn theCloneFn;
216 
217 
218 
219  };
220 
221 }

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)