OpendTect  6.6
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  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "generalmod.h"
15 #include "propertyref.h"
16 #include "scaler.h"
17 #include "repos.h"
18 #include "survinfo.h"
19 
21 
23 
24 
36 public:
37 
39  : proptype_(PropertyRef::Other)
40  , source_(Repos::Temp) {}
41  UnitOfMeasure( const char* n, const char* s, double f,
43  : NamedObject(n), symbol_(s)
44  , scaler_(0,f), source_(Repos::Temp)
45  , proptype_(t) {}
47  : NamedObject(uom.name())
48  { *this = uom; }
49  UnitOfMeasure& operator =(const UnitOfMeasure&);
50 
51  const char* symbol() const { return symbol_.buf(); }
52  PropertyRef::StdType propType() const { return proptype_; }
53  const LinScaler& scaler() const { return scaler_; }
54 
55  void setSymbol( const char* s )
56  { symbol_ = s; }
57  void setScaler( const LinScaler& s )
58  { scaler_ = s; }
60  { proptype_ = t; }
61 
62  bool isImperial() const;
63 
64  template <class T>
65  T getSIValue( T inp ) const
66  { return ( T ) scaler_.scale(inp); }
67  template <class T>
68  T getUserValueFromSI( T inp ) const
69  { return ( T ) scaler_.unScale(inp); }
70  template <class T>
71  T internalValue(T inp) const;
72  template <class T>
73  T userValue(T inp) const;
74 
75  static const UnitOfMeasure* getGuessed(const char*);
76  Repos::Source source() const { return source_; }
77  void setSource( Repos::Source s ) { source_ = s; }
78 
79  static const UnitOfMeasure* surveyDefZUnit();
91  static uiString surveyDefZUnitAnnot(bool symbol,bool withparens);
92  static uiString surveyDefTimeUnitAnnot(bool symbol,bool withparens);
93  static uiString surveyDefDepthUnitAnnot(bool symbol,bool withparens);
94  static uiString surveyDefVelUnitAnnot(bool symbol,bool withparens);
95  static uiString zUnitAnnot(bool time,bool symbol,bool withparens);
96 
100  static void saveCurrentDefaults();
103 
104 protected:
105 
110 
111 };
112 
113 
116 template <class T> void convValue(T& val,
117  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit);
118 
119 template <class T> inline T getConvertedValue(T val,
120  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit);
121 
122 
135 {
136 public:
137 
138  const UnitOfMeasure* get(PropertyRef::StdType,const char* nm) const;
139  const UnitOfMeasure* get(const char* nm) const;
140  static const char* guessedStdName(const char*);
142 
143  const ObjectSet<const UnitOfMeasure>& all() const { return entries; }
146  const UnitOfMeasure* getCurDefaultFor(const char* key) const;
148  const UnitOfMeasure* getDefault(const char* key,PropertyRef::StdType) const;
149 
150  bool add(const UnitOfMeasure&);
152  bool write(Repos::Source) const;
153 
154 private:
155 
157 
159 
160  void addUnitsFromFile(const char*,Repos::Source);
162  const char* nm) const;
164 
166 
167 };
168 
169 
170 
171 template <class T> inline T UnitOfMeasure::internalValue( T inp ) const
172 {
173  if ( SI().zInFeet() )
174  {
175  if ( symbol_.contains("ft") )
176  return inp;
177  else if ( symbol_.contains("m") )
178  {
179  const UnitOfMeasure* feetunit = UoMR().get( "ft" );
180  return feetunit ? feetunit->getUserValueFromSI( inp ) : inp;
181  }
182  }
183 
184  return getSIValue( inp );
185 }
186 
187 
188 template <class T> inline T UnitOfMeasure::userValue( T inp ) const
189 {
190  if ( SI().zInFeet() )
191  {
192  if ( symbol_.contains("ft") )
193  return inp;
194  else if ( symbol_.contains("m") )
195  {
196  const UnitOfMeasure* feetunit = UoMR().get( "ft" );
197  return feetunit ? feetunit->getSIValue( inp ) : inp;
198  }
199  }
200 
201  return getUserValueFromSI( inp );
202 }
203 
204 
205 template <class T> void convValue( T& val,
206  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit )
207 { val = getConvertedValue( val, oldunit, newunit ); }
208 
209 
210 template <class T> inline T getConvertedValue( T val,
211  const UnitOfMeasure* oldunit, const UnitOfMeasure* newunit )
212 {
213  if ( oldunit == newunit || mIsUdf(val) )
214  return val;
215 
216  if ( oldunit )
217  val = oldunit->internalValue( val );
218  if ( newunit )
219  val = newunit->userValue( val );
220 
221  return val;
222 }
223 
Repos::Source
Source
Definition: repos.h:24
UnitOfMeasureRepository::UnitOfMeasureRepository
UnitOfMeasureRepository()
NamedObject
object with a name.
Definition: namedobj.h:42
UnitOfMeasure::setPropType
void setPropType(PropertyRef::StdType t)
Definition: unitofmeasure.h:59
UnitOfMeasure::setSymbol
void setSymbol(const char *s)
Definition: unitofmeasure.h:55
UnitOfMeasure::scaler
const LinScaler & scaler() const
Definition: unitofmeasure.h:53
UnitOfMeasure::isImperial
bool isImperial() const
UnitOfMeasureRepository::get
const UnitOfMeasure * get(const char *nm) const
UnitOfMeasure::mODTextTranslationClass
mODTextTranslationClass(UnitOfMeasure)
UnitOfMeasureRepository::guessedStdName
static const char * guessedStdName(const char *)
May return null.
OD::String::contains
bool contains(char) const
Repos::Temp
@ Temp
Definition: repos.h:24
UnitOfMeasureRepository
Repository of all Units of Measure in the system.
Definition: unitofmeasure.h:135
mGlobal
#define mGlobal(module)
Definition: commondefs.h:180
ObjectSet< const UnitOfMeasure >
UoMR
UnitOfMeasureRepository & UoMR()
UnitOfMeasure::getUserValueFromSI
T getUserValueFromSI(T inp) const
Definition: unitofmeasure.h:68
UnitOfMeasure::symbol
const char * symbol() const
Definition: unitofmeasure.h:51
mIsUdf
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
UnitOfMeasureRepository::add
bool add(const UnitOfMeasure &)
returns false when already present
UnitOfMeasure::surveyDefTimeUnitAnnot
static uiString surveyDefTimeUnitAnnot(bool symbol, bool withparens)
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
UnitOfMeasure::propType
PropertyRef::StdType propType() const
Definition: unitofmeasure.h:52
UnitOfMeasure::symbol_
BufferString symbol_
Definition: unitofmeasure.h:106
ODInst::Other
@ Other
Definition: odinst.h:44
UnitOfMeasure::getGuessed
static const UnitOfMeasure * getGuessed(const char *)
UnitOfMeasure::surveyDefDepthUnitAnnot
static uiString surveyDefDepthUnitAnnot(bool symbol, bool withparens)
UnitOfMeasure::source_
Repos::Source source_
Definition: unitofmeasure.h:109
PropertyRef::Other
@ Other
Definition: propertyref.h:49
scaler.h
UnitOfMeasure::surveyDefDepthStorageUnit
static const UnitOfMeasure * surveyDefDepthStorageUnit()
Default depth unit in storage (m,ft)
UnitOfMeasure::setSource
void setSource(Repos::Source s)
Definition: unitofmeasure.h:77
ManagedObjectSet< const UnitOfMeasure >
UnitOfMeasureRepository::write
bool write(Repos::Source) const
UnitOfMeasureRepository::getInternalFor
const UnitOfMeasure * getInternalFor(PropertyRef::StdType) const
UnitOfMeasureRepository::getRelevant
void getRelevant(PropertyRef::StdType, ObjectSet< const UnitOfMeasure > &) const
LinScaler
Linear scaling.
Definition: scaler.h:58
UnitOfMeasure::surveyDefZUnit
static const UnitOfMeasure * surveyDefZUnit()
Default unit in displays (ms,m,ft)
UnitOfMeasure::surveyDefVelUnit
static const UnitOfMeasure * surveyDefVelUnit()
Default velocity unit in displays (m/s,ft/s)
UnitOfMeasureRepository::all
const ObjectSet< const UnitOfMeasure > & all() const
Definition: unitofmeasure.h:143
UnitOfMeasure::currentDefaults
static IOPar & currentDefaults()
UnitOfMeasure::getSIValue
T getSIValue(T inp) const
Definition: unitofmeasure.h:65
SI
const SurveyInfo & SI()
UnitOfMeasure::surveyDefTimeUnit
static const UnitOfMeasure * surveyDefTimeUnit()
Default time unit in displays (ms)
UnitOfMeasure::setScaler
void setScaler(const LinScaler &s)
Definition: unitofmeasure.h:57
UnitOfMeasure::userValue
T userValue(T inp) const
Definition: unitofmeasure.h:188
UnitOfMeasureRepository::getCurDefaultFor
const UnitOfMeasure * getCurDefaultFor(const char *key) const
getConvertedValue
T getConvertedValue(T val, const UnitOfMeasure *oldunit, const UnitOfMeasure *newunit)
Definition: unitofmeasure.h:210
UnitOfMeasure::scaler_
LinScaler scaler_
Definition: unitofmeasure.h:107
UnitOfMeasure::saveCurrentDefaults
static void saveCurrentDefaults()
propertyref.h
UnitOfMeasureRepository::entries
ManagedObjectSet< const UnitOfMeasure > entries
Definition: unitofmeasure.h:158
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
PropertyRef
Ref Data for a (usually petrophysical) property.
Definition: propertyref.h:43
UnitOfMeasure
Unit of Measure.
Definition: unitofmeasure.h:35
UnitOfMeasureRepository::UoMR
friend UnitOfMeasureRepository & UoMR()
survinfo.h
UnitOfMeasure::proptype_
PropertyRef::StdType proptype_
Definition: unitofmeasure.h:108
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
UnitOfMeasureRepository::findBest
const UnitOfMeasure * findBest(const ObjectSet< const UnitOfMeasure > &, const char *nm) const
Will try names first, then symbols, otherwise null.
UnitOfMeasure::surveyDefDepthUnit
static const UnitOfMeasure * surveyDefDepthUnit()
Default depth unit in displays (m,ft)
convValue
void convValue(T &val, const UnitOfMeasure *oldunit, const UnitOfMeasure *newunit)
Definition: unitofmeasure.h:205
UnitOfMeasure::internalValue
T internalValue(T inp) const
Definition: unitofmeasure.h:171
UnitOfMeasure::surveyDefZUnitAnnot
static uiString surveyDefZUnitAnnot(bool symbol, bool withparens)
PropertyRef::StdType
StdType
Definition: propertyref.h:46
UnitOfMeasure::surveyDefZStorageUnit
static const UnitOfMeasure * surveyDefZStorageUnit()
Default unit in storage (s,m,ft)
UnitOfMeasureRepository::addUnitsFromFile
void addUnitsFromFile(const char *, Repos::Source)
UnitOfMeasure::UnitOfMeasure
UnitOfMeasure(const char *n, const char *s, double f, PropertyRef::StdType t=PropertyRef::Other)
Definition: unitofmeasure.h:41
UnitOfMeasureRepository::getDefault
const UnitOfMeasure * getDefault(const char *key, PropertyRef::StdType) const
UnitOfMeasureRepository::get
const UnitOfMeasure * get(PropertyRef::StdType, const char *nm) const
repos.h
UnitOfMeasure::source
Repos::Source source() const
Definition: unitofmeasure.h:76
UnitOfMeasure::surveyDefVelUnitAnnot
static uiString surveyDefVelUnitAnnot(bool symbol, bool withparens)
UnitOfMeasure::UnitOfMeasure
UnitOfMeasure()
Definition: unitofmeasure.h:38
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Repos
Definition: repos.h:22
UnitOfMeasure::zUnitAnnot
static uiString zUnitAnnot(bool time, bool symbol, bool withparens)
UnitOfMeasure::UnitOfMeasure
UnitOfMeasure(const UnitOfMeasure &uom)
Definition: unitofmeasure.h:46

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