OpendTect  6.6
posinfo2d.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: Jul 2010 (org 2005 / 2008)
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "typeset.h"
16 #include "coord.h"
17 #include "bufstring.h"
18 #include "od_iosfwd.h"
19 
20 
21 namespace PosInfo
22 {
23 
29 {
30 public:
31 
32  Line2DPos( int n=0 ) : nr_(n) {}
33  bool operator ==( const Line2DPos& p ) const { return nr_ == p.nr_; }
34  bool operator !=( const Line2DPos& p ) const { return nr_ != p.nr_; }
35  bool operator >( const Line2DPos& p ) const { return nr_ > p.nr_; }
36  bool operator <( const Line2DPos& p ) const { return nr_ < p.nr_; }
37  bool operator >=( const Line2DPos& p ) const { return nr_>=p.nr_; }
38  bool operator <=( const Line2DPos& p ) const { return nr_<=p.nr_; }
39 
40  int nr_;
42 
43 };
44 
45 
51 {
52 public:
53  Line2DPos3D( int n=0, float z=mUdf(float) )
54  : Line2DPos(n), z_(z) {}
55 
56  float z_;
57 };
58 
59 
65 {
66 public:
67  Line2DData(const char* lnm=0);
68 
69  Line2DData(const Line2DData& l2d)
70  : zrg_(l2d.zRange())
71  , lnm_(l2d.lineName())
72  , posns_(l2d.positions()){}
73 
74  const StepInterval<float>& zRange() const { return zrg_; }
75  const OD::String& lineName() const { return lnm_; }
76  void setZRange( const StepInterval<float>& zrg )
77  { zrg_ = zrg; }
78  void setLineName( const char* lnm ) { lnm_ = lnm; }
79  int size() const { return posns_.size();}
80  const TypeSet<Line2DPos>& positions() const { return posns_; }
81  bool isEmpty() const { return posns_.isEmpty(); }
82 
83  void add(const Line2DPos&);
84  void remove(int trcnr);
85  void setEmpty() { posns_.erase(); }
86  void limitTo(Interval<int> trcrg);
87 
88  int indexOf(int trcnr) const;
89  bool isPresent( int trcnr ) const
90  { return indexOf(trcnr)>=0; }
91  int nearestIdx( const Coord& crd ) const
92  { return gtIndex(crd); }
93  int nearestIdx(const Coord&,
94  const Interval<int>& trcnrrg) const;
95 
96  bool getPos(const Coord& crd,Line2DPos& l2p,
97  float* dist=0) const;
98  bool getPos(const Coord& crd,Line2DPos& l2p,
99  float threshold_distance) const;
100  bool getPos(int trcnr,Line2DPos&) const;
101 
102  void dump(od_ostream&,bool pretty=true) const;
103  bool read(od_istream&,bool asc);
104  bool write(od_ostream&,bool asc,bool newlns=false) const;
105 
106  const TypeSet<int>& getBendPoints() const;
109 
111  Coord getNormal(int trcnr) const;
112  void compDistBetwTrcsStats(float& max,float& median) const;
113  float distBetween(int startnr,int stopnr) const;
114 
115  bool coincidesWith(const Line2DData&) const;
120 protected:
121 
126 
127  int gtIndex(int,bool&) const;
128  int gtIndex(const Coord&,double* sqdist=0) const;
130 
131  friend class Line2DDataIterator;
132 
133 };
134 
135 
139 {
140 public:
141 
143  : ld_(ld), idx_(-1) {}
144 
145  inline bool next()
146  {
147  idx_++;
148  return idx_ < ld_.posns_.size();
149  }
150 
151  inline void reset() { idx_ = -1; }
152  inline const Line2DPos& line2DPos() const { return ld_.posns_[idx_]; }
153  inline int trcNr() const
154  { return idx_>=0 ? ld_.posns_[idx_].nr_ : mUdf(int); }
155  inline void setTrcNr( int trcnr )
156  { idx_ = ld_.indexOf( trcnr ); }
157 
158  const Line2DData& ld_;
159  int idx_;
160 
161 };
162 
163 
164 } // namespace PosInfo
165 
PosInfo::Line2DData::nearestIdx
int nearestIdx(const Coord &, const Interval< int > &trcnrrg) const
PosInfo::Line2DData::bendpoints_
TypeSet< int > bendpoints_
Definition: posinfo2d.h:125
PosInfo::Line2DData::size
int size() const
Definition: posinfo2d.h:79
PosInfo::Line2DData::Line2DData
Line2DData(const char *lnm=0)
PosInfo::Line2DData
Position info for a 2D line.
Definition: posinfo2d.h:65
PosInfo::Line2DPos::nr_
int nr_
Definition: posinfo2d.h:40
PosInfo::Line2DPos
One position on a 2D line.
Definition: posinfo2d.h:29
PosInfo::Line2DPos::coord_
Coord coord_
Definition: posinfo2d.h:41
PosInfo::Line2DData::write
bool write(od_ostream &, bool asc, bool newlns=false) const
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
PosInfo::Line2DData::indexOf
int indexOf(int trcnr) const
od_istream
OD class for stream read common access to the std::cin.
Definition: od_istream.h:24
PosInfo::Line2DData::Line2DData
Line2DData(const Line2DData &l2d)
Definition: posinfo2d.h:69
PosInfo::Line2DDataIterator::Line2DDataIterator
Line2DDataIterator(const Line2DData &ld)
Definition: posinfo2d.h:142
PosInfo::Line2DData::isPresent
bool isPresent(int trcnr) const
Definition: posinfo2d.h:89
PosInfo::Line2DDataIterator::ld_
const Line2DData & ld_
Definition: posinfo2d.h:158
typeset.h
PosInfo::Line2DData::limitTo
void limitTo(Interval< int > trcrg)
PosInfo::Line2DData::setEmpty
void setEmpty()
Definition: posinfo2d.h:85
PosInfo::Line2DDataIterator::reset
void reset()
Definition: posinfo2d.h:151
operator==
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
PosInfo::Line2DData::zRange
const StepInterval< float > & zRange() const
Definition: posinfo2d.h:74
bufstring.h
PosInfo::Line2DData::coincidesWith
bool coincidesWith(const Line2DData &) const
PosInfo::Line2DData::lineName
const OD::String & lineName() const
Definition: posinfo2d.h:75
PosInfo::Line2DDataIterator::idx_
int idx_
Definition: posinfo2d.h:159
PosInfo::Line2DData::getPos
bool getPos(const Coord &crd, Line2DPos &l2p, float threshold_distance) const
PosInfo::Line2DData::getBendPositions
void getBendPositions(TypeSet< Line2DPos > &) const
StepInterval< float >
Coord
A cartesian coordinate in 2D space.
Definition: coord.h:25
PosInfo::Line2DDataIterator::setTrcNr
void setTrcNr(int trcnr)
Definition: posinfo2d.h:155
PosInfo::Line2DPos::Line2DPos
Line2DPos(int n=0)
Definition: posinfo2d.h:32
PosInfo::Line2DData::compDistBetwTrcsStats
void compDistBetwTrcsStats(float &max, float &median) const
indexOf
BufferStringSet::idx_type indexOf(const BufferStringSet &, const char *)
PosInfo::Line2DData::gtIndex
int gtIndex(int, bool &) const
PosInfo::Line2DData::getBendPoints
const TypeSet< int > & getBendPoints() const
operator!=
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:90
PosInfo::Line2DData::add
void add(const Line2DPos &)
PosInfo::Line2DDataIterator::trcNr
int trcNr() const
Definition: posinfo2d.h:153
PosInfo::Line2DData::setBendPoints
void setBendPoints(const TypeSet< int > &)
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
PosInfo::Line2DData::zrg_
StepInterval< float > zrg_
Definition: posinfo2d.h:122
PosInfo::Line2DData::getNormal
Coord getNormal(int trcnr) const
PosInfo
Position info, often segmented.
Definition: posinfo.h:40
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
od_iosfwd.h
PosInfo::Line2DDataIterator::next
bool next()
Definition: posinfo2d.h:145
PosInfo::Line2DData::posns_
TypeSet< Line2DPos > posns_
Definition: posinfo2d.h:124
PosInfo::Line2DData::isEmpty
bool isEmpty() const
Definition: posinfo2d.h:81
PosInfo::Line2DPos3D
Line2DPos with a z value.
Definition: posinfo2d.h:51
PosInfo::Line2DData::setZRange
void setZRange(const StepInterval< float > &zrg)
Definition: posinfo2d.h:76
PosInfo::Line2DData::getPos
bool getPos(const Coord &crd, Line2DPos &l2p, float *dist=0) const
PosInfo::Line2DData::remove
void remove(int trcnr)
mUdf
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
PosInfo::Line2DData::read
bool read(od_istream &, bool asc)
PosInfo::Line2DPos3D::Line2DPos3D
Line2DPos3D(int n=0, float z=Values::Undef< float >::val())
Definition: posinfo2d.h:53
operator>
bool operator>(const ObjectWithName &obj1, const ObjectWithName &obj2)
Definition: namedobj.h:95
PosInfo::Line2DData::trcNrRange
StepInterval< Pos::TraceID > trcNrRange() const
PosInfo::Line2DData::lnm_
BufferString lnm_
Definition: posinfo2d.h:123
PosInfo::Line2DData::positions
const TypeSet< Line2DPos > & positions() const
Definition: posinfo2d.h:80
PosInfo::Line2DData::getPos
bool getPos(int trcnr, Line2DPos &) const
PosInfo::Line2DData::dump
void dump(od_ostream &, bool pretty=true) const
PosInfo::Line2DPos3D::z_
float z_
Definition: posinfo2d.h:56
Interval< int >
PosInfo::Line2DData::nearestIdx
int nearestIdx(const Coord &crd) const
Definition: posinfo2d.h:91
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::Line2DData::gtIndex
int gtIndex(const Coord &, double *sqdist=0) const
PosInfo::Line2DData::getSegmentIndexClosestToPoint
int getSegmentIndexClosestToPoint(const Coord &) const
PosInfo::Line2DData::distBetween
float distBetween(int startnr, int stopnr) const
PosInfo::Line2DDataIterator
Iterates through Line2DData.
Definition: posinfo2d.h:139
PosInfo::Line2DDataIterator::line2DPos
const Line2DPos & line2DPos() const
Definition: posinfo2d.h:152
PosInfo::Line2DData::setLineName
void setLineName(const char *lnm)
Definition: posinfo2d.h:78
TypeSet
Sets of (small) copyable elements.
Definition: commontypes.h:29
coord.h

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