![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /***************************************************************************** 00002 * Copyright (c) 2012 MAK Technologies, Inc. 00003 * All rights reserved. 00004 *****************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvCore/vrvCore.h> 00013 00014 #include <vrvUtil/DtVirtualBaseClass.h> 00015 #include <vrvUtil/DtBaseSettingsManager.h> 00016 #include <vrvUtil/DtSignalConnectionManager.h> 00017 00018 #include <makArchives/DtDisplayUnitsSettingsRecord.h> 00019 00020 #include <vrvCore/DtSharedDisplayUnitsSettings.h> 00021 #include <vrvCore/DtSettingsBackup.h> 00022 00023 #include <matrix/vlTaitBryan.h> 00024 #include <matrix/vlVector.h> 00025 00026 #include <boost/signals.hpp> 00027 00028 namespace makVrv 00029 { 00030 00031 class DtDe; 00032 class DtCoordinateDisplay; 00033 class DtDisplayUnitsSettingsSynchronizerAgent; 00034 00068 class DT_DLL_VRVCORE DtDisplayUnitsConverter 00069 { 00070 public: 00071 00072 typedef makArchives::DtDisplayUnitsSettingsRecord::CoordSys CoordSys; 00073 typedef makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits DistanceUnits; 00074 typedef makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits VelocityUnits; 00075 typedef makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits AccelerationUnits; 00076 typedef makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits OrientationUnits; 00077 typedef makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits RotVelocityUnits; 00078 00079 DtDisplayUnitsConverter(const DtCoordinateSystem& cs, 00080 DtSharedSettingsManager& sm); 00081 00083 DtCoordinateDisplay* currentCoordinateDisplay(); 00084 00086 const DtCoordinateDisplay* currentCoordinateDisplay() const; 00087 00090 00091 CoordSys currentCoordinateDisplaySystem() const; 00092 DistanceUnits currentDistanceUnits() const; 00093 DistanceUnits currentAltitudeUnits() const; 00094 VelocityUnits currentVelocityUnits() const; 00095 OrientationUnits currentOrientationUnits() const; 00096 AccelerationUnits currentAccelerationUnits() const; 00097 RotVelocityUnits currentRotationalVelocityUnits() const; 00098 00099 int currentCoordinateSystemDecimals() const; 00100 int currentDistanceUnitDecimals() const; 00101 int currentAltitudeUnitDecimals() const; 00102 int currentVelocityUnitDecimals() const; 00103 int currentOrientationUnitDecimals() const; 00104 int currentAccelerationUnitDecimals() const; 00105 int currentRotationalVelocityUnitDecimals() const; 00106 00107 DtUnicode currentDistanceUnitNotation() const; 00108 DtUnicode currentAltitudeUnitNotation() const; 00109 DtUnicode currentVelocityUnitNotation() const; 00110 DtUnicode currentOrientationUnitNotation() const; 00111 DtUnicode currentAccelerationUnitNotation() const; 00112 DtUnicode currentRotationalVelocityUnitNotation() const; 00113 00115 00118 00119 int coordinateSystemDecimals( CoordSys cs ) const; 00120 int distanceUnitDecimals( DistanceUnits distUnit ) const; 00121 int altitudeUnitDecimals( DistanceUnits altUnit ) const; 00122 int velocityUnitDecimals( VelocityUnits velocityUnit ) const; 00123 int orientationUnitDecimals( OrientationUnits oriUnit ) const; 00124 int accelerationUnitDecimals( AccelerationUnits accelUnit ) const; 00125 int rotationalVelocityUnitDecimals( RotVelocityUnits wUnit ) const; 00126 00127 DtUnicode coordinateSystemNotation( CoordSys cs ) const; 00128 DtUnicode distanceUnitNotation( DistanceUnits distUnit ) const; 00129 DtUnicode altitudeUnitNotation( DistanceUnits altUnit ) const; 00130 DtUnicode velocityUnitNotation( VelocityUnits velocityUnit ) const; 00131 DtUnicode orientationUnitNotation( OrientationUnits oriUnit ) const; 00132 DtUnicode accelerationUnitNotation( AccelerationUnits accelUnit ) const; 00133 DtUnicode rotationalVelocityUnitNotation( RotVelocityUnits wUnit ) const; 00134 00136 00139 00141 void coordinateSystemLabels(DtUnicode& x, DtUnicode& y, DtUnicode& z ); 00142 00144 void coordinateSystemLabels( 00145 CoordSys coordSystem, 00146 DtUnicode& x, DtUnicode& y, DtUnicode& z ); 00147 00149 void regularExpressionValidators( std::string& x, 00150 std::string& y, std::string& z ); 00151 00153 void regularExpressionValidators( 00154 CoordSys cs, 00155 std::string& x, std::string& y, std::string& z ); 00156 00160 std::vector<std::string> convertPositionToStringList( CoordSys coordSys, 00161 const DtVector& pos ); 00162 00166 std::vector<std::string> convertPositionToStringList( 00167 const DtVector& pos ) const; 00168 00170 00173 00175 double convertAngleUnitNativeToDisplay( double angle ) const; 00176 00178 double convertAngleUnitDisplayToNative( double angle ) const; 00179 00182 std::string convertAngleUnitNativeToDisplayString( double angle ) const; 00183 00185 00188 00190 double convertDistanceUnitNativeToDisplay( double distance ) const; 00191 00193 double convertDistanceUnitDisplayToNative( double distance ) const; 00194 00197 std::string convertDistanceUnitNativeToDisplayString( double dist ) const; 00198 00200 00203 00204 00206 double convertAltitudeUnitNativeToDisplay( double altitude ) const; 00207 00209 double convertAltitudeUnitDisplayToNative( double altitude ) const; 00210 00213 std::string convertAltitudeUnitNativeToDisplayString( double altitude ) const; 00214 00216 00219 00221 DtVector convertVelocityUnitNativeToDisplay( const DtVector& vel ) const; 00222 00225 std::string convertVelocityUnitNativeToDisplayString( 00226 const DtVector& vel ) const; 00227 00230 DtVector convertVelocityUnitDisplayToNative( const DtVector& vel ) const; 00231 00234 DtVector convertVelocitySystemAndUnitGeocentricToDisplay( 00235 const DtVector& geocLoc, const DtVector& geocVel ) const; 00236 00240 std::string convertVelocitySystemAndUnitGeocentricToDisplayString( 00241 const DtVector& geocLoc, const DtVector& geocVel ) const; 00242 00244 00247 00249 DtVector convertAccelerationUnitNativeToDisplay( 00250 const DtVector& accel ) const; 00251 00254 std::string convertAccelerationUnitNativeToDisplayString( 00255 const DtVector& accel ) const; 00256 00259 DtVector convertAccelerationUnitDisplayToNative( 00260 const DtVector& accel ) const; 00261 00263 DtVector convertAccelerationSystemAndUnitGeocentricToDisplay( 00264 const DtVector& geocLoc, const DtVector& accel ) const; 00265 00268 std::string convertAccelerationSystemAndUnitGeocentricToDisplayString( 00269 const DtVector& geocLoc, const DtVector& accel ) const; 00270 00272 00275 00277 DtTaitBryan convertOrientationUnitNativeToDisplay( 00278 const DtTaitBryan& ori ) const; 00279 00282 std::vector<std::string> convertOrientationUnitNativeToDisplayStrings( 00283 const DtTaitBryan& ori ) const; 00284 00286 DtTaitBryan convertOrientationUnitDisplayToNative( 00287 const DtTaitBryan& ori ) const; 00288 00290 00293 00295 DtVector convertRotationalVelocityUnitNativeToDisplay( 00296 const DtVector& rotVel ) const; 00297 00299 std::string convertRotationalVelocityUnitNativeToDisplayString( 00300 const DtVector& rotVel ) const; 00301 00303 DtVector convertRotationalVelocityUnitDisplayToNative( 00304 const DtVector& rotVel ) const; 00305 00307 DtVector convertRotationalVelocitySystemAndUnitGeocentricToDisplay( 00308 const DtVector& rotVel ) const; 00309 00312 std::string 00313 convertRotationalVelocitySystemAndUnitGeocentricToDisplayString( 00314 const DtVector& rotVel ) const; 00315 00317 00318 00321 00323 double convertSpeedUnitNativeToDisplay( const DtVector& velocity ) const; 00324 00326 double convertSpeedUnitNativeToDisplay( double speed) const; 00327 00330 std::string convertSpeedUnitNativeToDisplayString( 00331 const DtVector& velocity) const; 00332 00335 std::string convertSpeedUnitNativeToDisplayString(double speed) const; 00336 00338 double convertSpeedUnitDisplayToNative( double speed) const; 00339 00341 double convertSpeedSystemAndUnitGeocentricToDisplay( 00342 const DtVector& geocLoc, const DtVector& velocity ) const; 00343 00346 std::string convertSpeedSystemAndUnitGeocentricToDisplayString( 00347 const DtVector& geocLoc, const DtVector& velocity ) const; 00348 00350 00353 00356 double convertAccelerationMagnitudeUnitNativeToDisplay( 00357 const DtVector& accel ) const; 00358 00361 double convertAccelerationMagnitudeUnitNativeToDisplay( 00362 double accel ) const; 00363 00366 std::string convertAccelerationMagnitudeUnitNativeToDisplayString( 00367 const DtVector& accel ) const; 00368 00371 std::string convertAccelerationMagnitudeUnitNativeToDisplayString( 00372 double accel ) const; 00373 00375 double convertAccelerationMagnitudeUnitDisplayToNative( double acc) const; 00376 00379 double convertAccelerationMagnitudeSystemAndUnitGeocentricToDisplay( 00380 const DtVector& geocLoc, const DtVector& accel ) const; 00381 00384 std::string 00385 convertAccelerationMagnitudeSystemAndUnitGeocentricToDisplayString( 00386 const DtVector& geocLoc, const DtVector& accel ) const; 00388 00389 00391 00394 00396 DtTaitBryan convertHeadingPitchRollSystemAndUnitGeocentricToDisplay( 00397 const DtVector& geocLoc, const DtTaitBryan& geocOri ) const; 00398 00401 std::vector<std::string> 00402 convertHeadingPitchRollSystemAndUnitGeocentricToDisplayStrings( 00403 const DtVector& geocLoc, const DtTaitBryan& geocOri ) const; 00404 00406 00407 protected: 00408 00410 static std::string valueToText( double value, int decimals ); 00411 00414 static std::string valuesToText( const DtVector& localVelocity, int decimals ); 00415 00416 protected: 00417 00418 const DtCoordinateSystem& myCoordinateSystem; 00419 DtSharedSettingsManager& mySharedSettingsManager; 00420 00421 }; 00422 00423 00426 class DT_DLL_VRVCORE DtDisplayUnitsSettingsManager 00427 : public DtBaseSharedSettingsManager<makArchives::DtDisplayUnitsSettingsRecord, 00428 DtSharedDisplayUnitsSettings> 00429 { 00430 public: 00431 00433 static DtDisplayUnitsSettingsManager& instance( DtDe& de ); 00434 00436 virtual ~DtDisplayUnitsSettingsManager(); 00437 00440 00441 void setCoordinateSystem( DtDisplayUnitsConverter::CoordSys cs ); 00442 void setDistanceUnits( DtDisplayUnitsConverter::DistanceUnits distUnits ); 00443 void setAltitudeUnits( DtDisplayUnitsConverter::DistanceUnits altUnits ); 00444 void setVelocityUnits( DtDisplayUnitsConverter::VelocityUnits velocityUnits ); 00445 void setOrientationUnits( DtDisplayUnitsConverter::OrientationUnits oriUnits ); 00446 void setAccelerationUnits( DtDisplayUnitsConverter::AccelerationUnits accelUnits ); 00447 void setRotationalVelocityUnits( DtDisplayUnitsConverter::RotVelocityUnits wUnits ); 00448 00449 void setCoordinateSystemDecimals( DtDisplayUnitsConverter::CoordSys cs, int decimals ); 00450 void setDistanceUnitDecimals( DtDisplayUnitsConverter::DistanceUnits distUnit, int decimals ); 00451 void setAltitudeUnitDecimals( DtDisplayUnitsConverter::DistanceUnits altUnit, int decimals ); 00452 void setVelocityUnitDecimals( DtDisplayUnitsConverter::VelocityUnits velocityUnit, int decimals ); 00453 void setOrientationUnitDecimals( DtDisplayUnitsConverter::OrientationUnits oriUnit, int decimals ); 00454 void setAccelerationUnitDecimals( DtDisplayUnitsConverter::AccelerationUnits accelUnit, int decimals ); 00455 void setRotationalVelocityUnitDecimals( DtDisplayUnitsConverter::RotVelocityUnits wUnit, int decimals ); 00456 00458 00461 00464 virtual void setFromRecord( const makArchives::DtDisplayUnitsSettingsRecord& rec ); 00465 00467 00469 DtDisplayUnitsConverter& converter(); 00470 00471 protected: 00472 00474 template <typename ManagerClass> 00475 friend ManagerClass& defaultManagerInstanceFunction( DtDe&, bool ); 00476 00478 template <typename ManagerClass> 00479 friend void defaultManagerRegisterInstanceFunction( DtDe&, ManagerClass* ); 00480 00482 DtDisplayUnitsSettingsManager( DtDe& de ); 00483 00490 virtual void slot_initializeSynchronizer(); 00491 00496 virtual void slot_displayEngineAdded( const DtDeRecord& deRec ); 00497 00498 protected: 00499 00500 DtDisplayUnitsConverter* myDisplayUnitsConverter; 00501 00502 DtDisplayUnitsSettingsSynchronizerAgent* mySettingsSynchronizer; 00503 00504 }; 00505 00506 }