OpendTect  6.3
visvolumedisplay.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: N. Hemstra
8  Date: August 2002
9 ________________________________________________________________________
10 
11 
12 -*/
13 
14 
15 #include "vissurveymod.h"
16 #include "visobject.h"
17 #include "mousecursor.h"
18 #include "vissurvobj.h"
19 #include "ranges.h"
20 
21 
24 class TaskRunner;
25 class TrcKeyZSampling;
26 class ZAxisTransform;
27 class ZAxisTransformer;
28 template <class T> class Array3D;
29 
30 namespace Attrib { class SelSpec; }
31 
32 namespace visBase
33 {
35  class Material;
36  class BoxDragger;
37  class VolumeRenderScalarField;
38  class OrthogonalSlice;
39  class TextureChannel2RGBA;
40 }
41 
42 
43 namespace visSurvey
44 {
45 
46 class Scene;
47 
49  public SurveyObject
50 {
51 public:
52  VolumeDisplay();
55  "VolumeDisplay",
56  toUiString(sFactoryKeyword()));
57 
58  bool isInlCrl() const { return true; }
59 
60  static int cInLine() { return 2; }
61  static int cCrossLine() { return 1; }
62  static int cTimeSlice() { return 0; }
63 
64  int addSlice(int dim);
66  void showVolRen(bool yn);
67  bool isVolRenShown() const;
68  int volRenID() const;
69 
70  int addIsoSurface(TaskRunner* = 0,
71  bool updateisosurface = true);
73  void removeChild(int displayid);
74 
75  visBase::MarchingCubesSurface* getIsoSurface(int idx);
76  void updateIsoSurface(int,TaskRunner* = 0);
77  int getNrIsoSurfaces();
78  int getIsoSurfaceIdx(
79  const visBase::MarchingCubesSurface*) const;
80  float defaultIsoValue() const;
81  float isoValue(
82  const visBase::MarchingCubesSurface*) const;
83  /*<Set isovalue and do update. */
84  void setIsoValue(
86  float,TaskRunner* =0);
87 
88  /*<Seed based settings. set only, no update. */
89  char isFullMode(
90  const visBase::MarchingCubesSurface*)const;
91  /*<Return -1 if undefined, 1 if full,
92  0 if seed based. */
93  void setFullMode(
95  bool full=1);
96  /*<If 0, it is seed based. */
97  char seedAboveIsovalue(
98  const visBase::MarchingCubesSurface*) const;
99  /*<-1 undefined, 1 above, 0 below. */
100  void setSeedAboveIsovalue(
101  const visBase::MarchingCubesSurface*,bool);
102  DBKey getSeedsID(
103  const visBase::MarchingCubesSurface*) const;
104  void setSeedsID(const visBase::MarchingCubesSurface*,
105  DBKey);
106 
107  bool turnOn(bool yn);
108  bool isOn() const;
109  bool hasPosModeManipulator() const { return true; }
110  void showManipulator(bool yn);
111  bool isManipulatorShown() const;
112  bool isManipulated() const;
113  bool canResetManipulation() const;
114  void resetManipulation();
115  void acceptManipulation();
116  NotifierAccess* getMovementNotifier() { return &boxMoving; }
117  NotifierAccess* getManipulationNotifier() { return &boxMoving; }
118  BufferString getManipulationString() const;
119 
120  SurveyObject::AttribFormat getAttributeFormat(int attrib) const;
121  const TypeSet<Attrib::SelSpec>* getSelSpecs(int attrib) const;
122  const Attrib::SelSpec* getSelSpec(int attrib,int version=0) const;
123  void setSelSpecs(int attrib,
124  const TypeSet<Attrib::SelSpec>&);
125 
126  bool canHaveMultipleAttribs() const { return true; }
127  int nrAttribs() const;
128  bool canAddAttrib(int nrattribstoadd=1) const;
129  bool addAttrib();
130  bool canRemoveAttrib() const;
131  bool removeAttrib(int attrib);
132  bool swapAttribs(int attrib0,int attrib1);
133  void enableAttrib(int attrib,bool yn);
134  bool isAttribEnabled(int attrib) const;
135  void setAttribTransparency(int attrib,unsigned char);
136  unsigned char getAttribTransparency(int attrib) const;
137 
138  bool setChannels2RGBA(visBase::TextureChannel2RGBA*);
139 
140  visBase::TextureChannel2RGBA* getChannels2RGBA();
141  const visBase::TextureChannel2RGBA* getChannels2RGBA() const;
142 
143  float slicePosition(visBase::OrthogonalSlice*) const;
144  void setSlicePosition(visBase::OrthogonalSlice*,
145  const TrcKeyZSampling&);
146  TrcKeyZSampling sliceSampling(visBase::OrthogonalSlice*) const;
147  visBase::OrthogonalSlice* getSelectedSlice() const;
148 
149  float getValue(int attrib,const Coord3&) const;
150 
151  TrcKeyZSampling getTrcKeyZSampling(int attrib) const;
152  TrcKeyZSampling getTrcKeyZSampling(bool manippos,
153  bool displayspace,
154  int attrib) const;
155  void setTrcKeyZSampling(const TrcKeyZSampling&,
156  bool dragmode=false);
157  bool setDataVolume(int attrib,
158  const RegularSeisDataPack*,
159  TaskRunner*);
160  const RegularSeisDataPack* getCacheVolume(int attrib) const;
161  bool setDataPackID(int attrib,DataPack::ID,
162  TaskRunner*);
163  DataPack::ID getDataPackID(int attrib) const;
165  { return DataPackMgr::SeisID(); }
166 
168  IOPar& iop ) const
169  { return SurveyObject::getMousePosInfo(ei,iop);}
170  void getMousePosInfo(const visBase::EventInfo&,
171  Coord3&,BufferString& val,
172  BufferString& info) const;
173  void getObjectInfo(BufferString&) const;
174  void getTreeObjectInfo(uiString&) const;
175 
176  const ColTab::Mapper& getColTabMapper(int attrib) const;
177  void setColTabMapper(int attr,const ColTab::Mapper&,
178  TaskRunner*);
179  const ColTab::Sequence& getColTabSequence(int attrib) const;
180  void setColTabSequence(int attrib,
181  const ColTab::Sequence&,TaskRunner*);
182  bool canSetColTabSequence() const;
183 
184  void setMaterial(visBase::Material*);
185  bool allowMaterialEdit() const { return true; }
186  virtual bool allowsPicks() const;
187  bool canDuplicate() const { return usesShading();}
188  visSurvey::SurveyObject* duplicate(TaskRunner*) const;
189 
190  static bool canUseVolRenShading();
191  void allowShading(bool yn);
192  bool usesShading() const;
193 
194  void getChildren(TypeSet<int>&) const;
195 
196  bool setZAxisTransform(ZAxisTransform*,TaskRunner*);
197  const ZAxisTransform* getZAxisTransform() const;
198 
199  void setRightHandSystem(bool yn);
200 
201  virtual void fillPar(IOPar&) const;
202  virtual bool usePar(const IOPar&);
203  const uiString& errMsg() const { return errmsg_; }
204 
205  bool writeVolume(int attrib,const char* fnm) const;
206 
207  void setDisplayTransformation(const mVisTrans*);
208 
209  bool canEnableTextureInterpolation() const;
210  bool textureInterpolationEnabled() const;
211  void enableTextureInterpolation(bool);
212 
213  static const char* sKeyVolDepthKey() { return "VolDepthKey";}
214  static const char* sKeyVolPlaneKey() { return "VolPlaneKey";}
215  static const char* sKeyInDepthVolResize()
216  { return "InDepthVolResize"; }
217 
218 protected:
219  ~VolumeDisplay();
220 
222 
223  bool updateSeedBasedSurface(int,TaskRunner* = 0);
224  void materialChange(CallBacker*);
225  void updateIsoSurfColor();
226  bool pickable() const { return true; }
227  bool rightClickable() const { return true; }
228  bool selectable() const { return true; }
229  bool isSelected() const;
230  const MouseCursor* getMouseCursor() const { return &mousecursor_; }
231  void setScene(Scene*);
232  void updateAttribEnabling();
233  void getObjectInfoText(uiString& info,
234  bool compact) const;
235 
239 /* OSG_TODO: Replace VolrenDisplay with OSG equivalent
240  visBase::VolrenDisplay* volren_;
241 */
245  {
247  bool operator==(const IsosurfaceSetting&) const;
248  IsosurfaceSetting& operator=(const IsosurfaceSetting&);
249 
250  float isovalue_;
251  char mode_;
254  };
255 
258 
259  void draggerStartCB(CallBacker*);
260  void draggerMoveCB(CallBacker*);
261  void draggerFinishCB(CallBacker*);
262  void updateDraggerLimits(bool dragmode=false);
266 
267  void sliceMoving(CallBacker*);
268  void setData(const RegularSeisDataPack*,
269  int datatype=0);
270 
271  void dataTransformCB(CallBacker*);
272  void updateRanges(bool updateic,bool updatez);
273  void updateMouseCursorCB(CallBacker*);
274  void setSceneEventCatcher(visBase::EventCatcher*);
275 
278 
279  struct AttribData
280  {
281  AttribData();
282  ~AttribData();
283 
286  };
287 
289 
293 
296 
297  bool isinited_;
298  bool ismanip_;
300 
302 
303  static const char* sKeyVolumeID();
304  static const char* sKeyInline();
305  static const char* sKeyCrossLine();
306  static const char* sKeyTime();
307  static const char* sKeyVolRen();
308  static const char* sKeyNrSlices();
309  static const char* sKeySlice();
310  static const char* sKeyTexture();
311 
312  static const char* sKeyNrIsoSurfaces();
313  static const char* sKeyIsoValueStart();
314  static const char* sKeyIsoOnStart();
315  static const char* sKeySurfMode();
316  static const char* sKeySeedsMid();
317  static const char* sKeySeedsAboveIsov();
318 };
319 
320 } // namespace visSurvey
ObjectSet< visBase::OrthogonalSlice > slices_
Definition: visvolumedisplay.h:242
#define mExpClass(module)
Definition: commondefs.h:157
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
void turnOn(int flag)
Overrides the envirnonment variable.
ConstRefMan< mVisTrans > displaytrans_
Definition: visvolumedisplay.h:301
visBase::TextureChannel2RGBA * texchannel2rgba_
Definition: visvolumedisplay.h:238
TrcKeyZSampling csfromsession_
Definition: visvolumedisplay.h:292
bool allowMaterialEdit() const
Definition: visvolumedisplay.h:185
Definition of a mouse cursor, can be either a predefined shape (from the enum, or a file...
Definition: mousecursor.h:24
Notifier< VolumeDisplay > boxMoving
Definition: visvolumedisplay.h:221
ConstRefMan< RegularSeisDataPack > cache_
Definition: visvolumedisplay.h:285
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
Slice that cuts orthogonal through a VolumeData.
Definition: visvolorthoslice.h:27
A series of color control points able to give an (interpolated) color for every position [0...
Definition: coltabsequence.h:37
Definition: visboxdragger.h:28
Interface class for Notifier. See comments there.
Definition: notify.h:20
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
static const char * sKeyVolPlaneKey()
Definition: visvolumedisplay.h:214
bool pickable() const
Definition: visvolumedisplay.h:226
static int cCrossLine()
Definition: visvolumedisplay.h:61
ZAxisTransformer * datatransformer_
Definition: visvolumedisplay.h:277
bool selectable() const
Definition: visvolumedisplay.h:228
#define mDefaultFactoryInstantiation(baseclss, clss, keywrd, usernm)
Definition: factory.h:287
VolumeDataPack for 2D and 3D seismic data.
Definition: seisdatapack.h:42
bool canDuplicate() const
Definition: visvolumedisplay.h:187
static int cInLine()
Definition: visvolumedisplay.h:60
Definition: uistring.h:88
bool rightClickable() const
Definition: visvolumedisplay.h:227
static ID SeisID()
Cube/Block (N1xN2xN3) data: 3.
TypeSet< char > sections_
Definition: visvolumedisplay.h:257
static const char * sKeyVolDepthKey()
Definition: visvolumedisplay.h:213
Maps data values to color sequence positions: [0,1].
Definition: coltabmapper.h:33
bool keepdraggerinsidetexture_
Definition: visvolumedisplay.h:263
Used for displaying a polyline, preview for a random line created throught well path.
Definition: visarrowdisplay.h:18
BufferString sliceposition_
Definition: visvolumedisplay.h:290
Definition: vistexturechannel2rgba.h:33
Transforms an Array3D with a ZAxisTransform. It is assumed that the first dimension in the array is i...
Definition: zaxistransformer.h:27
Class to help setup a callback handling.
Definition: notify.h:121
Definition: marchingcubes.h:80
Definition: groupedid.h:40
visBase::BoxDragger * boxdragger_
Definition: visvolumedisplay.h:236
3D point or vector
Definition: commontypes.h:57
VisualObjectImpl
Definition: visobject.h:123
Definition: vismarchingcubessurface.h:29
Definition: visvolumedisplay.h:279
ZAxisTransform * datatransform_
Definition: visvolumedisplay.h:276
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
bool isOn(int flag=0xffff)
Class that can execute a task.
Definition: task.h:193
Definition: visvolumedisplay.h:244
#define mVisTrans
Definition: visdata.h:25
char mode_
Definition: visvolumedisplay.h:251
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
TypeSet< Attrib::SelSpec > * as_
Definition: visvolumedisplay.h:284
Definition: vismaterial.h:36
Database for 3D objects.
Definition: vissurvscene.h:74
bool ismanip_
Definition: visvolumedisplay.h:298
const char * sKeyTime()
bool canHaveMultipleAttribs() const
Definition: visvolumedisplay.h:126
float isovalue_
Definition: visvolumedisplay.h:250
uiString toUiString(const DBKey &ky)
Definition: dbkey.h:117
const uiString & errMsg() const
Definition: visvolumedisplay.h:203
bool hasPosModeManipulator() const
Definition: visvolumedisplay.h:109
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
ObjectSet< AttribData > attribs_
Definition: visvolumedisplay.h:288
ObjectSet< visBase::MarchingCubesSurface > isosurfaces_
Definition: visvolumedisplay.h:243
TypeSet< IsosurfaceSetting > isosurfsettings_
Definition: visvolumedisplay.h:256
Definition: visannot.h:40
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
BufferString errmsg_
Definition: horizontracker.h:117
BufferString slicename_
Definition: visvolumedisplay.h:291
virtual DataPackMgr::ID getDataPackMgrID() const
Definition: visvolumedisplay.h:164
visBase::EventCatcher * eventcatcher_
Definition: visvolumedisplay.h:295
Base class for all &#39;Display&#39; objects.
Definition: vissurvobj.h:54
Definition: visevent.h:40
NotifierAccess * getMovementNotifier()
Definition: visvolumedisplay.h:116
AttribFormat
Definition: vissurvobj.h:178
Specifies an attribute selection (ID or output number of NN).
Definition: attribsel.h:43
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
Definition: groupedid.h:41
TrcKeyZSampling texturecs_
Definition: visvolumedisplay.h:265
bool isInlCrl() const
Definition: visvolumedisplay.h:58
bool onoffstatus_
Definition: visvolumedisplay.h:299
Definition: visvolrenscalarfield.h:37
static int cTimeSlice()
Definition: visvolumedisplay.h:62
void getMousePosInfo(const visBase::EventInfo &ei, IOPar &iop) const
Definition: visvolumedisplay.h:167
Base class for z-axis transforms.
Definition: zaxistransform.h:35
TrcKeyZSampling draggerstartcs_
Definition: visvolumedisplay.h:264
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:149
char seedsaboveisoval_
Definition: visvolumedisplay.h:252
static const char * sKeyInDepthVolResize()
Definition: visvolumedisplay.h:215
bool isinited_
Definition: visvolumedisplay.h:297
visBase::VolumeRenderScalarField * scalarfield_
Definition: visvolumedisplay.h:237
Definition: visevent.h:83
NotifierAccess * getManipulationNotifier()
Definition: visvolumedisplay.h:117
Semblance Attribute.
Definition: attribdataholder.h:21
const MouseCursor * getMouseCursor() const
Definition: visvolumedisplay.h:230
MouseCursor mousecursor_
Definition: visvolumedisplay.h:294
Definition: visvolumedisplay.h:48
DBKey seedsid_
Definition: visvolumedisplay.h:253

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