OpendTect  6.3
unitofmeasure.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A.H.Bril
8  Date: Feb 2004
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "generalmod.h"
14 #include "propertyref.h"
15 #include "scaler.h"
16 #include "repos.h"
17 #include "survinfo.h"
18 
20 
22 
23 
35 public:
36 
38  : proptype_(PropertyRef::Other)
39  , source_(Repos::Temp) {}
40  UnitOfMeasure( const char* n, const char* s, double f,
42  : NamedObject(n), symbol_(s)
43  , scaler_(0,f), source_(Repos::Temp)
44  , proptype_(t) {}
46  : NamedObject(uom.name())
47  { *this = uom; }
48  UnitOfMeasure& operator =(const UnitOfMeasure&);
49 
50  const char* symbol() const { return symbol_.buf(); }
51  PropertyRef::StdType propType() const { return proptype_; }
52  const LinScaler& scaler() const { return scaler_; }
53 
54  void setSymbol( const char* s )
55  { symbol_ = s; }
56  void setScaler( const LinScaler& s )
57  { scaler_ = s; }
59  { proptype_ = t; }
60 
61  bool isImperial() const;
62 
63  template <class T>
64  T getSIValue( T inp ) const
65  { return ( T ) scaler_.scale(inp); }
66  template <class T>
67  T getUserValueFromSI( T inp ) const
68  { return ( T ) scaler_.unScale(inp); }
69  template <class T>
70  T internalValue(T inp) const;
71  template <class T>
72  T userValue(T inp) const;
73 
74  static const UnitOfMeasure* getGuessed(const char*);
75  Repos::Source source() const { return source_; }
76  void setSource( Repos::Source s ) { source_ = s; }
77 
78  static const UnitOfMeasure* surveyDefZUnit();
80  static const UnitOfMeasure* surveyDefZStorageUnit();
82  static const UnitOfMeasure* surveyDefTimeUnit();
84  static const UnitOfMeasure* surveyDefDepthUnit();
86  static const UnitOfMeasure* surveyDefDepthStorageUnit();
88  static const UnitOfMeasure* surveyDefVelUnit();
90  static uiString surveyDefZUnitAnnot(bool symbol,bool withparens);
91  static uiString surveyDefTimeUnitAnnot(bool symbol,bool withparens);
92  static uiString surveyDefDepthUnitAnnot(bool symbol,bool withparens);
93  static uiString surveyDefVelUnitAnnot(bool symbol,bool withparens);
94  static uiString zUnitAnnot(bool time,bool symbol,bool withparens);
95 
96  static IOPar& currentDefaults();
99  static void saveCurrentDefaults();
102 
103 protected:
104 
109 
110 };
111 
112 
115 template <class T> void convValue(T& val,
116  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit);
117 
118 template <class T> inline T getConvertedValue(T val,
119  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit);
120 
121 
134 {
135 public:
136 
137  const UnitOfMeasure* get(PropertyRef::StdType,const char* nm) const;
138  const UnitOfMeasure* get(const char* nm) const;
139  static const char* guessedStdName(const char*);
141 
142  const ObjectSet<const UnitOfMeasure>& all() const { return entries; }
143  void getRelevant(PropertyRef::StdType,
145  const UnitOfMeasure* getCurDefaultFor(const char* key) const;
146  const UnitOfMeasure* getInternalFor(PropertyRef::StdType) const;
147  const UnitOfMeasure* getDefault(const char* key,PropertyRef::StdType) const;
148 
149  bool add(const UnitOfMeasure&);
151  bool write(Repos::Source) const;
152 
153 private:
154 
156 
158 
159  void addUnitsFromFile(const char*,Repos::Source);
161  const char* nm) const;
163 
164  friend mGlobal(General) UnitOfMeasureRepository& UoMR();
165 
166 };
167 
168 
169 
170 template <class T> inline T UnitOfMeasure::internalValue( T inp ) const
171 {
172  if ( SI().zInFeet() )
173  {
174  if ( symbol_.contains("ft") )
175  return inp;
176  else if ( symbol_.contains("m") )
177  {
178  const UnitOfMeasure* feetunit = UoMR().get( "ft" );
179  return feetunit ? feetunit->getUserValueFromSI( inp ) : inp;
180  }
181  }
182 
183  return getSIValue( inp );
184 }
185 
186 
187 template <class T> inline T UnitOfMeasure::userValue( T inp ) const
188 {
189  if ( SI().zInFeet() )
190  {
191  if ( symbol_.contains("ft") )
192  return inp;
193  else if ( symbol_.contains("m") )
194  {
195  const UnitOfMeasure* feetunit = UoMR().get( "ft" );
196  return feetunit ? feetunit->getSIValue( inp ) : inp;
197  }
198  }
199 
200  return getUserValueFromSI( inp );
201 }
202 
203 
204 template <class T> void convValue( T& val,
205  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit )
206 { val = getConvertedValue( val, oldunit, newunit ); }
207 
208 
209 template <class T> inline T getConvertedValue( T val,
210  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit )
211 {
212  if ( oldunit == newunit || mIsUdf(val) )
213  return val;
214 
215  if ( oldunit )
216  val = oldunit->internalValue( val );
217  if ( newunit )
218  val = newunit->userValue( val );
219 
220  return val;
221 }
#define mExpClass(module)
Definition: commondefs.h:157
void setSource(Repos::Source s)
Definition: unitofmeasure.h:76
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
Definition: repos.h:20
bool add(const UnitOfMeasure &)
returns false when already present
const UnitOfMeasure * getInternalFor(PropertyRef::StdType) const
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
#define mGlobal(module)
Definition: commondefs.h:160
Repository of all Units of Measure in the system.
Definition: unitofmeasure.h:133
Ref Data for a (usually petrophysical) property.
Definition: propertyref.h:40
UnitOfMeasure(const char *n, const char *s, double f, PropertyRef::StdType t=PropertyRef::Other)
Definition: unitofmeasure.h:40
bool contains(char) const
Definition: odinst.h:40
Definition: uistring.h:88
const UnitOfMeasure * findBest(const ObjectSet< const UnitOfMeasure > &, const char *nm) const
Will try names first, then symbols, otherwise null.
const UnitOfMeasure * getDefault(const char *key, PropertyRef::StdType) const
PropertyRef::StdType proptype_
Definition: unitofmeasure.h:107
T getSIValue(T inp) const
Definition: unitofmeasure.h:64
Definition: propertyref.h:47
T getConvertedValue(T val, const UnitOfMeasure *oldunit, const UnitOfMeasure *newunit)
Definition: unitofmeasure.h:209
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
T userValue(T inp) const
Definition: unitofmeasure.h:187
const char * symbol() const
Definition: unitofmeasure.h:50
Source
Definition: repos.h:23
const UnitOfMeasure * getCurDefaultFor(const char *key) const
Definition: repos.h:23
void addUnitsFromFile(const char *, Repos::Source)
Repos::Source source_
Definition: unitofmeasure.h:108
const SurveyInfo & SI()
void setScaler(const LinScaler &s)
Definition: unitofmeasure.h:56
const UnitOfMeasure * get(PropertyRef::StdType, const char *nm) const
Repos::Source source() const
Definition: unitofmeasure.h:75
PropertyRef::StdType propType() const
Definition: unitofmeasure.h:51
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
object with a name.
Definition: namedobj.h:20
T internalValue(T inp) const
Definition: unitofmeasure.h:170
UnitOfMeasure(const UnitOfMeasure &uom)
Definition: unitofmeasure.h:45
bool write(Repos::Source) const
void getRelevant(PropertyRef::StdType, ObjectSet< const UnitOfMeasure > &) const
LinScaler scaler_
Definition: unitofmeasure.h:106
const LinScaler & scaler() const
Definition: unitofmeasure.h:52
T getUserValueFromSI(T inp) const
Definition: unitofmeasure.h:67
ManagedObjectSet< const UnitOfMeasure > entries
Definition: unitofmeasure.h:157
void setSymbol(const char *s)
Definition: unitofmeasure.h:54
StdType
Definition: propertyref.h:44
const ObjectSet< const UnitOfMeasure > & all() const
Definition: unitofmeasure.h:142
void setPropType(PropertyRef::StdType t)
Definition: unitofmeasure.h:58
BufferString symbol_
Definition: unitofmeasure.h:105
UnitOfMeasure()
Definition: unitofmeasure.h:37
void convValue(T &val, const UnitOfMeasure *oldunit, const UnitOfMeasure *newunit)
Definition: unitofmeasure.h:204
static const char * guessedStdName(const char *)
May return null.
Unit of Measure.
Definition: unitofmeasure.h:33
Linear scaling.
Definition: scaler.h:55
UnitOfMeasureRepository & UoMR()

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017