OpendTect  6.6
posinfo.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: 2005 / Mar 2008
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "manobjectset.h"
16 #include "typeset.h"
17 #include "trckeyzsampling.h"
18 #include "indexinfo.h"
19 #include "binid.h"
20 #include "od_iosfwd.h"
21 
22 
39 namespace PosInfo
40 {
41 
48 {
49 public:
51 
52  LineData( int i ) : linenr_(i) {}
53 
54  const int linenr_;
56 
57  int size() const;
58  int segmentOf(int) const;
60  void merge(const LineData&,bool incl);
62 
63  int nearestSegment(double) const;
64 
65 };
66 
67 
73 {
74 public:
75  CubeDataPos( int iln=0, int isn=0, int sidx=-1 )
76  : lidx_(iln), segnr_(isn), sidx_(sidx) {}
77 
78  int lidx_;
79  int segnr_;
80  int sidx_;
81 
82  void toPreStart() { lidx_ = segnr_ = 0; sidx_ = -1; }
83  void toStart() { lidx_ = segnr_ = sidx_ = 0; }
84  bool isValid() const { return lidx_>=0 && segnr_>=0 && sidx_>=0; }
85 
86 };
87 
88 
95 {
96 public:
97 
98  CubeData() {}
99  CubeData( BinID start, BinID stop, BinID step )
100  { generate(start,stop,step); }
101  CubeData( const CubeData& cd )
103  { *this = cd; }
104  CubeData& operator =( const CubeData& cd )
105  { copyContents(cd); return *this; }
106 
107  int totalSize() const;
108  int totalSizeInside(const TrcKeySampling& hrg) const;
111  virtual int indexOf(int inl,int* newidx=0) const;
113  bool includes(const BinID&) const;
114  bool includes(int inl,int crl) const;
115  void getRanges(Interval<int>& inl,Interval<int>& crl) const;
116  bool getInlRange(StepInterval<int>&,bool sorted=true) const;
118  bool getCrlRange(StepInterval<int>&,bool sorted=true) const;
120 
121  bool isValid(const CubeDataPos&) const;
122  bool isValid(const BinID&) const;
123  bool isValid(od_int64 globalidx,const TrcKeySampling&) const;
124 
125  bool toNext(CubeDataPos&) const;
126  BinID binID(const CubeDataPos&) const;
128 
129  bool haveInlStepInfo() const { return size() > 1; }
130  bool haveCrlStepInfo() const;
131  bool isFullyRectAndReg() const;
132  bool isCrlReversed() const;
133 
134  void limitTo(const TrcKeySampling&);
135  void merge(const CubeData&,bool incl);
137  void generate(BinID start,BinID stop,BinID step,
138  bool allowreversed=false);
139 
140  bool read(od_istream&,bool asc);
141  bool write(od_ostream&,bool asc) const;
142 
143  virtual int indexOf( const LineData* l ) const
144  { return ObjectSet<LineData>::indexOf( l ); }
145 
146 protected:
147 
148  void copyContents(const CubeData&);
149 
150 };
151 
152 
159 {
160 public:
162  SortedCubeData( const BinID& start, const BinID& stop,
163  const BinID& step )
164  : CubeData(start,stop,step) {}
166  : CubeData( cd )
167  { *this = cd; }
168  SortedCubeData( const CubeData& cd ) { *this = cd; }
169  SortedCubeData& operator =( const SortedCubeData& scd )
170  { copyContents(scd); return *this; }
171  SortedCubeData& operator =( const CubeData& cd )
172  { copyContents(cd); return *this; }
173 
174  virtual int indexOf(int inl,int* newidx=0) const;
176 
178 
179  virtual int indexOf( const LineData* l ) const
180  { return CubeData::indexOf( l ); }
181 
182 protected:
183 
184  virtual CubeData& doAdd(LineData*);
185 
186 };
187 
188 
194 {
195 public:
198 
199  void add(const BinID&);
200  void finish(); // automatically called on delete
201 
202 protected:
203 
207  int prevcrl;
208 
209  void initLine();
210  void finishLine();
212 
213 };
214 
215 
221 {
222 public:
223 
225  : cd_(cd) {}
226 
227  inline bool next( BinID& bid )
228  {
229  const bool rv = cd_.toNext( cdp_ );
230  bid = binID(); return rv;
231  }
232  inline void reset() { cdp_.toPreStart(); }
233  inline BinID binID() const { return cd_.binID( cdp_ ); }
234 
235  const CubeData& cd_;
237 
238 };
239 
240 
241 } // namespace PosInfo
242 
PosInfo::CubeData
Position info for an entire 3D cube. The LineData's are not sorted.
Definition: posinfo.h:95
TrcKeySampling
Horizontal sampling (inline and crossline range and steps).
Definition: trckeysampling.h:35
PosInfo::CubeDataPos::toStart
void toStart()
Definition: posinfo.h:83
PosInfo::SortedCubeData
Position info for an entire 3D cube. The LineData's are sorted.
Definition: posinfo.h:159
PosInfo::CubeDataIterator::reset
void reset()
Definition: posinfo.h:232
PosInfo::CubeData::CubeData
CubeData(BinID start, BinID stop, BinID step)
Definition: posinfo.h:99
PosInfo::CubeData::generate
void generate(BinID start, BinID stop, BinID step, bool allowreversed=false)
PosInfo::CubeDataFiller::ld_
LineData * ld_
Definition: posinfo.h:205
PosInfo::LineData::Segment
StepInterval< int > Segment
Definition: posinfo.h:50
PosInfo::CubeDataIterator::next
bool next(BinID &bid)
Definition: posinfo.h:227
PosInfo::CubeDataPos::segnr_
int segnr_
Definition: posinfo.h:79
PosInfo::CubeData::includes
bool includes(const BinID &) const
PosInfo::CubeDataFiller::add
void add(const BinID &)
PosInfo::CubeDataFiller::seg_
LineData::Segment seg_
Definition: posinfo.h:206
PosInfo::CubeData::CubeData
CubeData()
Definition: posinfo.h:98
PosInfo::CubeData::totalSizeInside
int totalSizeInside(const TrcKeySampling &hrg) const
PosInfo::CubeData::merge
void merge(const CubeData &, bool incl)
incl=union, !incl=intersection
PosInfo::SortedCubeData::add
SortedCubeData & add(LineData *)
indexinfo.h
od_int64
#define od_int64
Definition: plftypes.h:35
PosInfo::CubeData::limitTo
void limitTo(const TrcKeySampling &)
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
PosInfo::SortedCubeData::doAdd
virtual CubeData & doAdd(LineData *)
PosInfo::LineData::segmentOf
int segmentOf(int) const
PosInfo::SortedCubeData::SortedCubeData
SortedCubeData()
Definition: posinfo.h:161
PosInfo::CubeData::getInlRange
bool getInlRange(StepInterval< int > &, bool sorted=true) const
Returns whether fully regular.
od_istream
OD class for stream read common access to the std::cin.
Definition: od_istream.h:24
PosInfo::CubeDataFiller::initLine
void initLine()
PosInfo::CubeDataFiller::finish
void finish()
PosInfo::LineData::merge
void merge(const LineData &, bool incl)
incl=union, !incl=intersection
PosInfo::CubeData::haveInlStepInfo
bool haveInlStepInfo() const
Definition: posinfo.h:129
PosInfo::LineData::size
int size() const
PosInfo::CubeData::haveCrlStepInfo
bool haveCrlStepInfo() const
PosInfo::SortedCubeData::indexOf
virtual int indexOf(int inl, int *newidx=0) const
newidx only filled if not null and -1 is returned
binid.h
PosInfo::CubeData::CubeData
CubeData(const CubeData &cd)
Definition: posinfo.h:101
PosInfo::CubeData::toNext
bool toNext(CubeDataPos &) const
typeset.h
PosInfo::SortedCubeData::SortedCubeData
SortedCubeData(const BinID &start, const BinID &stop, const BinID &step)
Definition: posinfo.h:162
PosInfo::CubeDataPos
Position in a CubeData.
Definition: posinfo.h:73
PosInfo::SortedCubeData::SortedCubeData
SortedCubeData(const CubeData &cd)
Definition: posinfo.h:168
PosInfo::CubeDataPos::CubeDataPos
CubeDataPos(int iln=0, int isn=0, int sidx=-1)
Definition: posinfo.h:75
ManagedObjectSet< LineData >
PosInfo::CubeDataFiller
Fills CubeData object. Requires inline- and crossline-sorting.
Definition: posinfo.h:194
BinID
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:31
StepInterval< int >
PosInfo::CubeData::indexOf
virtual int indexOf(const LineData *l) const
Definition: posinfo.h:143
PosInfo::CubeDataIterator
Iterates through CubeData.
Definition: posinfo.h:221
PosInfo::CubeDataFiller::prevcrl
int prevcrl
Definition: posinfo.h:207
PosInfo::CubeData::getRanges
void getRanges(Interval< int > &inl, Interval< int > &crl) const
PosInfo::CubeDataPos::isValid
bool isValid() const
Definition: posinfo.h:84
PosInfo::CubeData::isCrlReversed
bool isCrlReversed() const
PosInfo::CubeData::isValid
bool isValid(const CubeDataPos &) const
trckeyzsampling.h
PosInfo::LineData::segments_
TypeSet< Segment > segments_
Definition: posinfo.h:55
PosInfo::CubeData::isFullyRectAndReg
bool isFullyRectAndReg() const
PosInfo::LineData::linenr_
const int linenr_
Definition: posinfo.h:54
PosInfo::CubeData::read
bool read(od_istream &, bool asc)
PosInfo::CubeDataPos::sidx_
int sidx_
Definition: posinfo.h:80
PosInfo::LineData::nearestSegment
int nearestSegment(double) const
PosInfo::CubeDataFiller::findLine
LineData * findLine(int)
PosInfo::CubeData::isValid
bool isValid(int64_t globalidx, const TrcKeySampling &) const
PosInfo::CubeDataPos::lidx_
int lidx_
Definition: posinfo.h:78
PosInfo::CubeData::totalSize
int totalSize() const
PosInfo::CubeDataIterator::cdp_
CubeDataPos cdp_
Definition: posinfo.h:236
PosInfo::CubeData::write
bool write(od_ostream &, bool asc) const
PosInfo::CubeData::cubeDataPos
CubeDataPos cubeDataPos(const BinID &) const
PosInfo::LineData::range
Interval< int > range() const
PosInfo::SortedCubeData::indexOf
virtual int indexOf(const LineData *l) const
Definition: posinfo.h:179
PosInfo::CubeDataFiller::~CubeDataFiller
~CubeDataFiller()
PosInfo::CubeData::getCrlRange
bool getCrlRange(StepInterval< int > &, bool sorted=true) const
Returns whether fully regular.
PosInfo::CubeData::isValid
bool isValid(const BinID &) const
PosInfo::LineData::LineData
LineData(int i)
Definition: posinfo.h:52
ObjectSet::indexOf
virtual idx_type indexOf(const T *) const
Definition: objectset.h:420
PosInfo::CubeDataIterator::CubeDataIterator
CubeDataIterator(const CubeData &cd)
Definition: posinfo.h:224
PosInfo
Position info, often segmented.
Definition: posinfo.h:40
od_iosfwd.h
PosInfo::CubeData::copyContents
void copyContents(const CubeData &)
PosInfo::CubeDataIterator::binID
BinID binID() const
Definition: posinfo.h:233
PosInfo::CubeDataFiller::CubeDataFiller
CubeDataFiller(CubeData &)
PosInfo::SortedCubeData::SortedCubeData
SortedCubeData(const SortedCubeData &cd)
Definition: posinfo.h:165
manobjectset.h
PosInfo::CubeData::includes
bool includes(int inl, int crl) const
PosInfo::CubeDataPos::toPreStart
void toPreStart()
Definition: posinfo.h:82
PosInfo::CubeDataIterator::cd_
const CubeData & cd_
Definition: posinfo.h:235
Interval< int >
od_ostream
OD class for stream write common access to the user log file, or std::cout in other than od_main.
Definition: od_ostream.h:26
PosInfo::LineData
Position info for a line - in a 3D cube, that would be an inline. Stored as (crossline-)number segmen...
Definition: posinfo.h:48
PosInfo::CubeDataFiller::cd_
CubeData & cd_
Definition: posinfo.h:204
PosInfo::CubeData::binID
BinID binID(const CubeDataPos &) const
PosInfo::CubeDataFiller::finishLine
void finishLine()
TypeSet
Sets of (small) copyable elements.
Definition: commontypes.h:29
PosInfo::CubeData::indexOf
virtual int indexOf(int inl, int *newidx=0) const
newidx only filled if not null and -1 is returned

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