OpenLexocad  27.1
Units.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include <QtCore/QtCore>
5 
6 #ifdef GRAY
7 #undef GRAY
8 #endif
9 
10 #ifdef INCH
11 #undef INCH
12 #endif
13 
14 
15 namespace Base
16 {
17 enum class SIPrefix
18 {
19  EXA, // 10^18
20  PETA, // 10^15
21  TERA, // 10^12
22  GIGA, // 10^9
23  MEGA, // 10^6
24  KILO, // 10^3
25  HECTO, // 10^2
26  DECA, // 10.
27  NONE, // 1.
28  DECI, // 10^-1
29  CENTI, // 10^-2
30  MILLI, // 10^-3
31  MICRO, // 10^-6
32  NANO, // 10^-9
33  PICO, // 10^-12
34  FEMTO, // 10^-15
35  ATTO // 10^-18
36 };
37 
38 enum class SIUnitName
39 {
40  AMPERE,
41  BECQUEREL,
42  CANDELA,
43  COULOMB,
46  FARAD,
47  GRAM,
48  GRAY,
49  HENRY,
50  HERTZ,
51  JOULE,
52  KELVIN,
53  LUMEN,
54  LUX,
55  METRE,
56  MOLE,
57  NEWTON,
58  OHM,
59  PASCAL_UNIT, // "PASCAL" causes weird problems when included in GUI dll
60  RADIAN,
61  SECOND,
62  SIEMENS,
63  SIEVERT,
65  STERADIAN,
66  TESLA,
67  VOLT,
68  WATT,
69  WEBER
70 };
71 
72 enum class Quantity
73 {
74  // has base SI units (http://en.wikipedia.org/wiki/SI_base_unit)
77  LENGTH,
79  MASS,
80  TIME,
82 
83  // has named SI derived units (http://en.wikipedia.org/wiki/SI_derived_unit)
92  ENERGY,
94  FORCE,
95  FREQUENCY,
96  HEAT,
98  IMPEDANCE,
99  INDUCTANCE,
103  PLANE_ANGLE,
104  POWER,
105  PRESSURE,
106  RADIANT_FLUX,
108  REACTANCE,
109  SOLID_ANGLE,
110  STRESS,
111  TEMPERATURE,
112  VOLTAGE,
113  WEIGHT,
114  WORK,
115 
116  // has compound units (http://en.wikipedia.org/wiki/SI_derived_unit)
117  AREA,
118  MASS_DENSITY,
119  AREA_DENSITY,
120  VOLUME
121 
122  // this last chapter is not complete, more can be found on the URL above
123 };
124 
125 LX_BASE_EXPORT std::string getPrefixSymbol(Base::SIPrefix prefix);
126 
127 
128 
129 class LX_BASE_EXPORT LengthUnit
130 {
131 public:
133  {
134  METRE = 0,
135  MILLIMETRE = 1,
136  FOOT = 2,
137  INCH = 3,
138  CENTIMETRE = 4
139  };
140 
141  LengthUnit();
142  LengthUnit(double value, LengthUnitEnum unit = METRE);
143  ~LengthUnit();
144 
145  void setValue(double value, LengthUnitEnum unit = METRE);
146 
147  static QString getSymbolFromUnit(LengthUnitEnum unit);
148  static LengthUnitEnum getUnitFromSymbol(const QString& symbol);
149  static LengthUnitEnum getDefaultUnit();
150 
151  double getIn(LengthUnitEnum unit);
152  double getInMetre(Base::SIPrefix prefix = Base::SIPrefix::NONE);
153  double getInMilliMetre();
154  double getInCentiMetre();
155  double getInFoot();
156  double getInInch();
157 
158 private:
159  double _foot2Metre(double value);
160  double _inch2Metre(double value);
161  double _metre2Foot(double value);
162  double _metre2Inch(double value);
163 
165  double _value;
166 };
167 
168 class LX_BASE_EXPORT PlaneAngleUnit
169 {
170 public:
172  {
173  RADIAN = 0,
174  DEGREE = 1,
175  GON = 2,
176  PERCENT = 3,
177  PERMILLE = 4,
178  V_H = 5
179  };
180 
181  PlaneAngleUnit();
182  PlaneAngleUnit(double value, PlaneAngleUnitEnum unit = DEGREE);
183  ~PlaneAngleUnit();
184 
185  void setValue(double value, PlaneAngleUnitEnum unit = DEGREE);
186 
187  static QString getSymbolFromUnit(PlaneAngleUnitEnum unit);
188  static PlaneAngleUnitEnum getUnitFromSymbol(const QString& symbol);
189  static PlaneAngleUnitEnum getDefaultUnit();
190 
191  double getIn(PlaneAngleUnitEnum unit);
192  double getInRadian();
193  double getInDegree();
194  double getInGon();
195  double getInPercent();
196  double getInPermille();
197  double getInVH();
198 
199 private:
200  double _degree2Radian(double value);
201  double _gon2Radian(double value);
202  double _percent2Radian(double value);
203  double _permille2Radian(double value);
204  double _vh2Radian(double value);
205  double _radian2Degree(double value);
206  double _radian2Gon(double value);
207  double _radian2Percent(double value);
208  double _radian2Permille(double value);
209  double _radian2Vh(double value);
210 
212  double _value;
213 };
214 
215 class LX_BASE_EXPORT AreaUnit
216 {
217 public:
219  {
221  SQUARE_FOOT = 1,
222  SQUARE_MILLIMETRE = 2,
223  SQUARE_CENTIMETRE = 3
224  };
225 
226  AreaUnit();
227  AreaUnit(double value, AreaUnitEnum unit = SQUARE_METRE);
228  ~AreaUnit();
229 
230  void setValue(double value, AreaUnitEnum unit = SQUARE_METRE);
231 
232  static QString getSymbolFromUnit(AreaUnitEnum unit);
233  static AreaUnitEnum getUnitFromSymbol(const QString& symbol);
234  static AreaUnitEnum getDefaultUnit();
235 
236  double getIn(AreaUnitEnum unit);
237  double getInSquareMetre();
238  double getInSquareMilliMetre();
239  double getInSquareCentiMetre();
240  double getInSquareFoot();
241 
242 private:
243  double _squareFoot2SquareMetre(double value);
244  double _squareMetre2SquareFoot(double value);
245 
247  double _value;
248 };
249 
250 class LX_BASE_EXPORT VolumeUnit
251 {
252 public:
254  {
256  BOARD_FOOT = 1,
257  CUBIC_FOOT = 2,
258  CUBIC_MILLIMETRE = 3,
259  CUBIC_CENTIMETRE = 4
260  };
261 
262  VolumeUnit();
263  VolumeUnit(double value, VolumeUnitEnum unit = CUBIC_METRE);
264  ~VolumeUnit();
265 
266  void setValue(double value, VolumeUnitEnum unit = CUBIC_METRE);
267 
268  static QString getSymbolFromUnit(VolumeUnitEnum unit);
269  static VolumeUnitEnum getUnitFromSymbol(const QString& symbol);
270  static VolumeUnitEnum getDefaultUnit();
271 
272  double getIn(VolumeUnitEnum unit);
273  double getInCubicMetre();
274  double getInCubicMilliMetre();
275  double getInCubicCentiMetre();
276  double getInBoardFoot();
277  double getInCubicFoot();
278 
279 private:
280  double _boardFoot2CubicMetre(double value);
281  double _cubicFoot2CubicMetre(double value);
282  double _cubicMetre2BoardFoot(double value);
283  double _cubicMetre2CubicFoot(double value);
284 
286  double _value;
287 };
288 
289 class LX_BASE_EXPORT MassUnit
290 {
291 public:
293  {
294  KILOGRAM = 0,
295  TONNE = 1,
296  POUND = 2
297  };
298 
299  MassUnit();
300  MassUnit(double value, MassUnitEnum unit = KILOGRAM);
301  ~MassUnit();
302 
303  void setValue(double value, MassUnitEnum unit = KILOGRAM);
304 
305  static QString getSymbolFromUnit(MassUnitEnum unit);
306  static MassUnitEnum getUnitFromSymbol(const QString& symbol);
307  static MassUnitEnum getDefaultUnit();
308 
309  double getIn(MassUnitEnum unit);
310  double getInKilogram();
311  double getInTonne();
312  double getInPound();
313 
314 private:
315  double _tonne2Kilogram(double value);
316  double _pound2Kilogram(double value);
317  double _kilogram2Tonne(double value);
318  double _kilogram2Pound(double value);
319 
321  double _value;
322 };
323 
324 class LX_BASE_EXPORT MassDensityUnit
325 {
326 public:
328  {
329  KILOGRAM_CUBICMETRE = 0,
330  TONNE_CUBICMETRE = 1,
331  POUND_CUBICFOOT = 2
332  };
333 
334  MassDensityUnit();
335  MassDensityUnit(double value, MassDensityUnitEnum unit = KILOGRAM_CUBICMETRE);
336  ~MassDensityUnit();
337 
338  void setValue(double value, MassDensityUnitEnum unit = KILOGRAM_CUBICMETRE);
339 
340  static QString getSymbolFromUnit(MassDensityUnitEnum unit);
341  static MassDensityUnitEnum getUnitFromSymbol(const QString& symbol);
342  static MassDensityUnitEnum getDefaultUnit();
343 
344  double getIn(MassDensityUnitEnum unit);
345  double getInKilogramCubicMetre();
346  double getInTonneCubicMetre();
347  double getInPoundCubicFoot();
348 
349 private:
350  double _tonneCubicMetre2KilogramCubicMetre(double value);
351  double _poundCubicFoot2KilogramCubicMetre(double value);
352  double _kilogramCubicMetre2TonneCubicMetre(double value);
353  double _kilogramCubicMetre2PoundCubicFoot(double value);
354 
356  double _value;
357 };
358 
359 class LX_BASE_EXPORT AreaDensityUnit
360 {
361 public:
363  {
364  KILOGRAM_SQUAREMETRE = 0,
365  TONNE_SQUAREMETRE = 1,
366  POUND_SQUAREFOOT = 2
367  };
368 
369  AreaDensityUnit();
370  AreaDensityUnit(double value, AreaDensityUnitEnum unit = KILOGRAM_SQUAREMETRE);
371  ~AreaDensityUnit();
372 
373  void setValue(double value, AreaDensityUnitEnum unit = KILOGRAM_SQUAREMETRE);
374 
375  static QString getSymbolFromUnit(AreaDensityUnitEnum unit);
376  static AreaDensityUnitEnum getUnitFromSymbol(const QString& symbol);
377  static AreaDensityUnitEnum getDefaultUnit();
378 
379  double getIn(AreaDensityUnitEnum unit);
380  double getInKilogramSquareMetre();
381  double getInTonneSquareMetre();
382  double getInPoundSquareFoot();
383 
384 private:
385  double _tonneSquareMetre2KilogramSquareMetre(double value);
386  double _poundSquareFoot2KilogramSquareMetre(double value);
387  double _kilogramSquareMetre2TonneSquareMetre(double value);
388  double _kilogramSquareMetre2PoundSquareFoot(double value);
389 
391  double _value;
392 };
393 
394 } // namespace Base
Quantity
Definition: Units.h:72
SIPrefix
Definition: Units.h:17
AreaDensityUnitEnum
Definition: Units.h:362
MassUnitEnum
Definition: Units.h:292
Definition: Units.h:168
Definition: Units.h:250
SIUnitName
Definition: Units.h:38
Definition: Units.h:129
Definition: Units.h:215
PlaneAngleUnitEnum
Definition: Units.h:171
LX_BASE_EXPORT std::string getPrefixSymbol(Base::SIPrefix prefix)
AreaUnitEnum
Definition: Units.h:218
Definition: Units.h:289
Definition: Units.h:324
VolumeUnitEnum
Definition: Units.h:253
MassDensityUnitEnum
Definition: Units.h:327
Definition: AbstractXMLReader.h:5
Definition: Units.h:359
LengthUnitEnum
Definition: Units.h:132