![]() |
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 <vrvCore/DtSharedSettings.h> 00015 #include <vrvCore/DtRecordSettingsBackup.h> 00016 00017 #include <makArchives/DtDisplayUnitsSettingsRecord.h> 00018 00019 #include <vrvUtil/DtUnitConverterCollection.h> 00020 #include <vrvUtil/DtUnicode.h> 00021 00022 #include <boost/unordered_map.hpp> 00023 00024 #include <vector> 00025 00026 namespace makVrv 00027 { 00028 00029 class DtCoordinateSystem; 00030 class DtSharedDisplayUnitsSettings; 00031 00032 typedef DtSharedRecordSettingsBackup<DtSharedDisplayUnitsSettings, 00033 makArchives::DtDisplayUnitsSettingsRecord> DtDisplayUnitsSettingsBackup; 00034 00037 class DT_DLL_VRVCORE DtSharedDisplayUnitsSettings : public DtSharedSettings 00038 { 00039 public: 00040 00041 typedef makArchives::DtDisplayUnitsSettingsRecord::CoordSys CoordSys; 00042 typedef makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits DistanceUnits; 00043 typedef makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits VelocityUnits; 00044 typedef makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits AccelerationUnits; 00045 typedef makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits OrientationUnits; 00046 typedef makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits RotVelocityUnits; 00047 00048 struct UnitEntry 00049 { 00050 DtUnicode myUnitname; 00051 DtUnicode myNotation; 00052 int myDecimals; 00053 00054 UnitEntry( DtUnicode name, DtUnicode notation, int decimals ) 00055 { 00056 myUnitname = name; 00057 myNotation = notation; 00058 myDecimals = decimals; 00059 } 00060 }; 00061 00062 struct DisplayAttributes 00063 { 00064 std::vector<UnitEntry> myUnits; 00065 int myCurrentIndex; 00066 00067 DisplayAttributes() 00068 : myCurrentIndex( 0 ) 00069 { 00070 } 00071 00072 std::string currentDisplayUnitNotation() const 00073 { 00074 std::string str; 00075 myUnits[myCurrentIndex].myNotation.toUtf8(str); 00076 return str; 00077 } 00078 }; 00079 00080 typedef boost::unordered_map<CoordSys, int> CoordSysDecimalsMap; 00081 typedef boost::unordered_map<CoordSys, DtUnicode> CoordSysNotationsMap; 00082 00083 struct CoordinateSystemAttributes 00084 { 00085 CoordSysDecimalsMap myDecimals; 00086 CoordSysNotationsMap myNotations; 00087 CoordSys myCurrentIndex; 00088 CoordinateSystemAttributes() 00089 : myCurrentIndex( makArchives::DtDisplayUnitsSettingsRecord::CoordSysDatabase ) 00090 { 00091 } 00092 }; 00093 00095 virtual ~DtSharedDisplayUnitsSettings(); 00096 00099 00100 void setDisplayUnitAttributes( DtUnitConverterCollection::DisplayUnitType attr, 00101 const DisplayAttributes& data ); 00102 00109 bool getDisplayUnitAttributes( 00110 DtUnitConverterCollection::DisplayUnitType attr, 00111 DisplayAttributes& value ) const; 00112 00117 DisplayAttributes* findDisplayUnitAttributes( 00118 DtUnitConverterCollection::DisplayUnitType attr ); 00119 00125 const DisplayAttributes* findDisplayUnitAttributes( 00126 DtUnitConverterCollection::DisplayUnitType attr ) const; 00127 00129 void setCoordinateSystemAttributes( const CoordinateSystemAttributes& data ); 00130 00132 CoordinateSystemAttributes* coordSysAttributes(); 00133 00135 const CoordinateSystemAttributes* coordinateSystemAttributes() const; 00136 00138 void getCoordinateSystemAttributes( CoordinateSystemAttributes& csAttr ) const; 00139 00142 00143 void setCoordinateSystem( CoordSys cs ); 00144 void setDistanceUnits( DistanceUnits distUnits ); 00145 void setAltitudeUnits( DistanceUnits altUnits ); 00146 void setVelocityUnits( VelocityUnits velocityUnits ); 00147 void setOrientationUnits( OrientationUnits oriUnits ); 00148 void setAccelerationUnits( AccelerationUnits accelUnits ); 00149 void setRotationalVelocityUnits( RotVelocityUnits wUnits ); 00150 00151 void setCoordinateSystemDecimals( CoordSys cs, int decimals ); 00152 void setDistanceUnitDecimals( DistanceUnits distUnit, int decimals ); 00153 void setAltitudeUnitDecimals( DistanceUnits altUnit, int decimals ); 00154 void setVelocityUnitDecimals( VelocityUnits velocityUnit, int decimals ); 00155 void setOrientationUnitDecimals( OrientationUnits oriUnit, int decimals ); 00156 void setAccelerationUnitDecimals( AccelerationUnits accelUnit, int decimals ); 00157 void setRotationalVelocityUnitDecimals( RotVelocityUnits wUnit, int decimals ); 00158 00160 00163 00164 int coordinateSystemDecimals( CoordSys cs ) const; 00165 int distanceUnitDecimals( DistanceUnits distUnit ) const; 00166 int altitudeUnitDecimals( DistanceUnits altUnit ) const; 00167 int velocityUnitDecimals( VelocityUnits velocityUnit ) const; 00168 int orientationUnitDecimals( OrientationUnits oriUnit ) const; 00169 int accelerationUnitDecimals( AccelerationUnits accelUnit ) const; 00170 int rotationalVelocityUnitDecimals( RotVelocityUnits wUnit ) const; 00171 00172 DtUnicode coordinateSystemNotation( CoordSys cs ) const; 00173 DtUnicode distanceUnitNotation( DistanceUnits distUnit ) const; 00174 DtUnicode altitudeUnitNotation( DistanceUnits altUnit ) const; 00175 DtUnicode velocityUnitNotation( VelocityUnits velocityUnit ) const; 00176 DtUnicode orientationUnitNotation( OrientationUnits oriUnit ) const; 00177 DtUnicode accelerationUnitNotation( AccelerationUnits accelUnit ) const; 00178 DtUnicode rotationalVelocityUnitNotation( RotVelocityUnits wUnit ) const; 00179 00181 00184 00185 CoordSys currentCoordinateSystem() const; 00186 DistanceUnits currentDistanceUnits() const; 00187 DistanceUnits currentAltitudeUnits() const; 00188 VelocityUnits currentVelocityUnits() const; 00189 OrientationUnits currentOrientationUnits() const; 00190 AccelerationUnits currentAccelerationUnits() const; 00191 RotVelocityUnits currentRotationalVelocityUnits() const; 00192 00193 int currentCoordinateSystemDecimals() const; 00194 int currentDistanceUnitDecimals() const; 00195 int currentAltitudeUnitDecimals() const; 00196 int currentVelocityUnitDecimals() const; 00197 int currentOrientationUnitDecimals() const; 00198 int currentAccelerationUnitDecimals() const; 00199 int currentRotationalVelocityUnitDecimals() const; 00200 00201 DtUnicode currentCoordinateSystemNotation() const; 00202 DtUnicode currentDistanceUnitNotation() const; 00203 DtUnicode currentAltitudeUnitNotation() const; 00204 DtUnicode currentVelocityUnitNotation() const; 00205 DtUnicode currentOrientationUnitNotation() const; 00206 DtUnicode currentAccelerationUnitNotation() const; 00207 DtUnicode currentRotationalVelocityUnitNotation() const; 00208 00210 00211 void coordinateSystemLabels( const DtCoordinateSystem& displayCS, 00212 DtUnicode& x, DtUnicode& y, DtUnicode& z ) const; 00213 00214 void coordinateSystemLabels( const DtCoordinateSystem& displayCS, 00215 CoordSys coordSys, 00216 DtUnicode& x, DtUnicode& y, DtUnicode& z ) const; 00217 00218 DtUnicode xyUnitNotation( 00219 const DtCoordinateSystem& displayCS ) const; 00220 00221 DtUnicode xyUnitNotation( const DtCoordinateSystem& displayCS, 00222 CoordSys coordSys ) const; 00223 00224 DtUnicode zUnitNotation( 00225 const DtCoordinateSystem& displayCS ) const; 00226 00227 DtUnicode zUnitNotation( const DtCoordinateSystem& displayCS, 00228 CoordSys coordSys ) const; 00229 00233 std::vector<std::string> convertPositionToStringList( 00234 const DtCoordinateSystem& displayCS, 00235 CoordSys coordSys, 00236 const DtVector& pos ) const; 00237 00241 std::vector<std::string> convertPositionToStringList( 00242 const DtCoordinateSystem& displayCS, const DtVector& pos ) const; 00243 00246 00248 void setFromRecord( const makArchives::DtDisplayUnitsSettingsRecord& rec ); 00249 00251 void getRecord( makArchives::DtDisplayUnitsSettingsRecord& rec ) const; 00252 00254 virtual const DtDisplayUnitsSettingsBackup* settingsBackup() const; 00255 00257 virtual DtDisplayUnitsSettingsBackup* settingsBackup(); 00258 00260 virtual void backup(); 00261 00263 00264 protected: 00265 00267 friend class DtReadSettingsLock<DtSharedDisplayUnitsSettings>; 00269 friend class DtWriteSettingsLock<DtSharedDisplayUnitsSettings>; 00270 00273 DtSharedDisplayUnitsSettings( DtSharedSettingsManager& manager ); 00274 00276 CoordSys currentCoordSysIndex() const; 00277 00279 int currentCoordSysDecimals() const; 00280 00283 00284 int currentDisplayUnitIndex( 00285 DtUnitConverterCollection::DisplayUnitType attr ) const; 00286 00287 int currentDisplayUnitDecimals( 00288 DtUnitConverterCollection::DisplayUnitType attr ) const; 00289 00290 DtUnicode currentDisplayUnitNotation( 00291 DtUnitConverterCollection::DisplayUnitType attr ) const; 00292 00293 DtUnicode currentDisplayUnitName( 00294 DtUnitConverterCollection::DisplayUnitType attr ) const; 00295 00296 void currentDisplayUnitData( 00297 DtUnitConverterCollection::DisplayUnitType attr, int& index, 00298 DtUnicode& name, DtUnicode& notation, int& decimals ) const; 00299 00301 00302 std::string valueToText( double value, int decimals ) const; 00303 00304 static std::string className(); 00305 00309 void initEntries(); 00310 00311 protected: 00312 00314 typedef boost::unordered_map<DtUnitConverterCollection::DisplayUnitType, 00315 DisplayAttributes> EntryMap; 00316 00317 EntryMap myEntries; 00318 00319 CoordinateSystemAttributes myCoordSysEntries; 00320 00321 DtDisplayUnitsSettingsBackup* mySettingsBackup; 00322 00323 }; 00324 00325 }