VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtDisplayUnitsSettingsManager.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2022 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 
15 #include <vrvUtil/DtUnicode.h>
16 
19 
20 namespace makVrv
21 {
22 
23  class DtDe;
24  class DtCoordinateDisplay;
25  class DtDisplayUnitsSettingsSynchronizerAgent;
26 
61  {
62  public:
63 
73 
76 
78  DtCoordinateDisplay* currentCoordinateDisplay();
79 
81  const DtCoordinateDisplay* currentCoordinateDisplay() const;
82 
85 
86  CoordSys currentCoordinateDisplaySystem() const;
87 
93  DistanceUnits currentDistanceUnit(
94  const DtUnicode& displayUnitCollectionName,
95  const DtUnicode& displayUnitName) const;
96 
102  VelocityUnits currentVelocityUnit(
103  const DtUnicode& displayUnitCollectionName,
104  const DtUnicode& displayUnitName) const;
105 
111  OrientationUnits currentOrientationUnit(
112  const DtUnicode& displayUnitCollectionName,
113  const DtUnicode& displayUnitName) const;
114 
120  NorthUnits currentNorthUnit(
121  const DtUnicode& displayUnitCollectionName,
122  const DtUnicode& displayUnitName) const;
123 
129  AccelerationUnits currentAccelerationUnit(
130  const DtUnicode& displayUnitCollectionName,
131  const DtUnicode& displayUnitName) const;
132 
138  RotVelocityUnits currentRotationalVelocityUnit(
139  const DtUnicode& displayUnitCollectionName,
140  const DtUnicode& displayUnitName) const;
141 
147  TemperatureUnits currentTemperatureUnit(
148  const DtUnicode& displayUnitCollectionName,
149  const DtUnicode& displayUnitName) const;
150 
156  PressureUnits currentPressureUnit(
157  const DtUnicode& displayUnitCollectionName,
158  const DtUnicode& displayUnitName) const;
159 
165  unsigned int displayUnitUnit(
166  const DtUnicode& displayUnitCollectionName,
167  const DtUnicode& displayUnitName) const;
168 
174  unsigned int displayUnitDecimals(
175  const DtUnicode& displayUnitCollectionName,
176  const DtUnicode& displayUnitName) const;
177 
183  DtUnicode displayUnitNotation(
184  const DtUnicode& displayUnitCollectionName,
185  const DtUnicode& displayUnitName) const;
186 
188 
191 
192  DtUnicode coordinateSystemNotation( CoordSys cs ) const;
193  DtUnicode distanceUnitNotation( DistanceUnits distUnit ) const;
194  DtUnicode velocityUnitNotation( VelocityUnits velocityUnit ) const;
195  DtUnicode orientationUnitNotation( OrientationUnits oriUnit ) const;
196  DtUnicode accelerationUnitNotation( AccelerationUnits accelUnit ) const;
197  DtUnicode rotationalVelocityUnitNotation( RotVelocityUnits wUnit ) const;
198  DtUnicode temperatureUnitNotation( TemperatureUnits tempUnit ) const;
199  DtUnicode pressureUnitNotation( PressureUnits pressureUnit ) const;
200  DtUnicode northUnitNotation( NorthUnits wUnit ) const;
201 
203 
206 
208  void coordinateSystemLabels(DtUnicode& x, DtUnicode& y, DtUnicode& z ) const;
209 
211  void coordinateSystemLabels(
212  CoordSys coordSystem,
213  DtUnicode& x, DtUnicode& y, DtUnicode& z ) const;
214 
216  void regularExpressionValidators( std::string& x,
217  std::string& y, std::string& z ) const;
218 
220  void regularExpressionValidators(
221  CoordSys cs,
222  std::string& x, std::string& y, std::string& z ) const;
223 
229  std::vector<DtUnicode> convertPositionToNotatedStringList(
230  CoordSys coordSys,
231  const DtVector& pos,
232  DistanceUnits coordinateSystemUnit,
233  unsigned int coordinateSystemDecimals,
234  DistanceUnits altitudeUnit,
235  unsigned int altitudeDecimals,
236  bool minimal = false) const;
237 
242  std::vector<DtUnicode> convertPositionToNotatedStringList(
243  const DtVector& pos,
244  DistanceUnits coordinateSystemUnit,
245  unsigned int coordinateSystemDecimals,
246  DistanceUnits altitudeUnit,
247  unsigned int altitudeDecimals,
248  bool minimal = false ) const;
249 
253  std::vector<std::string> convertPositionToStringList( CoordSys coordSys,
254  const DtVector& pos,
255  DistanceUnits coordinateSystemUnit,
256  unsigned int coordinateSystemDecimals,
257  DistanceUnits altitudeUnit,
258  unsigned int altitudeDecimals ) const;
259 
263  std::vector<std::string> convertPositionToStringList(
264  const DtVector& pos,
265  DistanceUnits coordinateSystemUnit,
266  unsigned int coordinateSystemDecimals,
267  DistanceUnits altitudeUnit,
268  unsigned int altitudeDecimals ) const;
269 
271 
274 
276  double convertAngleUnitNativeToDisplay(
277  double angle,
278  OrientationUnits unit ) const;
279 
281  double convertAngleUnitDisplayToNative(
282  double angle,
283  OrientationUnits unit ) const;
284 
292  std::string convertAngleUnitNativeToDisplayString(
293  double angle,
294  OrientationUnits unit,
295  unsigned int decimals,
296  bool additionalFormatting = false ) const;
297 
305  DtUnicode convertAngleUnitNativeToNotatedDisplayString(
306  double angle,
307  OrientationUnits unit,
308  unsigned int decimals,
309  bool additionalFormatting = false) const;
310 
312 
315 
324  double convertHeadingUnitNativeToDisplay(
325  const DtVector& geocLoc,
326  double heading,
327  NorthUnits unit,
328  bool convertDisplayToDegrees=true) const;
329 
338  double convertHeadingUnitDisplayToNative(
339  const DtVector& geocLoc,
340  double heading,
341  NorthUnits unit,
342  bool convertNativeToRadians=true) const;
343 
346  double convertLocationToMagneticDeclination(const DtVector& geocLoc) const;
347 
352  double convertLocationToGridDeclination(const DtVector& geocLoc) const;
353 
363  DtUnicode convertHeadingUnitNativeToNotatedDisplayString(const DtVector& geocLoc,
364  double heading, NorthUnits unit, DtUnicode unitNotation, bool suppressMagneticNorthNotation) const;
365 
373  DtUnicode convertHeadingUnitNativeToNotatedDisplayString(
374  const DtVector& geocLoc,
375  double heading,
376  NorthUnits unit ) const;
377 
379 
382 
384  double convertDistanceUnitNativeToDisplay(
385  double distance,
386  DistanceUnits unit ) const;
387 
389  double convertDistanceUnitDisplayToNative(
390  double distance,
391  DistanceUnits unit ) const;
392 
395  std::string convertDistanceUnitNativeToDisplayString(
396  double dist,
397  DistanceUnits unit,
398  unsigned int decimals ) const;
399 
402  DtUnicode convertDistanceUnitNativeToNotatedDisplayString(
403  double dist,
404  DistanceUnits unit,
405  unsigned int decimals) const;
406 
408 
411 
413  DtVector convertVelocityUnitNativeToDisplay(
414  const DtVector& vel,
415  VelocityUnits unit ) const;
416 
419  DtVector convertVelocityUnitDisplayToNative(
420  const DtVector& vel,
421  VelocityUnits unit) const;
422 
425  DtVector convertVelocitySystemAndUnitGeocentricToDisplay(
426  const DtVector& geocLoc,
427  const DtVector& geocVel,
428  VelocityUnits unit ) const;
429 
432  std::string convertVelocityUnitNativeToDisplayString(
433  const DtVector& vel,
434  VelocityUnits unit,
435  unsigned int decimals ) const;
436 
440  std::string convertVelocitySystemAndUnitGeocentricToDisplayString(
441  const DtVector& geocLoc,
442  const DtVector& geocVel,
443  VelocityUnits unit,
444  unsigned int decimals) const;
445 
447 
450 
452  DtVector convertAccelerationUnitNativeToDisplay(
453  const DtVector& accel,
454  AccelerationUnits unit ) const;
455 
458  DtVector convertAccelerationUnitDisplayToNative(
459  const DtVector& accel,
460  AccelerationUnits unit) const;
461 
464  std::string convertAccelerationUnitNativeToDisplayString(
465  const DtVector& accel,
466  AccelerationUnits unit,
467  unsigned int decimals ) const;
468 
470  DtVector convertAccelerationSystemAndUnitGeocentricToDisplay(
471  const DtVector& geocLoc,
472  const DtVector& accel,
473  AccelerationUnits unit ) const;
474 
477  std::string convertAccelerationSystemAndUnitGeocentricToDisplayString(
478  const DtVector& geocLoc, const DtVector& accel,
479  AccelerationUnits unit,
480  unsigned int decimals ) const;
481 
483 
486 
488  DtTaitBryan convertOrientationUnitNativeToDisplay(
489  const DtTaitBryan& ori,
490  OrientationUnits unit ) const;
491 
493  DtTaitBryan convertOrientationUnitDisplayToNative(
494  const DtTaitBryan& ori,
495  OrientationUnits unit ) const;
496 
508  std::vector<std::string> convertOrientationUnitNativeToDisplayStrings(
509  const DtTaitBryan& ori,
510  OrientationUnits unit,
511  unsigned int decimals,
512  NorthUnits northUnit,
513  bool formatPsi = false,
514  bool formatTheta = false,
515  bool formatPhi = false ) const;
516 
528  std::vector<DtUnicode> convertOrientationUnitNativeToNotatedDisplayStrings(
529  const DtTaitBryan& ori,
530  OrientationUnits unit,
531  unsigned int decimals,
532  NorthUnits northUnit,
533  bool formatPsi = false,
534  bool formatTheta = false,
535  bool formatPhi = false) const;
536 
538 
541 
543  DtVector convertRotationalVelocityUnitNativeToDisplay(
544  const DtVector& rotVel,
545  RotVelocityUnits unit ) const;
546 
548  DtVector convertRotationalVelocityUnitDisplayToNative(
549  const DtVector& rotVel,
550  RotVelocityUnits unit) const;
551 
553  std::string convertRotationalVelocityUnitNativeToDisplayString(
554  const DtVector& rotVel,
555  RotVelocityUnits unit,
556  unsigned int decimals ) const;
557 
559  DtVector convertRotationalVelocitySystemAndUnitGeocentricToDisplay(
560  const DtVector& rotVel,
561  RotVelocityUnits unit ) const;
562 
565  std::string
566  convertRotationalVelocitySystemAndUnitGeocentricToDisplayString(
567  const DtVector& rotVel,
568  RotVelocityUnits unit,
569  unsigned int decimals ) const;
570 
572 
573 
576 
578  double convertSpeedUnitNativeToDisplay(
579  const DtVector& velocity,
580  VelocityUnits unit ) const;
581 
583  double convertSpeedUnitNativeToDisplay(
584  double speed,
585  VelocityUnits unit ) const;
586 
588  double convertSpeedUnitDisplayToNative(
589  double speed,
590  VelocityUnits unit ) const;
591 
593  double convertSpeedSystemAndUnitGeocentricToDisplay(
594  const DtVector& geocLoc,
595  const DtVector& velocity,
596  VelocityUnits unit ) const;
597 
600  std::string convertSpeedUnitNativeToDisplayString(
601  const DtVector& velocity,
602  VelocityUnits unit,
603  unsigned int decimals ) const;
604 
607  std::string convertSpeedUnitNativeToDisplayString(
608  double speed,
609  VelocityUnits unit,
610  unsigned int decimals ) const;
611 
614  std::string convertSpeedSystemAndUnitGeocentricToDisplayString(
615  const DtVector& geocLoc,
616  const DtVector& velocity,
617  VelocityUnits unit,
618  unsigned int decimals ) const;
619 
621 
624 
627  double convertAccelerationMagnitudeUnitNativeToDisplay(
628  const DtVector& accel,
629  AccelerationUnits unit ) const;
630 
633  double convertAccelerationMagnitudeUnitNativeToDisplay(
634  double accel,
635  AccelerationUnits unit) const;
636 
638  double convertAccelerationMagnitudeUnitDisplayToNative(
639  double acc,
640  AccelerationUnits unit) const;
641 
644  std::string convertAccelerationMagnitudeUnitNativeToDisplayString(
645  const DtVector& accel,
646  AccelerationUnits unit,
647  unsigned int decimals ) const;
648 
651  std::string convertAccelerationMagnitudeUnitNativeToDisplayString(
652  double accel,
653  AccelerationUnits unit,
654  unsigned int decimals ) const;
655 
658  double convertAccelerationMagnitudeSystemAndUnitGeocentricToDisplay(
659  const DtVector& geocLoc,
660  const DtVector& accel,
661  AccelerationUnits unit ) const;
662 
665  std::string
666  convertAccelerationMagnitudeSystemAndUnitGeocentricToDisplayString(
667  const DtVector& geocLoc,
668  const DtVector& accel,
669  AccelerationUnits unit,
670  unsigned int decimals ) const;
672 
673 
675 
678 
680  DtTaitBryan convertHeadingPitchRollSystemAndUnitGeocentricToDisplay(
681  const DtVector& geocLoc,
682  const DtTaitBryan& geocOri,
683  OrientationUnits unit ) const;
684 
688  std::vector<DtUnicode>
689  convertHeadingPitchRollSystemAndUnitGeocentricToNotatedDisplayStrings(
690  const DtVector& geocLoc,
691  const DtTaitBryan& geocOri,
692  OrientationUnits orientationUnit,
693  DtUnicode orientationUnitNotation,
694  unsigned int decimals,
695  NorthUnits northUnit,
696  DtUnicode northUnitNotation,
697  bool suppressMagneticNorthNotation,
698  bool formatHeading = false,
699  bool formatPitch = false,
700  bool formatRoll = false ) const;
701 
705  std::vector<DtUnicode>
706  convertHeadingPitchRollSystemAndUnitGeocentricToNotatedDisplayStrings(
707  const DtVector& geocLoc,
708  const DtTaitBryan& geocOri,
709  OrientationUnits orientationUnit,
710  unsigned int decimals,
711  NorthUnits northUnit,
712  bool formatHeading = false,
713  bool formatPitch = false,
714  bool formatRoll = false ) const;
715 
727  std::vector<std::string>
728  convertHeadingPitchRollSystemAndUnitGeocentricToDisplayStrings(
729  const DtVector& geocLoc,
730  const DtTaitBryan& geocOri,
731  OrientationUnits unit,
732  unsigned int decimals,
733  NorthUnits northUnit,
734  bool formatHeading = false,
735  bool formatPitch = false,
736  bool formatRoll = false ) const;
737 
739 
740 
743 
745  double convertTemperatureUnitNativeToDisplay(
746  double temperature,
747  TemperatureUnits unit) const;
748 
750  double convertTemperatureUnitDisplayToNative(
751  double temperature,
752  TemperatureUnits unit) const;
753 
756  std::string convertTemperatureUnitNativeToDisplayString(
757  double temperature,
758  TemperatureUnits unit,
759  unsigned int decimals) const;
760 
762 
765 
767  double convertPressureUnitNativeToDisplay(
768  double pressure,
769  PressureUnits unit) const;
770 
772  double convertPressureUnitDisplayToNative(
773  double pressure,
774  PressureUnits unit) const;
775 
778  std::string convertPressureUnitNativeToDisplayString(
779  double pressure,
780  PressureUnits unit,
781  unsigned int decimals) const;
782 
784 
785  protected:
786 
795  static std::string orientationValueToText( double value, int decimals, bool additionalFormatting );
796 
806  static std::string orientationValuesToText(
807  const DtVector& ori,
808  int decimals,
809  bool formatPsi = false,
810  bool formatTheta = false,
811  bool formatPhi = false );
812 
814  static std::string valueToText( double value, int decimals );
815 
818  static std::string valuesToText( const DtVector& localVelocity, int decimals );
819 
820  protected:
821 
824 
825  // These notations are used for generating display strings. The converter
826  // caches these notations, and keeps them in sync with the shared display
827  // units settings, so that display strings can be created without a mutex lock.
828  std::unordered_map<makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode> myDistanceNotationCache;
829  std::unordered_map<makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode> myOrientationNotationCache;
830  std::unordered_map<makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode> myNorthNotationCache;
831  };
832 
833 
837  : public DtBaseSharedSettingsManager<makArchives::DtDisplayUnitsSettingsRecord,
838  DtSharedDisplayUnitsSettings>
839  {
840  public:
841 
843  static DtDisplayUnitsSettingsManager& instance( DtDe& de );
844 
847 
849  void connectInputSignals();
850 
853 
861  void setCoordinateSystem( DtDisplayUnitsConverter::CoordSys cs );
862 
868  void setDisplayUnitUnit(
869  const DtUnicode& displayUnitCollectionName,
870  const DtUnicode& displayUnitName,
871  unsigned int unitEnumValue
872  );
873 
878  void setDisplayUnitDecimals(
879  const DtUnicode& displayUnitCollectionName,
880  const DtUnicode& displayUnitName,
881  unsigned int decimals
882  );
883 
885 
888 
891  virtual void setFromRecord( const makArchives::DtDisplayUnitsSettingsRecord& rec );
892 
894 
897  void setSuppressMagneticNorthNotationEnabled(bool isEnabled);
898 
901  bool isSuppressMagneticNorthNotationEnabled() const;
902 
904  const DtDisplayUnitsConverter& converter();
905 
908  void slot_quit();
909 
910  protected:
911 
913  template <typename ManagerClass>
914  friend ManagerClass& defaultManagerInstanceFunction( DtDe&, bool );
915 
917  template <typename ManagerClass>
918  friend void defaultManagerRegisterInstanceFunction( DtDe&, ManagerClass* );
919 
922 
929  virtual void slot_initializeSynchronizer();
930 
935  virtual void slot_displayEngineAdded( const DtDeRecord& deRec );
936 
938  virtual void slot_backupRestored(const DtSettingsBackup* s);
939 
940  protected:
941 
943 
944  DtDisplayUnitsSettingsSynchronizerAgent* mySettingsSynchronizer;
945 
946  };
947 
948 }
DtDisplayUnitsConverter * myDisplayUnitsConverter
Definition: DtDisplayUnitsSettingsManager.h:942
Base class for shared settings managers. Extends the functionality provided by the DtCommonBaseSettin...
Definition: DtBaseSettingsManager.h:332
VelocityUnits
Enumeration of the different velocity units.
Definition: DtDisplayUnitsSettingsRecord.h:72
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
std::unordered_map< makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode > myOrientationNotationCache
Definition: DtDisplayUnitsSettingsManager.h:829
makArchives::DtDisplayUnitsSettingsRecord::NorthUnits NorthUnits
Definition: DtDisplayUnitsSettingsManager.h:72
Abstract interface class for all coordinate system displays.
Definition: DtCoordinateDisplay.h:24
A Record of an IG instance.
Definition: DtDeRecord.h:24
makArchives::DtDisplayUnitsSettingsRecord::OrientationUnits OrientationUnits
Definition: DtDisplayUnitsSettingsManager.h:68
DtDisplayUnitsSettingsSynchronizerAgent * mySettingsSynchronizer
Definition: DtDisplayUnitsSettingsManager.h:944
NorthUnits
Enumeration of the different north units.
Definition: DtDisplayUnitsSettingsRecord.h:150
makArchives::DtDisplayUnitsSettingsRecord::PressureUnits PressureUnits
Definition: DtDisplayUnitsSettingsManager.h:71
The shared settings manager, is the global object responsible for managing any shared settings object...
Definition: DtSharedSettingsManager.h:42
CoordSys
Enumeration of the different coordinate system types.
Definition: DtDisplayUnitsSettingsRecord.h:30
std::unordered_map< makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode > myDistanceNotationCache
Definition: DtDisplayUnitsSettingsManager.h:828
makArchives::DtDisplayUnitsSettingsRecord::RotVelocityUnits RotVelocityUnits
Definition: DtDisplayUnitsSettingsManager.h:69
PressureUnits
Enumeration of the different pressure units.
Definition: DtDisplayUnitsSettingsRecord.h:137
DistanceUnits
Enumeration of the different distance units.
Definition: DtDisplayUnitsSettingsRecord.h:56
Contains the DtSharedDisplayUnitsSettings class declaration.
RotVelocityUnits
Enumeration of the different rotational velocity units.
Definition: DtDisplayUnitsSettingsRecord.h:112
makArchives::DtDisplayUnitsSettingsRecord::AccelerationUnits AccelerationUnits
Definition: DtDisplayUnitsSettingsManager.h:67
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
DT_DLL_vrfutil double angle(double vec1[3], double vec2[3])
makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits DistanceUnits
Definition: DtDisplayUnitsSettingsManager.h:65
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
std::unordered_map< makArchives::DtDisplayUnitsSettingsRecord::DistanceUnits, DtUnicode > myNorthNotationCache
Definition: DtDisplayUnitsSettingsManager.h:830
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:866
Provides a method of doign settings backup.
Definition: DtSettingsBackup.h:23
Utility class for doing global unit conversion. All conversions functions use the following naming co...
Definition: DtDisplayUnitsSettingsManager.h:60
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:41
OrientationUnits
Enumeration of the different orientation units.
Definition: DtDisplayUnitsSettingsRecord.h:101
Manager for the display units settings.
Definition: DtDisplayUnitsSettingsManager.h:836
TemperatureUnits
Enumeration of the different temperature units.
Definition: DtDisplayUnitsSettingsRecord.h:126
makArchives::DtDisplayUnitsSettingsRecord::TemperatureUnits TemperatureUnits
Definition: DtDisplayUnitsSettingsManager.h:70
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function. Manager requirements: 1) Static instance function 2) Protected DtS...
Definition: DtDe.h:828
makArchives::DtDisplayUnitsSettingsRecord::VelocityUnits VelocityUnits
Definition: DtDisplayUnitsSettingsManager.h:66
makArchives::DtDisplayUnitsSettingsRecord::CoordSys CoordSys
Definition: DtDisplayUnitsSettingsManager.h:64
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
const DtCoordinateSystem & myCoordinateSystem
Definition: DtDisplayUnitsSettingsManager.h:822
The makVrv::DtSettingsBackup is a lightweight class that must be subclassed from if an object wants t...
AccelerationUnits
Enumeration of the different acceleration units.
Definition: DtDisplayUnitsSettingsRecord.h:88
Contains the display units shared settings.
Definition: DtDisplayUnitsSettingsRecord.h:25
Contains the DtBaseSettingsManager class declaration.
Contains DLL export macros.
DtSharedSettingsManager & mySharedSettingsManager
Definition: DtDisplayUnitsSettingsManager.h:823

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)