VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtSharedDisplayUnitsSettings.h
Go to the documentation of this file.
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 }

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)