OpendTect  6.3
emobject.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 "notify.h"
16 #include "trckeyzsampling.h"
17 #include "draw.h"
18 #include "emposid.h"
19 #include "dbkey.h"
20 #include "coord.h"
21 #include "uistring.h"
22 
23 class TrcKeyZSampling;
24 class Executor;
25 class IOObj;
26 class IOObjContext;
27 class TaskRunner;
28 
29 namespace Geometry { class Element; }
30 
31 template <class T> class Selector;
32 template <class T> class Array2D;
33 
34 namespace EM
35 {
36 class EMManager;
37 
43 {
44 public:
46  : pid0( 0, 0, 0 )
47  , pid1( 0, 0, 0 )
48  , attrib( -1 )
49  , flagfor2dviewer( false )
50  , event( EMObjectCallbackData::Undef )
51  {}
52 
53 
54  EMObjectCallbackData( const EMObjectCallbackData& data )
55  : pid0( data.pid0 )
56  , pid1( data.pid1 )
57  , attrib( data.attrib )
58  , flagfor2dviewer( data.flagfor2dviewer )
59  , event( data.event )
60  {}
61 
62 
63  enum Event { Undef, PositionChange, PosIDChange, PrefColorChange, Removal,
64  AttribChange, SectionChange, NameChange, SelectionChange,
65  LockChange, BurstAlert, LockColorChange, SelectionColorChnage,
66  ParentColorChange} event;
67 
69  EM::PosID pid1; //Only used in PosIDChange
70  int attrib; //Used only with AttribChange
71  bool flagfor2dviewer; //Used only with BurstAlert for 2DViewer
72 };
73 
74 
82 {
83 public:
84  virtual ~EMObjectIterator() {}
85  virtual EM::PosID next() = 0;
87  virtual int approximateSize() const { return maximumSize(); }
88  virtual int maximumSize() const { return -1; }
89  virtual bool canGoTo() const { return false; }
90  virtual EM::PosID goTo(od_int64) { return EM::PosID(-1,-1,-1); }
91 };
92 
93 
98 mExpClass(EarthModel) PosAttrib
99 {
100 public:
102 
103  enum Type { PermanentControlNode, TemporaryControlNode,
104  EdgeControlNode, TerminationNode, SeedNode,
105  IntersectionNode };
106 
109  bool locked_;
110 };
111 
112 
117 mExpClass(EarthModel) EMObject : public RefCount::Referenced
118  , public CallBacker
119 {
120 public:
121 
122  enum NodeSourceType { None = (int)'0', Manual=(int)'1',
123  Auto=(int)'2', Gridding=(int)'3' };
124  const ObjectID& id() const { return id_; }
125  virtual const char* getTypeStr() const = 0;
126  virtual uiString getUserTypeStr() const = 0;
127  const DBKey& dbKey() const { return storageid_; }
128  void setDBKey(const DBKey&);
129 
130  virtual bool isOK() const { return true; }
131 
132  void setName( const char* nm ) { objname_ = nm; }
134  BufferString name() const;
135  uiString uiName() const { return toUiString(name()); }
136  virtual void setNewName();
137 
138  virtual int nrSections() const = 0;
139  virtual SectionID sectionID(int) const = 0;
140  virtual BufferString sectionName(const SectionID&) const;
141  virtual bool canSetSectionName() const;
142  virtual bool setSectionName(const SectionID&,const char*,
143  bool addtohistory);
144  virtual int sectionIndex(const SectionID&) const;
145  virtual bool removeSection(SectionID,bool hist )
146  { return false; }
147 
148  void removeSelected(const TypeSet<EM::SubID>&);
149 
150  const Geometry::Element* sectionGeometry(const SectionID&) const;
151  Geometry::Element* sectionGeometry(const SectionID&);
152 
153  const Color& preferredColor() const;
154  void setPreferredColor(const Color&,
155  bool addtohistory=false);
156  const OD::LineStyle& preferredLineStyle() const;
157  void setPreferredLineStyle(const OD::LineStyle&);
158  const OD::MarkerStyle3D& preferredMarkerStyle3D() const;
159  void setPreferredMarkerStyle3D(
160  const OD::MarkerStyle3D&);
161 
162  void setBurstAlert(bool yn);
163  bool hasBurstAlert() const;
164 
165  virtual Coord3 getPos(const EM::PosID&) const;
166  virtual Coord3 getPos(const EM::SectionID&,
167  const EM::SubID&) const;
168  virtual bool isDefined(const EM::PosID&) const;
169  virtual bool isDefined(const EM::SectionID&,
170  const EM::SubID&) const;
171  bool setPos(const EM::PosID&,const Coord3&,
172  bool addtohistory,
173  NodeSourceType type=Auto);
174  bool setPos(const EM::SectionID&,const EM::SubID&,
175  const Coord3&,bool addtohistory,
176  NodeSourceType type=Auto);
177  virtual bool unSetPos(const EM::PosID&,bool addtohistory);
178  virtual bool unSetPos(const EM::SectionID&,const EM::SubID&,
179  bool addtohistory);
180 
181  virtual void setNodeSourceType(const TrcKey&,
182  NodeSourceType){}
183  virtual bool hasNodeSourceType( const PosID& ) const
184  { return false; }
185 
186  virtual bool isNodeSourceType(const PosID&,
187  NodeSourceType) const {return false;}
188  virtual bool isNodeSourceType(const TrcKey&,
189  NodeSourceType)const {return false;}
190 
191  virtual void setNodeLocked(const TrcKey&,bool locked){}
192  virtual bool isNodeLocked(const TrcKey&) const
193  { return false; }
194  virtual bool isNodeLocked(const PosID&)const {return false;}
195 
196  virtual void lockAll() {}
197  virtual void unlockAll(){}
198  virtual const Array2D<char>*
199  getLockedNodes() const { return 0; }
200  virtual void setLockColor(const Color&) {}
201  virtual const Color getLockColor() const { return Color::Blue(); }
202  virtual bool hasLockedNodes() const {return haslockednodes_;}
203 
204 
205  virtual bool enableGeometryChecks(bool);
206  virtual bool isGeometryChecksEnabled() const;
207 
208  virtual bool isAtEdge(const EM::PosID&) const;
209 
210  void changePosID(const EM::PosID& from,
211  const EM::PosID& to,
212  bool addtohistory);
218  virtual void getLinkedPos(const EM::PosID& posid,
219  TypeSet<EM::PosID>&) const
220  { return; }
226  const TrcKeyZSampling* =0) const
227  { return 0; }
231  virtual int nrPosAttribs() const;
232  virtual int posAttrib(int idx) const;
233  virtual void addPosAttrib(int attr);
234  virtual void removePosAttribList(int attr,
235  bool addtohistory=true);
236  virtual void setPosAttrib(const EM::PosID&,
237  int attr,bool yn,bool addtohistory=true);
239  virtual bool isPosAttrib(const EM::PosID&,int attr) const;
240  virtual const char* posAttribName(int) const;
241  virtual int addPosAttribName(const char*);
242  const TypeSet<PosID>* getPosAttribList(int attr) const;
243  const OD::MarkerStyle3D& getPosAttrMarkerStyle(int attr);
244  void setPosAttrMarkerStyle(int attr,
245  const OD::MarkerStyle3D&);
246  virtual void lockPosAttrib(int attr,bool yn);
247  virtual bool isPosAttribLocked(int attr) const;
248  virtual void removeSelected(const Selector<Coord3>&,
249  TaskRunner*);
250  void removeListOfSubIDs(const TypeSet<EM::SubID>&,
251  const EM::SectionID&);
252  void removeAllUnSeedPos();
253  const TrcKeyZSampling getRemovedPolySelectedPosBox();
254  void emptyRemovedPolySelectedPosBox();
255 
257 
258  virtual Executor* loader() { return 0; }
259  virtual bool isLoaded() const { return false; }
260  virtual Executor* saver() { return 0; }
261  virtual bool isChanged() const { return changed_; }
262  virtual bool isEmpty() const;
263  virtual void setChangedFlag() { changed_=true; }
264  virtual void resetChangedFlag() { changed_=false; }
265  bool isFullyLoaded() const { return fullyloaded_; }
266  void setFullyLoaded(bool yn) { fullyloaded_=yn; }
267 
268  virtual bool isLocked() const { return locked_; }
269  virtual void lock(bool yn) { locked_=yn;}
270 
271  bool isInsideSelRemoval() const
272  { return insideselremoval_; }
273  bool isSelRemoving() const { return selremoving_; }
274 
275  uiString errMsg() const;
276  void setErrMsg(const uiString& m) { errmsg_ = m; }
277 
278  void setSelectionColor(const Color&);
279  const Color& getSelectionColor() const;
280 
281  virtual bool usePar(const IOPar&);
282  virtual void fillPar(IOPar&) const;
283  void saveDisplayPars() const;
284 
285  static int sTerminationNode();
286  static int sSeedNode();
287  static int sIntersectionNode();
288 
289  virtual const IOObjContext& getIOObjContext() const = 0;
290 
291 protected:
292  ~EMObject();
293  EMObject( EMManager& );
295 
296  virtual bool setPosition(const EM::SectionID&,
297  const EM::SubID&,
298  const Coord3&,bool addtohistory,
299  NodeSourceType type=Auto);
300  virtual Geometry::Element* sectionGeometryInternal(const SectionID&);
301  virtual void prepareForDelete();
302  void posIDChangeCB(CallBacker*);
303  void useDisplayPars(const IOPar&);
309 
316 
318 
319  bool changed_;
321  bool locked_;
324 
328 
329  static const char* nrposattrstr();
330  static const char* posattrprefixstr();
331  static const char* posattrsectionstr();
332  static const char* posattrposidstr();
333 
334 public:
335 
336  mDeprecated const DBKey& multiID() const { return storageid_; }
337  mDeprecated void setMultiID( const DBKey& k ) { setDBKey(k); }
338  static Color sDefaultSelectionColor();
339 
340 };
341 
342 } // namespace EM
343 
344 #define mDefineEMObjFuncs( clss ) \
345 public: \
346  clss(EM::EMManager&); \
347  static void initClass(); \
348  static EMObject* create(EM::EMManager&); \
349  static clss* create(const char* nm); \
350  static FixedString typeStr(); \
351  const char* getTypeStr() const; \
352  void setNewName(); \
353 protected: \
354  ~clss()
355 
356 #define mImplementEMObjFuncs( clss, typenm ) \
357 void clss::initClass() \
358 { \
359  EMOF().addCreator( create, typeStr() ); \
360 } \
361  \
362  \
363 EMObject* clss::create( EM::EMManager& emm ) \
364 { \
365  EMObject* obj = new clss( emm ); \
366  if ( !obj ) return 0; \
367  obj->ref(); \
368  emm.addObject( obj ); \
369  obj->unRefNoDelete(); \
370  return obj; \
371 } \
372 \
373 clss* clss::create( const char* nm ) \
374 { \
375  const ObjectID objid = EMM().createObject( typeStr(), nm ); \
376  EMObject* emobj = EMM().getObject( objid ); \
377  mDynamicCastGet(clss*,newobj,emobj); \
378  return newobj; \
379 } \
380 \
381 FixedString clss::typeStr() { return typenm; } \
382 const char* clss::getTypeStr() const { return typeStr(); } \
383 void clss::setNewName() \
384 {\
385  static int objnr = 1; \
386  BufferString nm( "<New ", typenm, " " ); \
387  nm.add( objnr++ ).add( ">" ); \
388  setName( nm ); \
389 }
od_int16 SectionID
Definition: emposid.h:23
#define mExpClass(module)
Definition: commondefs.h:157
od_int32 ObjectID
Definition: emposid.h:22
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
BufferString objname_
Definition: emobject.h:304
Definition: ioobj.h:57
OD::MarkerStyle3D & preferredmarkerstyle_
Definition: emobject.h:312
virtual void getLinkedPos(const EM::PosID &posid, TypeSet< EM::PosID > &) const
Definition: emobject.h:218
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
T to(const F &fr)
Definition: convert.h:31
Event
Definition: emobject.h:63
FixedString Undef()
Definition: keystrs.h:139
virtual bool isNodeSourceType(const TrcKey &, NodeSourceType) const
Definition: emobject.h:188
Is an identifier for each position in the earthmodel.
Definition: emposid.h:35
bool locked_
Definition: emobject.h:321
Color & preferredcolor_
Definition: emobject.h:310
virtual int approximateSize() const
Definition: emobject.h:87
virtual bool hasLockedNodes() const
Definition: emobject.h:202
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
Definition: draw.h:119
ObjectSet< PosAttrib > posattribs_
Definition: emobject.h:313
Type type_
Definition: emobject.h:107
virtual void unlockAll()
Definition: emobject.h:197
DBKey storageid_
Definition: emobject.h:306
virtual const Color getLockColor() const
Definition: emobject.h:201
Position attribute.
Definition: emobject.h:98
TypeSet< int > attribs_
Definition: emobject.h:314
bool isSelRemoving() const
Definition: emobject.h:273
TypeSet< PosID > posids_
Definition: emobject.h:108
int attrib
Definition: emobject.h:70
EM::PosID pid0
Definition: emobject.h:68
uiString uiName() const
Definition: emobject.h:135
Definition: uistring.h:88
virtual bool isOK() const
Definition: emobject.h:130
EMObjectCallbackData()
Definition: emobject.h:45
od_int64 SubID
Definition: emposid.h:24
virtual void setNodeLocked(const TrcKey &, bool locked)
Definition: emobject.h:191
FixedString None()
Definition: keystrs.h:90
Definition: emobject.h:104
class EMManager & manager_
Definition: emobject.h:307
void setErrMsg(const uiString &m)
Definition: emobject.h:276
Set of pointers to objects.
Definition: commontypes.h:28
virtual void setChangedFlag()
Definition: emobject.h:263
Iterator that iterates a number of positions (normally all) on an EMObject. The object is created by ...
Definition: emobject.h:81
bool haslockednodes_
Definition: emobject.h:327
3D point or vector
Definition: commontypes.h:57
virtual bool isNodeLocked(const TrcKey &) const
Definition: emobject.h:192
virtual int maximumSize() const
Definition: emobject.h:88
Set of (small) copyable elements.
Definition: commontypes.h:26
int burstalertcount_
Definition: emobject.h:322
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:127
Class that can execute a task.
Definition: task.h:193
virtual void setLockColor(const Color &)
Definition: emobject.h:200
bool insideselremoval_
Definition: emobject.h:325
const ObjectID & id() const
Definition: emobject.h:124
virtual const Array2D< char > * getLockedNodes() const
Definition: emobject.h:199
virtual EM::PosID goTo(od_int64)
Definition: emobject.h:90
bool fullyloaded_
Definition: emobject.h:320
virtual bool isNodeSourceType(const PosID &, NodeSourceType) const
Definition: emobject.h:186
Manages the loaded/half loaded EM objects in OpendTect.
Definition: emmanager.h:42
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
bool selremoving_
Definition: emobject.h:326
virtual bool isLoaded() const
Definition: emobject.h:259
bool isInsideSelRemoval() const
Definition: emobject.h:271
EM::PosID pid1
Definition: emobject.h:69
bool isFullyLoaded() const
Definition: emobject.h:265
void setFullyLoaded(bool yn)
Definition: emobject.h:266
Interface for classes that select on basis of a key.
Definition: selector.h:23
virtual void lockAll()
Definition: emobject.h:196
uiString toUiString(const DBKey &ky)
Definition: dbkey.h:117
virtual bool canGoTo() const
Definition: emobject.h:89
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
CNotifier< EMObject, const EMObjectCallbackData & > change
Definition: emobject.h:256
Definition: geomelement.h:35
Type
Definition: emobject.h:103
virtual ~EMObjectIterator()
Definition: emobject.h:84
virtual Executor * saver()
Definition: emobject.h:260
virtual void lock(bool yn)
Definition: emobject.h:269
#define mDeprecated
Definition: plfdefs.h:213
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
bool flagfor2dviewer
Definition: emobject.h:71
bool isEmpty(const char *)
uiString errmsg_
Definition: emobject.h:308
mDeprecated void setMultiID(const DBKey &k)
Definition: emobject.h:337
virtual bool isNodeLocked(const PosID &) const
Definition: emobject.h:194
void setName(const char *nm)
Definition: emobject.h:132
BufferString errmsg_
Definition: horizontracker.h:117
virtual Executor * loader()
Definition: emobject.h:258
Color selectioncolor_
Definition: emobject.h:315
PosAttrib()
Definition: emobject.h:101
EMObjectCallbackData(const EMObjectCallbackData &data)
Definition: emobject.h:54
Base class for all EarthModel objects.
Definition: emobject.h:117
OD::LineStyle & preferredlinestyle_
Definition: emobject.h:311
EM object callback data.
Definition: emobject.h:42
Earth Model objects like horizons, faults, fault-sticks and bodies.
Definition: embody.h:23
static Color Blue()
Definition: color.h:77
Notifier with automatic capsule creation.
Definition: notify.h:166
Threads::Lock setposlock_
Definition: emobject.h:323
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
virtual bool isLocked() const
Definition: emobject.h:268
ObjectID id_
Definition: emobject.h:305
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
virtual EMObjectIterator * createIterator(const EM::SectionID &, const TrcKeyZSampling *=0) const
Definition: emobject.h:225
const char * errMsg() const
Definition: horizontracker.h:59
Represents a unique trace position in one of the surveys that OpendTect is managing.
Definition: trckey.h:26
virtual bool isChanged() const
Definition: emobject.h:261
TrcKeyZSampling removebypolyposbox_
Definition: emobject.h:317
virtual bool removeSection(SectionID, bool hist)
Definition: emobject.h:145
virtual void setNodeSourceType(const TrcKey &, NodeSourceType)
Definition: emobject.h:181
virtual void resetChangedFlag()
Definition: emobject.h:264
Definition: arraytesselator.h:19
bool locked_
Definition: emobject.h:109
IOObjContext * getIOObjContext(Seis::GeomType, bool forread)
Definition: draw.h:91
bool changed_
Definition: emobject.h:319
virtual bool hasNodeSourceType(const PosID &) const
Definition: emobject.h:183
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
mDeprecated const DBKey & multiID() const
Definition: emobject.h:336
const DBKey & dbKey() const
Definition: emobject.h:127
Definition: emobject.h:63

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