VR-Forces 4.2 Class Documentation
unitConversions.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2013 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 #pragma once
9 
11 #include "tdbutil/tdbUnits.h"
12 #include <vrvUtil/DtVirtualBaseClass.h>
13 
14 #include <QtCore/QString>
15 #include <QtCore/QStringList>
16 #include <QtCore/QHash>
17 #include <QtCore/QList>
18 
37 
38 class DtConverter;
39 
40 typedef DtConverter* (*DtConverterFcn)(bool);
41 
44 
46 {
47 
48 public:
49 
52  {
53  };
54 
56  virtual ~DtUnitConverter()
57  {
58  };
59 
62  {
63  };
64 
66  DtUnitConverter& operator=(const DtUnitConverter& rhs)
67  {
68  if (this == &rhs)
69  {
70  return *this;
71  }
72 
73  return *this;
74  };
75 
76  virtual bool init()
77  {
78  return true;
79  }
80 
82  virtual double metersToLocal(double meters) = 0;
83 
85  virtual double localToMeters(double local) = 0;
86 };
87 
89 
91 {
92 
93 public:
94 
97  {
98  };
99 
101  virtual ~DtMeterConverter()
102  {
103  };
104 
107  DtUnitConverter(orig)
108  {
109  };
110 
113  {
114  if (this == &rhs)
115  {
116  return *this;
117  }
118 
120 
121  return *this;
122  };
123 
125  virtual double metersToLocal(double meters);
126 
128  virtual double localToMeters(double local);
129 };
130 
132 {
133 
134 public:
135 
138  {
139  };
140 
143  {
144  };
145 
148  DtUnitConverter(orig)
149  {
150  };
151 
154  {
155  if (this == &rhs)
156  {
157  return *this;
158  }
159 
161 
162  return *this;
163  };
164 
166  virtual double metersToLocal(double meters);
167 
169  virtual double localToMeters(double local);
170 };
171 
173 {
174 
175 public:
176 
179  {
180  };
181 
183  virtual ~DtFeetConverter()
184  {
185  };
186 
189  DtUnitConverter(orig)
190  {
191  };
192 
195  {
196  if (this == &rhs)
197  {
198  return *this;
199  }
200 
202 
203  return *this;
204  };
205 
207  virtual double metersToLocal(double meters);
208 
210  virtual double localToMeters(double local);
211 };
212 
214 {
215 
216 public:
217 
220  {
221  };
222 
224  virtual ~DtMileConverter()
225  {
226  };
227 
230  DtUnitConverter(orig)
231  {
232  };
233 
236  {
237  if (this == &rhs)
238  {
239  return *this;
240  }
241 
243 
244  return *this;
245  };
246 
248  virtual double metersToLocal(double meters);
249 
251  virtual double localToMeters(double local);
252 };
253 
255 {
256 
257 public:
258 
261  {
262  };
263 
266  {
267  };
268 
271  DtUnitConverter(orig)
272  {
273  };
274 
277  {
278  if (this == &rhs)
279  {
280  return *this;
281  }
282 
284 
285  return *this;
286  };
287 
289  virtual double metersToLocal(double meters);
290 
292  virtual double localToMeters(double local);
293 };
294 
296 {
297 public:
298  DtConverterClass() : myFcn(0), myReverse(false) {};
299  DtConverterClass(DtConverterFcn fcn, bool reverse) :
300  myFcn(fcn), myReverse(reverse) {};
302  myFcn(orig.myFcn), myReverse(orig.myReverse) {};
303 
304  DtConverterFcn myFcn;
305  bool myReverse;
306 };
307 
309 {
310 public:
311  DtUnit();
312  DtUnit(const QString& m, const QString& t);
313  DtUnit(const DtUnit&);
314  DtUnit& operator=(const DtUnit&);
315 
316  virtual QString stringRep() const;
317 
318  bool operator==(const DtUnit& rhs) const { return ((myMeasurement == rhs.myMeasurement) && (myTime == rhs.myTime)); };
319  bool operator!=(const DtUnit& rhs) const { return !(*this == rhs); };
320 
321  const QString& measurement() const { return myMeasurement; };
322  const QString& time() const { return myTime; };
323 
324  bool isValid() const { return (myMeasurement.length() || myTime.length()); };
325 
326 public:
327  static QString measurementTitle(const DtUnit& u);
328  static void registerMeasurementTitle(const QString& m, const QString& t, const QString& v);
329 
332  static QString unitDisplayTitle(const QString& u);
333  static void registerUnitDisplayTitle(const QString& m, const QString& t);
334 
336  static QString unitForDisplayTitle(const QString&);
337 
338  static const QHash<QString, QString>& unitDisplayTitles();
339 
340 protected:
341  QString myMeasurement;
342  QString myTime;
343  static QHash<QString, QHash<QString, QString> > theMeasurementTitles;
344  static QHash<QString, QString> theUnitTitles;
345 };
346 
348 {
349 public:
350  DtConverter(bool reverse);
351 
352  virtual double convert(double, bool reverse = false) const { return 0; };
353 
354  bool reverse() const { return myReverse; };
355 
356 protected:
357  bool myReverse;
358 };
359 
361 {
362 public:
363  DtMetersToMiles(bool);
364  virtual double convert(double, bool reverse = false) const;
365 
366  static DtConverter* create(bool);
367 };
368 
370 {
371 public:
372  DtMetersToFeet(bool);
373  virtual double convert(double, bool reverse = false) const;
374  static DtConverter* create(bool);
375 };
376 
378 {
379 public:
380  DtMetersToKilometers(bool);
381  virtual double convert(double, bool reverse = false) const;
382  static DtConverter* create(bool);
383 };
384 
386 {
387 public:
389  virtual double convert(double, bool reverse = false) const;
390  static DtConverter* create(bool);
391 };
392 
394 {
395 public:
396  DtRadiansToDegrees(bool);
397  virtual double convert(double, bool reverse = false) const;
398  static DtConverter* create(bool);
399 };
400 
402 {
403 public:
404  DtMinutesToHours(bool);
405  virtual double convert(double, bool reverse = false) const;
406  static DtConverter* create(bool);
407 };
408 
410 {
411 public:
412  DtSecondsToMinutes(bool);
413  virtual double convert(double, bool reverse = false) const;
414  static DtConverter* create(bool);
415 };
416 
418 
420 {
421 public:
422  DtOneToOneConverter(bool);
423  virtual double convert(double, bool reverse = false) const;
424  static DtConverter* create(bool);
425 };
426 
427 class DT_DLL_entityeditorimpl DtUnitConverterFactory : public makVrv::DtVirtualBaseClass
428 {
429 public:
431  {
432  DtConvertMeasurement,
433  DtConvertTime
434  };
435 
436 public:
437  DtUnitConverterFactory(makVrv::DtDe&);
438 
439  virtual ~DtUnitConverterFactory();
440 
441 public:
445  virtual void registerUnitConversion(const QString& from, const QString& to, DtConverterFcn fcn,
446  const QString& title = "", const QString& unitTitle = "", bool addTimeUnits = false);
447 
448 public:
449  static DtUnitConverterFactory& instance(makVrv::DtDe&);
450  static void registerInstance(makVrv::DtDe&, DtUnitConverterFactory*);
451 
452  virtual void registerConversion(const QString& from, const QString& to, DtConverterFcn);
453 
455  virtual bool init();
456 
457  virtual DtUnit parse(const QString&) const;
458  virtual bool canConvert(const DtUnit&, const DtUnit&) const;
459  virtual double convert(const DtUnit& from, const DtUnit& to, double val, bool& valid, bool reverse = false) const;
460  virtual double convert(DtConversionType, const DtUnit& from, const DtUnit& to, double val, bool& valid,
461  bool reverse = false) const;
462  virtual double convertReverse(const DtUnit& from, const DtUnit& to, double val, bool& valid) const;
463  virtual QList<DtConverter*> conversion(DtConversionType type, const DtUnit& from, const DtUnit& to) const;
464  virtual void findPath(DtConversionType type, const DtUnit& from, const DtUnit& to, const QHash<QString, DtConverterClass>&,
465  QList<DtConverter*>& path) const;
466 
469  virtual double convertSourceToDestination(double val, const QString& source, const QString& destination) const;
470 
472  virtual double convertDestinationToSource(double val, const QString& source, const QString& destination) const;
473 
474  virtual QString unitTitle(const QString& u) const;
475 
476 protected:
477  virtual void registerConverters();
478  virtual void registerConversion(const QString& from, const QString& to, DtConverterFcn, bool);
479 
480 protected:
481  QHash<QString, QHash<QString, DtConverterClass> > myConverters;
482  mutable QHash<QString, QList<DtConverter*> > myConversions;
483  makVrv::DtDe& myDe;
484 };

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)