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