00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __igtlUnit_h
00018 #define __igtlUnit_h
00019
00020 #include "igtlWin32Header.h"
00021
00022 #include "igtlMacro.h"
00023 #include "igtlObject.h"
00024 #include "igtlObjectFactory.h"
00025 #include "igtlTypes.h"
00026
00027 namespace igtl
00028 {
00029
00030 typedef igtlUint64 igtlUnit;
00031
00032 class IGTLCommon_EXPORT Unit : public Object
00033 {
00034 public:
00035
00036
00037 enum {
00038 SI_PREFIX_NONE = 0x0,
00039 SI_PREFIX_DEKA = 0x1,
00040 SI_PREFIX_HECTO = 0x2,
00041 SI_PREFIX_KILO = 0x3,
00042 SI_PREFIX_MEGA = 0x4,
00043 SI_PREFIX_GIGA = 0x5,
00044 SI_PREFIX_TERA = 0x6,
00045 SI_PREFIX_PETA = 0x7,
00046 SI_PREFIX_DECI = 0x9,
00047 SI_PREFIX_CENTI = 0xA,
00048 SI_PREFIX_MILLI = 0xB,
00049 SI_PREFIX_MICRO = 0xC,
00050 SI_PREFIX_NANO = 0xD,
00051 SI_PREFIX_PICO = 0xE,
00052 SI_PREFIX_FEMTO = 0xF,
00053 };
00054
00055
00056 enum {
00057
00058 SI_BASE_NONE = 0x00,
00059 SI_BASE_METER = 0x01,
00060 SI_BASE_GRAM = 0x02,
00061 SI_BASE_SECOND = 0x03,
00062 SI_BASE_AMPERE = 0x04,
00063 SI_BASE_KELVIN = 0x05,
00064 SI_BASE_MOLE = 0x06,
00065 SI_BASE_CANDELA = 0x07,
00066
00067
00068 SI_DERIVED_RADIAN = 0x08,
00069 SI_DERIVED_STERADIAN = 0x09,
00070 SI_DERIVED_HERTZ = 0x0A,
00071 SI_DERIVED_NEWTON = 0x0B,
00072 SI_DERIVED_PASCAL = 0x0C,
00073 SI_DERIVED_JOULE = 0x0D,
00074 SI_DERIVED_WATT = 0x0E,
00075 SI_DERIVED_COULOMB = 0x0F,
00076 SI_DERIVED_VOLT = 0x10,
00077 SI_DERIVED_FARAD = 0x11,
00078 SI_DERIVED_OHM = 0x12,
00079 SI_DERIVED_SIEMENS = 0x13,
00080 SI_DERIVED_WEBER = 0x14,
00081 SI_DERIVED_TESLA = 0x15,
00082 SI_DERIVED_HENRY = 0x16,
00083 SI_DERIVED_LUMEN = 0x17,
00084 SI_DERIVED_LUX = 0x18,
00085 SI_DERIVED_BECQUEREL = 0x19,
00086 SI_DERIVED_GRAY = 0x1A,
00087 SI_DERIVED_SIEVERT = 0x1B,
00088
00089 SI_NUM_UNIT_TYPES = 0x1C,
00090 };
00091
00092
00093
00094 public:
00095 typedef Unit Self;
00096 typedef Object Superclass;
00097 typedef SmartPointer< Self > Pointer;
00098 typedef SmartPointer< const Self > ConstPointer;
00099
00100 igtlTypeMacro(Unit, Object);
00101 igtlNewMacro(Self);
00102
00103 void Init();
00104 int SetPrefix(int prefix);
00105 int Append(int unit, int exp);
00106
00107 igtlUnit Pack();
00108 int Unpack(igtlUnit unit);
00109
00110 protected:
00111
00113 Unit();
00114
00116 virtual ~Unit();
00117
00118
00119 private:
00120
00121 igtlUint8 m_Prefix;
00122 igtlUint8 m_Unit[6];
00123 igtlInt8 m_Exp[6];
00124
00125 igtlInt32 m_NUnits;
00126
00127 };
00128
00129 }
00130
00131 #endif // __igtlUnit_h
00132
00133