VR-Forces 4.0.4 Class Documentation
include/vrvUtil/DtCoordinateSystem.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 2003 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: DtCoordinateSystem.h,v $ $Revision: 1.14 $ $State: Exp $
00007 *********************************************************************/
00008 
00011 
00012 #pragma once
00013 #include <vrvUtil/vrvUtil.h>
00014 #include <vrvUtil/DtUnicode.h>
00015 #include <makArchives/DtDisplayUnitsSettingsRecord.h>
00016 #include <matrix/vlVector.h>
00017 #include <boost/unordered_map.hpp>
00018 #include <string>
00019 
00020 class DtMapDatum;
00021 class DtTaitBryan;
00022 class DtDcm;
00023 
00024 namespace makVrv
00025 {
00026 
00027    class DtNoOpCoordinateConverter;
00028    class DtFlatEarthCoordinateConverter;
00029    class DtGeocentricCoordinateConverter;
00030    class DtUtmCoordinateConverter;
00031    class DtCartesianCoordinateConverter;
00032    class DtLambertCoordinateConverter;
00033    class DtCoordinateConverterFactory;
00034    class DtCoordinateConverter;
00035 
00036    class DtCoordinateDisplay;
00037    class DtCoordinateDisplayCollection;
00038    class DtUnitConverterCollection;
00039 
00043    class DT_DLL_VRVUTIL DtCoordinateSystem
00044    {
00045    public:
00046 
00047       typedef DtCoordinateSystem* (*CoordinateSystemCreatorFn)();
00048       typedef DtCoordinateSystem* (*CoordinateSystemCloneFn)(const DtCoordinateSystem&);
00049       typedef void (*TypeChangedFn)(DtCoordinateSystem*, void*);
00050 
00052       static DtCoordinateSystem* create();
00053 
00055       DtCoordinateSystem* clone() const;
00056 
00058       ~DtCoordinateSystem();
00059 
00062       const std::string& type() const;
00063 
00067       bool isGeocentric() const;
00068 
00070       const std::string& parameters() const;
00071 
00074       bool set(const std::string& type, const std::string& origin);
00075 
00079       bool addConverter(const std::string& t, DtCoordinateConverter* converter);
00080 
00082       DtCoordinateConverter* converter() const;
00083 
00085       DtCoordinateConverter* converter(const std::string& type) const;
00086 
00088       virtual DtCoordinateDisplay* display(
00089          makArchives::DtDisplayUnitsSettingsRecord::CoordSys system ) const;
00090 
00091       virtual DtCoordinateDisplay* display(
00092          const DtUnicode& coordSysName ) const;
00093 
00095       virtual DtCoordinateDisplayCollection& displays();
00096       virtual const DtCoordinateDisplayCollection& displays() const;
00097 
00099       virtual DtUnitConverterCollection& units();
00100       virtual const DtUnitConverterCollection& units() const;
00101 
00103       DtNoOpCoordinateConverter* noopConverter();
00104       const DtNoOpCoordinateConverter* noopConverter() const;
00105 
00107       DtUtmCoordinateConverter* utmConverter() ;
00108       const DtUtmCoordinateConverter* utmConverter() const;
00109 
00111       DtLambertCoordinateConverter* lambertConverter() ;
00112       const DtLambertCoordinateConverter* lambertConverter() const;
00113  
00115       DtCartesianCoordinateConverter* cartesianConverter() ;
00116       const DtCartesianCoordinateConverter* cartesianConverter() const;
00117 
00119       DtGeocentricCoordinateConverter* geocentricConverter() ;
00120       const DtGeocentricCoordinateConverter* geocentricConverter() const;
00121 
00123       DtFlatEarthCoordinateConverter* flatEarthConverter() ;
00124       const DtFlatEarthCoordinateConverter* flatEarthConverter() const;
00125 
00127       const DtMapDatum& datum() const;
00128 
00132       void setDatum(const DtMapDatum& datum);
00133 
00136       void netToLocalPos(const DtVector& netpos, DtVector& localpos) const;
00137       void netToLocalVec(const DtVector& localpos, const DtVector& netvec, DtVector& localvec) const;
00138       void netToLocalOri(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localori) const;
00139       void netToLocalHpr(const DtVector& localpos, const DtTaitBryan& netori, DtTaitBryan& localhpr) const;  
00140       void netBodyToLocalBody(const DtVector& localpos, const DtDcm& netdcm, DtDcm& localdcm) const;
00141 
00142 
00144       /* FIXME: This function does not work
00145       inline void netToLocalPos(const double netpos[3], double localpos[3]) const
00146       {
00147          DtVector localpos_v;
00148          DtVector netpos_v;         
00149          memcpy(&netpos_v,netpos,sizeof(netpos));
00150          netToLocalPos( netpos_v, localpos_v);
00151          memcpy(localpos,&localpos_v,sizeof(localpos));      
00152       }*/
00153 
00155       void netToLocalOri(const double localpos[3], const double netori[3], double localori[3]) const;
00156 
00159       void localToNetPos( const DtVector& localpos, DtVector& netpos) const;    
00160       void localToNetOri(const DtVector& localpos, const DtTaitBryan& localori, DtTaitBryan& netori) const;
00161       void localToNetVec(const DtVector& localpos, const DtVector& localvec, DtVector& netvec) const;
00162 
00164       inline void localToNetPos( const double (&localpos)[3], double (&netpos)[3]) const
00165       {  
00166          DtVector localpos_v;
00167          memcpy(&localpos_v,localpos,sizeof(localpos));
00168          DtVector netpos_v;         
00169          localToNetPos( localpos_v, netpos_v);
00170          memcpy(netpos,&netpos_v,sizeof(netpos));
00171       }
00172 
00174       void localToNetOri(const double localpos[3], const double localori[3], double netori[3]) const;
00175 
00176    public:
00177 
00179       static DtCoordinateConverterFactory& converterFactory();
00180 
00184       static void setCreator(CoordinateSystemCreatorFn fn);
00185 
00186    protected:
00187 
00189       DtCoordinateSystem();
00190 
00192       DtCoordinateSystem(const DtCoordinateSystem&);
00193 
00194    private:
00195 
00197       DtCoordinateSystem& operator=(const DtCoordinateSystem&);
00198 
00199    protected:
00200 
00201       typedef boost::unordered_map<std::string, DtCoordinateConverter*> ConverterMap;
00202       
00203       ConverterMap myConverters;
00204       DtCoordinateConverter* myCurrentConverter;
00205       DtMapDatum* myCurrentDatum;      
00206       std::string myCoordinateSystemParameters;
00207 
00208       DtCoordinateDisplayCollection* myDisplays;
00209       DtUnitConverterCollection* myUnits;
00210 
00211    protected:   
00212 
00213       static CoordinateSystemCreatorFn theCreatorFn;
00214       static CoordinateSystemCloneFn theCloneFn;
00215       static DtCoordinateConverterFactory theCoordConverterFactory;
00216 
00217       
00218 
00219    };
00220 
00221 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)