OpendTect  6.6
seisposkey.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: Bert
8  Date: Nov 2008
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 */
13 
14 #include "seismod.h"
15 #include "seistype.h"
16 #include "binid.h"
17 
18 
19 namespace Seis
20 {
21 
23 {
24 public:
25 
26  inline PosKey(Seis::GeomType gt=Seis::Vol);
27  inline PosKey( const BinID& bid, float offs=mUdf(float) )
28  : binid_(bid), offset_(offs) {}
29  inline PosKey( int trcnr, float offs=mUdf(float) )
30  : binid_(mUdf(int),trcnr), offset_(offs) {}
31  inline bool operator ==(const PosKey&) const;
32 
33  inline bool is2D() const { return mIsUdf(binid_.inl()); }
34  inline bool isPS() const { return !mIsUdf(offset_); }
35  inline Seis::GeomType geomType() const { return geomTypeOf(
36  is2D(),isPS()); }
37  inline bool isUndef() const { return mIsUdf(binid_.crl()); }
38  inline void setUndef() { mSetUdf(binid_.crl()); }
39 
40  inline const BinID& binID() const { return binid_; }
41  inline int trcNr() const { return binid_.crl(); }
42  inline int inLine() const { return binid_.inl(); }
43  inline int xLine() const { return binid_.crl(); }
44  inline float offset() const { return offset_; }
45  inline bool hasOffset(float) const;
46 
47  inline void setTrcNr( int trcnr ) { binid_.crl() = trcnr; }
48  inline void setBinID( const BinID& bid ) { binid_ = bid; }
49  inline void setInline( int inl ) { binid_.inl() = inl; }
50  inline void setXine( int crl ) { binid_.crl() = crl; }
51  inline void setOffset( float offs ) { offset_ = offs; }
52  inline void set( const BinID& bid, float offs )
53  { binid_ = bid; offset_ = offs; }
54  inline void set( int trcnr, float offs )
55  { binid_.inl() = mUdf(int); binid_.crl() = trcnr;
56  offset_ = offs; }
57  inline void set(int trcnr,const BinID&,float);
59 
60  inline int& trcNr() { return binid_.crl(); }
61  inline BinID& binID() { return binid_; }
62  inline float& offset() { return offset_; }
63  inline int& inLine() { return binid_.inl(); }
64  inline int& xLine() { return binid_.crl(); }
65 
66  static PosKey undef() { return PosKey( mUdf(int) ); }
67 
68 protected:
69 
71  float offset_;
72 
73 };
74 
75 
77  : binid_(0,0)
78  , offset_(0)
79 {
80  if ( Seis::is2D(gt) ) mSetUdf(binid_.inl());
81  if ( !Seis::isPS(gt) ) mSetUdf(offset_);
82 }
83 
84 inline bool PosKey::hasOffset( float offs ) const
85 {
86  const float diff = offs - offset_;
87  return mIsZero(diff,1e-4);
88 }
89 
90 inline void PosKey::set( int nr, const BinID& bid, float offs )
91 {
92  const Seis::GeomType gt( geomType() );
93  if ( Seis::is2D(gt) )
94  setTrcNr( nr );
95  else
96  setBinID( bid );
97  if ( Seis::isPS(gt) )
98  offset_ = offs;
99  else
100  mSetUdf(offset_);
101 
102 }
103 
104 inline bool PosKey::operator ==( const PosKey& pk ) const
105 {
106  if ( binid_ != pk.binid_ )
107  return false;
108 
109  if ( mIsUdf(pk.offset_) )
110  return mIsUdf( offset_ );
111 
112  return mIsEqual(offset_,pk.offset_,1e-4); }
113 
114 };
115 
116 
Seis::PosKey::inLine
int inLine() const
Definition: seisposkey.h:42
Seis::PosKey::geomType
Seis::GeomType geomType() const
Definition: seisposkey.h:35
Seis::PosKey::offset
float & offset()
Definition: seisposkey.h:62
Seis::isPS
bool isPS(GeomType gt)
Definition: seistype.h:37
Seis::PosKey::binid_
BinID binid_
Definition: seisposkey.h:70
Seis::Vol
@ Vol
Definition: seistype.h:32
mIsEqual
#define mIsEqual(x, y, eps)
Definition: commondefs.h:67
Seis
Summary for a Seismic object.
Definition: segydirectdef.h:22
Seis::PosKey::xLine
int & xLine()
Definition: seisposkey.h:64
mIsUdf
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
Seis::PosKey::isUndef
bool isUndef() const
Definition: seisposkey.h:37
Seis::PosKey::setBinID
void setBinID(const BinID &bid)
Definition: seisposkey.h:48
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Seis::PosKey::PosKey
PosKey(int trcnr, float offs=mUdf(float))
Definition: seisposkey.h:29
binid.h
Seis::PosKey::setInline
void setInline(int inl)
Definition: seisposkey.h:49
Seis::PosKey::isPS
bool isPS() const
Definition: seisposkey.h:34
Seis::PosKey::setXine
void setXine(int crl)
Definition: seisposkey.h:50
operator==
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
Seis::PosKey::offset
float offset() const
Definition: seisposkey.h:44
BinID
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:31
Seis::PosKey::binID
const BinID & binID() const
Definition: seisposkey.h:40
mSetUdf
#define mSetUdf(val)
Use this macro to set simple types to undefined.
Definition: undefval.h:276
Seis::PosKey::operator==
bool operator==(const PosKey &) const
Definition: seisposkey.h:104
mIsZero
#define mIsZero(x, eps)
Definition: commondefs.h:66
Seis::geomTypeOf
GeomType geomTypeOf(const char *)
Seis::PosKey::xLine
int xLine() const
Definition: seisposkey.h:43
Seis::PosKey::inLine
int & inLine()
Definition: seisposkey.h:63
Seis::PosKey::setOffset
void setOffset(float offs)
Definition: seisposkey.h:51
Seis::PosKey::PosKey
PosKey(Seis::GeomType gt=Seis::Vol)
Definition: seisposkey.h:76
Seis::PosKey::setTrcNr
void setTrcNr(int trcnr)
Definition: seisposkey.h:47
Seis::PosKey::trcNr
int trcNr() const
Definition: seisposkey.h:41
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
Seis::PosKey::offset_
float offset_
Definition: seisposkey.h:71
Seis::PosKey::hasOffset
bool hasOffset(float) const
Definition: seisposkey.h:84
Seis::PosKey::set
void set(int trcnr, float offs)
Definition: seisposkey.h:54
Seis::PosKey::setUndef
void setUndef()
Definition: seisposkey.h:38
Pos::IdxPair::inl
IdxType & inl()
Definition: posidxpair.h:42
Seis::PosKey::PosKey
PosKey(const BinID &bid, float offs=mUdf(float))
Definition: seisposkey.h:27
Seis::PosKey
Definition: seisposkey.h:23
Seis::PosKey::set
void set(const BinID &bid, float offs)
Definition: seisposkey.h:52
mUdf
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
Seis::PosKey::trcNr
int & trcNr()
Definition: seisposkey.h:60
seistype.h
Seis::PosKey::binID
BinID & binID()
Definition: seisposkey.h:61
Seis::GeomType
GeomType
Definition: seistype.h:32
Seis::is2D
bool is2D(GeomType gt)
Definition: seistype.h:33
Seis::PosKey::undef
static PosKey undef()
Definition: seisposkey.h:66
Seis::PosKey::is2D
bool is2D() const
Definition: seisposkey.h:33

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