OpendTect  6.3
survinfo.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: 9-4-1996
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "basicmod.h"
14 #include "namedmonitorable.h"
15 #include "ranges.h"
16 #include "enums.h"
17 #include "zdomain.h"
18 #include "notify.h"
19 #include "survgeom3d.h"
20 
21 class ascostream;
22 
23 namespace Coords { class PositionSystem; }
24 
25 
56 
57  mGlobal(Basic) friend const SurveyInfo& SI();
58 
59 
60 public:
61 
62  bool has2D() const;
63  bool has3D() const;
64 
65  StepInterval<int> inlRange(bool work) const;
66  StepInterval<int> crlRange(bool work) const;
67  StepInterval<float> zRange(bool work) const;
68  TrcKeyZSampling sampling(bool work) const;
69  int inlStep() const;
70  int crlStep() const;
71  float zStep() const;
72  float inlDistance() const;
73  float crlDistance() const;
74 
75  Coord transform(const BinID&) const;
76  BinID transform(const Coord&) const;
79  bool xyInFeet() const;
80  uiString xyUnitString(bool abbrviated=true,
81  bool withparens=true) const;
82  const char* fileXYUnitString(bool withparens=true) const;
83  const ZDomain::Def& zDomain() const;
84  float showZ2UserFactor() const;
85  uiString zUnitString(bool withparens=true) const;
86  const char* fileZUnitString(bool withparens=true) const;
87  mImplSimpleMonitoredGetSet(inline,depthsInFeet,setDepthsInFeet,
88  bool,depthsinfeet_,cParsChange());
89  // convenience (can be asked directly from zDomain)
90  bool zIsTime() const;
91  bool zInMeter() const;
92  bool zInFeet() const;
93 
94  Coord minCoord(bool work) const;
95  Coord maxCoord(bool work) const;
96  bool isInside(const BinID&,bool work) const;
97  bool isReasonable(const BinID&) const;
99  bool isReasonable(const Coord&) const;
101  Interval<int> reasonableRange(bool inl) const;
102  int maxNrTraces(bool work) const;
103  bool isRightHandSystem() const;
105  float angleXInl() const;
108  void checkInlRange(Interval<int>&,bool work) const;
109  void checkCrlRange(Interval<int>&,bool work) const;
110  void checkZRange(Interval<float>&,bool work) const;
111  bool includes(const BinID&,const float,bool work) const;
112 
113  void snap(BinID&,const BinID& dir=BinID(0,0)) const;
115  void snapStep(BinID&,const BinID& dir=BinID(0,0))const;
117  void snapZ(float&,int direction=0) const;
119 
121  seismicReferenceDatum,setSeismicReferenceDatum,
122  float,seisrefdatum_,cAuxDataChange());
126  IOPar getDefaultPars() const;
127  void setDefaultPar(const char* ky,const char* val,
128  bool save2storage) const;
129  void setDefaultPars(const IOPar&,bool save2storage) const;
130  void removeKeyFromDefaultPars(const char* ky,
131  bool save2storage) const;
132  void putZDomain(IOPar&) const;
133  void setWorkRange(const TrcKeyZSampling&) const;
134  void getCreationData(IOPar&) const;
136 
137  RefMan<Survey::Geometry3D> get3DGeometry(bool work) const;
138  RefMan<Coords::PositionSystem> getCoordSystem();
139  ConstRefMan<Coords::PositionSystem> getCoordSystem() const;
140 
141  enum Pol2D { No2D=0, Both2DAnd3D=1, Only2D=2 };
143 
144  float getArea(Interval<int> inl,Interval<int> crl) const;
146  float getArea(bool work) const;
147  Coord3 oneStepTranslation(const Coord3& planenormal) const;
148 
149  // Contrary to normal assignment, only one of
150  // 'major' changes will be emitted.
151  static ChangeType cSetupChange() { return 2; }
152  static ChangeType cRangeChange() { return 3; }
153  static ChangeType cWorkRangeChange() { return 4; }
154 
155  // minor changes will be sent only if not a 'major' one
156  // is emitted.
157  static ChangeType cParsChange() { return 6; }
158  static ChangeType cPol2DChange() { return 7; }
159  static ChangeType cAuxDataChange() { return 8; }
160  static ChangeType cCommentChange() { return 9; }
161 
162  static bool isMinorChange( ChangeType ct )
163  { return ct==cNoChange() || ct==cNameChange()
164  || ct>cRangeChange(); }
165  static bool isSetupChange( ChangeType ct )
166  { return ct==cEntireObjectChange()
167  || ct==cSetupChange(); }
168 
169 protected:
170 
181 
184 
186 
187  BinID set3binids_[3];
188  Coord set3coords_[3];
189 
192 
195 
196  bool wrapUpRead();
197 
198  mImplSimpleMonitoredGetSet(inline,comments,setComments,
199  BufferString,comments_,cCommentChange());
200  TrcKeyZSampling& gtSampling( bool work ) const
201  { return work ? workcs_ : fullcs_; }
202 
203 private:
204 
205  // ugly, but hard to avoid:
206  friend class DBMan;
207  friend class uiSurveyManager;
208  friend class uiSurveyInfoEditor;
209 
211 
212  // For DBMan only
213  static uiRetVal setSurveyLocation(const char*,const char*,bool);
214 
215 public:
216 
217  // These fns are rarely used by non-specialist classes.
218 
219  SurveyInfo();
220  ~SurveyInfo();
222 
223  Pos::IdxPair2Coord binID2Coord() const;
224  void get3Pts(Coord c[3],BinID b[2],int& xline) const;
225 
226  mDeprecated bool isClockWise() const { return isRightHandSystem(); }
227  void setZUnit(bool istime,bool infeet=false);
228 
229  static const char* sKeyInlRange();
230  static const char* sKeyCrlRange();
231  static const char* sKeyXRange();
232  static const char* sKeyYRange();
233  static const char* sKeyZRange();
234  static const char* sKeyXYInFt();
235  static const char* sKeyDpthInFt();
236  static const char* sKeySurvDataType();
237  static const char* sKeySeismicRefDatum();
238  static const char* sSetupFileName() { return ".survey"; }
239  static const char* sBasicSurveyName() { return "BasicSurvey";}
240 
241  mImplSimpleMonitoredGetSet(inline,getDirName,setDirName,
242  BufferString,dirname_,cSetupChange());
243  mImplSimpleMonitoredGetSet(inline,getBasePath,setBasePath,
244  BufferString,basepath_,cSetupChange());
245  BufferString getFullDirPath() const;
246  static BufferString dirNameForName(const char*);
247 
248  Pol2D survDataType() const;
249  void setSurvDataType(Pol2D) const;
251  void setSipName(const uiString&);
252 
253  // Following fns are used by specialist classes. Don't use casually.
254 
255  bool write(const char* basedir=0) const;
257  void saveDefaultPars(const char* basedir=0) const;
259  void saveComments(const char* basedir=0) const;
261  static SurveyInfo* read(const char*,uiRetVal&);
262  void setRange(const TrcKeyZSampling&);
263  const char* set3Pts(const Coord c[3],const BinID b[2],int xline);
264  const uiString set3PtsUiMsg(const Coord c[3],const BinID b[2],int);
265  void gen3Pts();
266  bool setCoordSystem(Coords::PositionSystem*);
267  void update3DGeometry();
268 
269  bool usePar(const IOPar&);
270  void fillPar(IOPar&) const;
271 
272  static uiRetVal isValidDataRoot(const char*);
273  static uiRetVal isValidSurveyDir(const char*);
274 
275  bool isFresh() const;
276  void setNotFresh() const;
277  void setFreshSetupData(const IOPar&) const;
278  void getFreshSetupData(IOPar&) const;
279 
281  { return defpars_; }
282  mDeprecated const IOPar& pars() const
283  { return defpars_; }
284  mDeprecated void savePars(const char* basedir = 0) const
285  { saveDefaultPars(basedir); }
287  { return const_cast<IOPar&>(defpars_); }
289  { return getBasePath();}
290 
291  mDeprecated void setRange( const TrcKeyZSampling& cs, bool work )
292  { work ? setWorkRange(cs) : setRange(cs); }
293  mDeprecated const char* getZUnitString( bool wp=true ) const
294  { return fileZUnitString( wp ); }
295  mDeprecated uiString getUiZUnitString( bool wp=true ) const
296  { return zUnitString( wp ); }
297  mDeprecated const char* getXYUnitString( bool wp=true ) const
298  { return fileXYUnitString( wp ); }
299  mDeprecated uiString getUiXYUnitString(bool a=true,bool p=true) const
300  { return xyUnitString( a, p ); }
301 
302  enum Unit { Second, Meter, Feet };
303  Unit xyUnit() const;
304  Unit zUnit() const;
305  static float defaultXYtoZScale(Unit,Unit);
308  float zScale() const;
312 };
313 
314 
315 mGlobal(Basic) const SurveyInfo& SI();
#define mExpClass(module)
Definition: commondefs.h:157
IOPar defpars_
Definition: survinfo.h:179
BufferString dirname_
The subdirectory name.
Definition: survinfo.h:173
int ChangeType
Definition: monitorable.h:80
Monitorable object with a name. All but name() are MT-safe.
Definition: namedmonitorable.h:20
static ChangeType cParsChange()
Definition: survinfo.h:157
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
Pos::IdxPair2Coord b2c_
Definition: survinfo.h:185
#define mGlobal(module)
Definition: commondefs.h:160
BufferString getDataDirName() const
Definition: survinfo.h:288
Unit
Definition: survinfo.h:302
bool pol2dknown_
Definition: survinfo.h:191
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
OpendTect standard ascii format file writing.
Definition: ascstream.h:30
RefMan< Coords::PositionSystem > coordsystem_
Definition: survinfo.h:180
Definition: coordsystem.h:31
static const char * sSetupFileName()
Definition: survinfo.h:238
TrcKeyZSampling & gtSampling(bool work) const
Definition: survinfo.h:200
Definition: uistring.h:88
uiString sipnm_
Definition: survinfo.h:194
Holds survey general information.
Definition: survinfo.h:54
#define mImplSimpleMonitoredGet(fnnm, typ, memb)
Defines simple MT-safe copyable member get.
Definition: monitor.h:21
static bool isSetupChange(ChangeType ct)
Definition: survinfo.h:165
void savePars(const char *basedir=0) const
Definition: survinfo.h:284
#define mDeclMonitorableAssignment(clss)
like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() metho...
Definition: monitor.h:111
bool depthsinfeet_
Definition: survinfo.h:175
#define mDeclareEnumUtils(enm)
Some utilities surrounding the often needed enum <-> string table.
Definition: enums.h:188
Pol2D
Definition: survinfo.h:141
Definition: commontypes.h:35
3D point or vector
Definition: commontypes.h:57
Pos::IdxPair2Coord rdb2c_
Definition: survinfo.h:210
TrcKeyZSampling & fullcs_
Definition: survinfo.h:176
void setRange(const TrcKeyZSampling &cs, bool work)
Definition: survinfo.h:291
Definition: coordsystem.h:22
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
static ChangeType cSetupChange()
Definition: survinfo.h:151
static ChangeType cWorkRangeChange()
Definition: survinfo.h:153
#define mImplSimpleMonitoredGetSet(pfx, fnnmget, fnnmset, typ, memb, chgtyp)
Defines simple MT-safe copyable member access.
Definition: monitor.h:39
TrcKeyZSampling & workcs_
Definition: survinfo.h:177
SurveyInfo & eSI()
The survey info editor.
Definition: uisurvinfoed.h:37
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
static bool isMinorChange(ChangeType ct)
Definition: survinfo.h:162
uiString getUiZUnitString(bool wp=true) const
Definition: survinfo.h:295
manages the &#39;Meta-&#39;data store for the IOObj&#39;s. This info is read from the .omf files. The &#39;workhorse is the DBDir object.
Definition: dbman.h:32
float seisrefdatum_
Definition: survinfo.h:178
Survey::Geometry3D * work_s3dgeom_
Definition: survinfo.h:183
static ChangeType cCommentChange()
Definition: survinfo.h:160
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
The survey selector that also provides management of the surveys.
Definition: uisurveymanager.h:40
const SurveyInfo & SI()
Pol2D pol2d_
Definition: survinfo.h:190
#define mDeprecated
Definition: plfdefs.h:213
Survey::Geometry3D * s3dgeom_
Definition: survinfo.h:182
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
static ChangeType cRangeChange()
Definition: survinfo.h:152
Scaled down survey geometry for an inl/crl geometry.
Definition: survgeom3d.h:26
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
Definition: uistring.h:299
Definition: commontypes.h:35
const IOPar & pars() const
Definition: survinfo.h:282
BufferString basepath_
The &#39;data root&#39;.
Definition: survinfo.h:172
const char * getZUnitString(bool wp=true) const
Definition: survinfo.h:293
TrcKeyZSampling::Dir direction(TrcKeyZSampling::Dir slctype, int dimnr)
Definition: trckeyzsampling.h:129
ZDomain::Def & zdef_
Definition: survinfo.h:174
IOPar & getPars() const
Definition: survinfo.h:286
const char * getXYUnitString(bool wp=true) const
Definition: survinfo.h:297
2D point or vector class.
Definition: commontypes.h:58
bool isClockWise() const
Definition: survinfo.h:226
uiString getUiXYUnitString(bool a=true, bool p=true) const
Definition: survinfo.h:299
Definition of z-domain.
Definition: zdomain.h:39
Definition: ptrman.h:227
static const char * sBasicSurveyName()
Definition: survinfo.h:239
Encapsulates linear transform from (i,j) index to (x,y) coordinates.
Definition: posidxpair2coord.h:24
static ChangeType cAuxDataChange()
Definition: survinfo.h:159
Definition: ptrman.h:200
static ChangeType cPol2DChange()
Definition: survinfo.h:158
IOPar & defaultPars()
Definition: survinfo.h:280
BufferString comments_
Definition: survinfo.h:193
const BufferString uniqueid_
Definition: survinfo.h:171

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