![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************** 00002 * Copyright (c) 2011 MaK Technologies, Inc. 00003 * All rights reserved. 00004 ********************************************************************/ 00005 /******************************************************************** 00006 * $RCSfile: DtUnitConverterCollection.h,v $ $Revision: 1.8 $ $State: Exp $ 00007 ********************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvUtil/vrvUtil.h> 00015 #include <vrvUtil/DtUnitConverter.h> 00016 #include <vrvUtil/DtUnicode.h> 00017 #include <boost/unordered_map.hpp> 00018 00019 class DtVector; 00020 class DtTaitBryan; 00021 00022 namespace makVrv 00023 { 00024 00029 class DT_DLL_VRVUTIL DtUnitConverterCollection 00030 { 00031 public: 00032 00037 enum DisplayUnitType 00038 { 00039 Time, 00040 Distance, 00041 Altitude, 00042 Velocity, 00043 Acceleration, 00044 RotVelocity, 00045 Orientation, 00046 End_DisplayUnitTypes 00047 }; 00048 00050 DtUnitConverterCollection(); 00051 00053 DtUnitConverterCollection(const DtUnitConverterCollection&); 00054 00056 ~DtUnitConverterCollection(); 00057 00060 00062 double convertDistance( 00063 makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits distUnits, 00064 double distance ) const; 00065 00067 double convertSpeed( 00068 makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits speedUnits, 00069 double speed ) const; 00070 00072 DtVector convertVelocity( 00073 makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits velUnits, 00074 const DtVector& velocity ) const; 00075 00077 double convertAcceleration( 00078 makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits accelUnits, 00079 double accel ) const; 00080 00082 DtVector convertAcceleration( 00083 makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits accelUnits, 00084 const DtVector& accel ) const; 00085 00087 DtTaitBryan convertOrientation( 00088 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits oriUnits, 00089 const DtTaitBryan& orientation ) const; 00090 00092 double convertAngle( 00093 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits oriUnits, 00094 double angle ) const; 00095 00097 DtVector convertRotationalVelocity( 00098 makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits wUnits, 00099 const DtVector& rotVel ) const; 00100 00102 00105 00107 double revertDistance( 00108 makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits distUnits, 00109 double distance ) const; 00110 00112 double revertSpeed( 00113 makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits velUnits, 00114 double speed ) const; 00115 00117 DtVector revertVelocity( 00118 makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits velUnits, 00119 const DtVector& velocity ) const; 00120 00122 DtVector revertAcceleration( 00123 makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits accelUnits, 00124 DtVector accel ) const; 00125 00127 double revertAcceleration( 00128 makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits accelUnits, 00129 double accel ) const; 00130 00132 DtTaitBryan revertOrientation( 00133 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits oriUnits, 00134 const DtTaitBryan& ori ) const; 00135 00137 double revertAngle( 00138 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits oriUnits, 00139 double angle ) const; 00140 00142 DtVector revertRotationalVelocity( 00143 makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits wUnits, 00144 const DtVector& rotVel ) const; 00145 00147 00151 void addUnitConverter(DisplayUnitType type, 00152 unsigned int unit, const DtUnitConverter* converter ); 00153 00154 00157 00159 const DtTimeUnitConverter* timeConverterFor( 00160 makArchives::DtDisplayUnitsSettingsRecord::TimeUnits unit ) const; 00161 00163 const DtDistanceUnitConverter* distanceConverterFor( 00164 makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits unit ) const; 00165 00167 const DtOrientationUnitConverter* orientationConverterFor( 00168 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits unit ) const; 00169 00171 00172 protected: 00173 00175 void addDefaultConverters(); 00176 00179 00181 double distanceConversionFactor( 00182 makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits units ) const; 00183 00185 double velocityConversionFactor( 00186 makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits units ) const; 00187 00189 double accelerationConversionFactor( 00190 makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits units ) const; 00191 00193 double angleConversionFactor( 00194 makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits units ) const; 00195 00197 double rotationalVelocityConversionFactor( 00198 makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits units ) const; 00199 00201 00202 protected: 00203 00204 typedef boost::unordered_map<unsigned int,const DtUnitConverter*> 00205 UnitConverterMap; 00206 typedef boost::unordered_map<unsigned int,UnitConverterMap> 00207 UnitConverterTypeMap; 00208 00209 UnitConverterTypeMap myConverters; 00210 00211 private: 00212 00214 DtUnitConverterCollection& operator=(const DtUnitConverterCollection&); 00215 00216 }; 00217 00218 }