OpendTect  6.3
emhorizon3d.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: Kristofer Tingdahl
8  Date: 4-11-2002
9 ________________________________________________________________________
10 
11 
12 -*/
13 
14 #include "earthmodelmod.h"
15 #include "emhorizon.h"
16 #include "binidsurface.h"
17 #include "task.h"
18 
19 class BinIDValueSet;
20 class DataPointSet;
21 class BufferStringSet;
22 class TrcKeySampling;
23 class Scaler;
24 class ZAxisTransform;
25 namespace Pick { class Set; }
26 namespace Pos { class Provider3D; }
27 namespace Table { class FormatDesc; }
28 namespace Threads { class WorkManager; }
29 
30 namespace EM
31 {
32 class SurfaceAuxData;
33 
40 public:
42 
43  const Geometry::BinIDSurface* sectionGeometry(const SectionID&) const;
44  Geometry::BinIDSurface* sectionGeometry(const SectionID&);
45 
46  bool removeSection(const SectionID&,bool hist);
47  SectionID cloneSection(const SectionID&);
48 
49  bool isFullResolution() const;
50  RowCol loadedStep() const;
51  RowCol step() const;
52  void setStep(const RowCol& step,
53  const RowCol& loadedstep);
54 
55  PosID getPosID(const TrcKey&) const;
56  TrcKey getTrcKey(const PosID&) const;
57 
58  bool enableChecks(bool yn);
59  bool isChecksEnabled() const;
60  bool isNodeOK(const PosID&) const;
61 
62  bool isAtEdge(const PosID& pid) const;
63  PosID getNeighbor(const PosID&,const RowCol&) const;
64  int getConnectedPos(const PosID&,
65  TypeSet<PosID>*) const;
66 
67  bool getBoundingPolygon(const SectionID&,
68  Pick::Set&) const;
69  void getDataPointSet( const SectionID&,
70  DataPointSet&,
71  float shift=0.0) const;
72  void fillBinIDValueSet(const SectionID&,
74  Pos::Provider3D* prov=0) const;
75 
76  EMObjectIterator* createIterator(const EM::SectionID&,
77  const TrcKeyZSampling* =0) const;
78 protected:
79 
80  Geometry::BinIDSurface* createSectionGeometry() const;
81 
85 };
86 
87 
94 mExpClass(EarthModel) Horizon3D : public Horizon
97 public:
98 
99  virtual float getZ(const TrcKey&) const;
101  virtual bool setZ(const TrcKey&,float z,bool addtohist,
102  NodeSourceType type=Auto);
104 
105  virtual void setNodeSourceType(const TrcKey&,
107  virtual void setNodeSourceType(const PosID&,NodeSourceType);
108 
109  virtual bool isNodeSourceType(const PosID&,
110  NodeSourceType) const;
111  virtual bool isNodeSourceType(const TrcKey&,
112  NodeSourceType) const;
113  bool hasNodeSourceType(const PosID&) const;
114 
115  virtual void setNodeLocked(const TrcKey&,bool locked);
116  virtual bool isNodeLocked(const TrcKey&) const;
117  virtual bool isNodeLocked(const PosID&)const;
118 
119  virtual void lockAll();
120  virtual void unlockAll();
121  virtual const Array2D<char>* getLockedNodes() const;
122  virtual void setLockColor(const Color&);
123  virtual const Color getLockColor() const;
124  virtual bool hasLockedNodes() const
125  { return haslockednodes_; }
126 
127  virtual bool hasZ(const TrcKey&) const;
129  virtual Coord3 getCoord(const TrcKey&) const;
130  virtual void setAttrib(const TrcKey&,int attr,bool yn,
131  bool addtohist);
132  virtual bool isAttrib(const TrcKey&,int attr) const;
133 
134  virtual float getZValue(const Coord&,bool allow_udf=true,
135  int nr=0) const;
137 
138  TrcKeySampling range() const;
139  Interval<float> getZRange() const;
140 
141  void removeAll();
142  Horizon3DGeometry& geometry();
143  const Horizon3DGeometry& geometry() const;
144 
145  virtual void setArray(const SectionID&,const BinID& start,
146  const BinID& step,Array2D<float>* arr,
147  bool takeover);
148 
149  static Horizon3D* createWithConstZ(float z,const TrcKeySampling&);
150  Array2D<float>* createArray2D(SectionID,
151  const ZAxisTransform* zt=0) const;
152  bool setArray2D(const Array2D<float>&,SectionID,
153  bool onlyfillundefs,
154  const char* histdesc,bool trimundef);
158  bool setArray2D(Array2D<float>*,const BinID& origin,
159  const BinID& step,
160  bool takeoverarr=true);
165  Executor* importer(const ObjectSet<BinIDValueSet>&,
166  const TrcKeySampling& hs);
170  Executor* auxDataImporter(const ObjectSet<BinIDValueSet>&,
171  const BufferStringSet& attribnms,int,
172  const TrcKeySampling& hs);
173 
174 
175  Pos::GeomID getSurveyGeomID() const { return survgeomid_; }
178  void setSurveyGeomID(Pos::GeomID);
179 
180  uiString getUserTypeStr() const { return userTypeStr(); }
182  { return tr("3D Horizon"); }
183 
184  void initAllAuxData(float val=mUdf(float));
186 
187  void initTrackingAuxData(float val=mUdf(float));
188  void initTrackingArrays();
189  void updateTrackingSampling();
190  bool saveParentArray();
191  bool readParentArray();
192 
193  bool saveNodeArrays();
194  bool readNodeArrays();
195 
196  TrcKeySampling getTrackingSampling() const;
197  void setParent(const TrcKey&,const TrcKey& parent);
198  TrcKey getParent(const TrcKey&) const;
199  void getParents(const TrcKey&,
200  TypeSet<TrcKey>&) const;
201  bool selectChildren(const TrcKey&);
202  Array2D<char>* getChildren() const;
203  void deleteChildren();
204  void resetChildren();
205 
206  void setParentColor(const Color&);
207  const Color& getParentColor() const;
208 
209 protected:
210 
211  enum ArrayType{Parents,Children,LockNode,NodeSource};
212 
213  void fillPar(IOPar&) const;
214  bool usePar( const IOPar& );
215  const IOObjContext& getIOObjContext() const;
216 
217  void initNodeArraysSize(const StepInterval<int>&,
218  const StepInterval<int>&);
219  void setNodeArraySize(const StepInterval<int>&,
221  void updateNodeSourceArray(const TrcKeySampling,
222  ArrayType);
223  Array2D<char>* getNodeSourceArray(ArrayType) const;
224  void createNodeSourceArray(const StepInterval<int>&,
225  const StepInterval<int>&,
226  ArrayType);
227  TrcKeySampling getSectionTrckeySampling() const;
228 
229  virtual bool setPosition(const EM::SectionID&,
230  const EM::SubID&,
231  const Coord3&,bool addtohistory,
232  NodeSourceType type=Auto);
233 
234  friend class EMManager;
235  friend class EMObject;
237 
242 
245 
252 
253 public:
254  /*mDeprecated*/ float getZ(const BinID&) const;
256  /*mDeprecated*/ bool setZ(const BinID&,float z,bool addtohist);
258  TrcKey::SurvID getSurveyID() const {return getSurveyGeomID();}
259  static Color sDefaultLockColor();
260 };
261 
262 
264 {
265 friend class FindTask;
266 friend class Horizon3D;
267 protected:
268  ChildFinder(const TrcKeySampling& tks,
269  const Array2D<od_int64>& parents,
270  Array2D<char>& children );
271  ~ChildFinder();
272 
273 
274  void addTask(od_int64);
275  void taskFinished(CallBacker*);
276  int nextStep();
277 
279  int queueid_;
283 
286 
289 };
290 
291 } // namespace EM
od_int16 SectionID
Definition: emposid.h:23
#define mExpClass(module)
Definition: commondefs.h:157
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
Pos::GeomID survgeomid_
Definition: emhorizon3d.h:246
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
Set of data points with group selection.
Definition: datapointset.h:47
Array2D< char > * nodesource_
Definition: emhorizon3d.h:247
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
ArrayType
Definition: emhorizon3d.h:211
Is an identifier for each position in the earthmodel.
Definition: emposid.h:35
Array2D< char > & children_
Definition: emhorizon3d.h:281
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
Array2D< od_int64 > * parents_
Definition: emhorizon3d.h:241
Threads::Lock addlock_
Definition: emhorizon3d.h:287
Pos::SurvID SurvID
Definition: trckey.h:30
Array2D< char > * children_
Definition: emhorizon3d.h:240
Provides a subselection for 3D surveys.
Definition: posprovider.h:58
Threads::Atomic< int > nrtodo_
Definition: emhorizon3d.h:284
Definition: uistring.h:88
TrcKey::SurvID getSurveyID() const
Definition: emhorizon3d.h:258
Set of BufferString objects.
Definition: bufstringset.h:25
Surface data.
Definition: emsurfaceauxdata.h:37
od_int64 SubID
Definition: emposid.h:24
Horizon RowColSurfaceGeometry.
Definition: emhorizon.h:31
Takes work and puts it on a queue for execution either in parallel, singlethread or manual...
Definition: threadwork.h:37
Color lockcolor_
Definition: emhorizon3d.h:244
Monitorable set of pick locations.
Definition: pickset.h:41
bool checksupport_
Definition: emhorizon3d.h:84
TrcKeySampling trackingsamp_
Definition: emhorizon3d.h:238
interface to threads that should be portable.
Definition: atomic.h:24
Iterator that iterates a number of positions (normally all) on an EMObject. The object is created by ...
Definition: emobject.h:81
#define mDefineEMObjFuncs(clss)
Definition: emobject.h:344
RowCol loadedstep_
Definition: emhorizon3d.h:82
The generalization of something (e.g. a computation) where the steps must be done in sequence...
Definition: task.h:147
3D point or vector
Definition: commontypes.h:57
void removeAll()
Set of (small) copyable elements.
Definition: commontypes.h:26
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
Definition: geom2dascio.h:18
RowCol step_
Definition: emhorizon3d.h:83
Horizontal sampling (inline and crossline range and steps).
Definition: trckeysampling.h:25
Definition: emhorizon3d.h:263
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
Manages the loaded/half loaded EM objects in OpendTect.
Definition: emmanager.h:42
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
const Array2D< od_int64 > & parents_
Definition: emhorizon3d.h:280
Position.
Definition: commontypes.h:38
int queueid_
Definition: emhorizon3d.h:279
Scaling of floating point numbers.
Definition: scaler.h:30
Threads::WorkManager & twm_
Definition: emhorizon3d.h:278
Array2D< char > * lockednodes_
Definition: emhorizon3d.h:239
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
Threads::Lock finishlock_
Definition: emhorizon3d.h:288
Pos::GeomID getSurveyGeomID() const
Definition: emhorizon3d.h:175
Threads::Atomic< int > nrdone_
Definition: emhorizon3d.h:285
Index_Type GeomID
Definition: commontypes.h:48
uiString getUserTypeStr() const
Definition: emhorizon3d.h:180
IdxPair used for its row() and col().
Definition: rowcol.h:23
Definition: binidsurface.h:25
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
Definition: emhorizon3d.h:211
Horizon3DGeometry geometry_
Definition: emhorizon3d.h:236
Base class for all EarthModel objects.
Definition: emobject.h:117
bool arrayinited_
Definition: emhorizon3d.h:251
static uiString userTypeStr()
Definition: emhorizon3d.h:181
Definition: picklocation.h:19
Base class for surfaces like horizons and faults. A surface is made up of one or more segments or pat...
Definition: emsurface.h:31
Earth Model objects like horizons, faults, fault-sticks and bodies.
Definition: embody.h:23
A Pos::IdxPairValueSet with BinIDs.
Definition: binidvalset.h:21
3D HorizonGeometry
Definition: emhorizon3d.h:38
NodeSourceType
Definition: emobject.h:122
Color is an RGB color object, with a transparancy. The storage is in a 4-byte integer, similar to Qt.
Definition: color.h:24
TrcKeySampling tks_
Definition: emhorizon3d.h:282
Represents a unique trace position in one of the surveys that OpendTect is managing.
Definition: trckey.h:26
3D Horizon. A Horizon is made up of one or more grids (so they can overlap at faults). The grids are defined by knot-points in a matrix and fillstyle in between the knots.
Definition: emhorizon3d.h:94
Color parentcolor_
Definition: emhorizon3d.h:243
2D point or vector class.
Definition: commontypes.h:58
SurfaceAuxData & auxdata
Definition: emhorizon3d.h:185
Base class for z-axis transforms.
Definition: zaxistransform.h:35
virtual bool hasLockedNodes() const
Definition: emhorizon3d.h:124
IOObjContext * getIOObjContext(Seis::GeomType, bool forread)
Horizon Surface.
Definition: emhorizon.h:46
Specification to enable chunkwise execution of a process.
Definition: executor.h:38
Holds the context for selecting and/or creating IOObjs.
Definition: ioobjctxt.h:59

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