OpendTect  6.3
uivispartserv.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: Mar 2002
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "uivismod.h"
14 #include "uiapplserv.h"
15 
16 #include "trckeyzsampling.h"
17 #include "datapack.h"
18 #include "keyboardevent.h"
19 #include "menuhandler.h"
20 #include "mouseevent.h"
21 #include "ranges.h"
22 #include "thread.h"
23 #include "coltabmappersetup.h"
24 #include <typeinfo>
25 
26 class BufferStringSet;
27 class DataPointSet;
29 class PickSet;
31 class SeisTrcBuf;
32 class SurfaceInfo;
33 class TaskRunner;
34 class ZAxisTransform;
35 
36 class uiDirLightDlg;
37 class uiMenuHandler;
38 class uiMPEMan;
40 class uiSlicePos3DDisp;
41 class uiToolBar;
43 class uiVisModeMgr;
44 class uiVisPickRetriever;
45 template <class T> class Selector;
46 
47 namespace Attrib { class SelSpec; }
48 namespace ColTab { class Sequence; }
49 namespace FlatView { class DataDispPars; }
50 namespace Threads { class Mutex; }
51 namespace visBase { class DataObject; class EventCatcher; }
52 namespace visSurvey { class Scene; }
53 namespace ZDomain { class Info; }
54 
55 
62  friend class uiMenuHandler;
63  friend class uiVisModeMgr;
64 
65 public:
67  ~uiVisPartServer();
68 
69  const char* name() const;
70  /*<\returns the partservers name */
71  NotifierAccess& removeAllNotifier();
72  /*<\Returns a notifier that is triggered
73  when the entire visualization is
74  closed. All visBase::DataObjects
75  must then be unrefed. */
76 
77  void setMouseCursorExchange(MouseCursorExchange*);
78 
79  visBase::DataObject* getObject( int id ) const;
80  int highestID() const;
81  void addObject( visBase::DataObject*, int sceneid,
82  bool saveinsessions);
83  void shareObject(int sceneid,int id);
84  void findObject(const std::type_info&,TypeSet<int>&);
85  void findObject(const DBKey&, TypeSet<int>& );
86  void removeObject(visBase::DataObject*,int sceneid);
87  void removeObject(int id,int sceneid);
88  void setObjectName(int,const uiString&);
89  uiString getObjectName(int) const;
90  Pos::GeomID getGeomID(int) const;
91 
94 
95  void removeSelection();
96 
97  int addScene(visSurvey::Scene* =0);
101  void removeScene(int);
102  NotifierAccess& nrScenesChange() { return nrscenesChange; }
103  bool clickablesInScene(const char* trackertype,
104  int sceneid) const;
105  const ObjectSet<visSurvey::Scene>& getAllScenes() const { return scenes_; }
106  void getSceneIds(TypeSet<int>& sceneids) const;
107 
108  void getChildIds(int id,TypeSet<int>&) const;
113  void setMoreObjectsToDoHint(int sceneid,bool yn);
114  bool getMoreObjectsToDoHint(int sceneid) const;
115 
116  bool hasAttrib(int) const;
117  enum AttribFormat { None, Cube, Traces, RandomPos, OtherFormat };
133  AttribFormat getAttributeFormat(int id,int attrib) const;
134  bool canHaveMultipleAttribs(int id) const;
135  bool canAddAttrib(int id,int nrattribstoadd=1) const;
136  bool canRemoveAttrib(int id) const;
137  int addAttrib(int id);
138  void removeAttrib(int id,int attrib);
139  int getNrAttribs(int id) const;
140  void getAttribPosName(int id,int attrib,uiString&) const;
142  bool swapAttribs(int id,int attrib0,int attrib1);
143  void showAttribTransparencyDlg(int id,int attrib);
144  unsigned char getAttribTransparency(int id,int attrib) const;
145  void setAttribTransparency(int id,int attrib, unsigned char);
146 
147  const TypeSet<Attrib::SelSpec>* getSelSpecs(int id,int attrib) const;
148  const Attrib::SelSpec* getSelSpec(int id,int attrib) const;
149 
150  void setSelSpec(int id,int attrib,const Attrib::SelSpec&);
151  void setSelSpecs(int id,int attrib,
152  const TypeSet<Attrib::SelSpec>&);
153  void setUserRefs(int id,int attrib,BufferStringSet*);
154  bool interpolationEnabled(int id) const;
157  void enableInterpolation(int id,bool yn);
160  bool isAngle(int id,int attrib) const;
162  void setAngleFlag(int id, int attrib, bool yn);
164  bool isAttribEnabled(int id,int attrib) const;
165  void enableAttrib(int id,int attrib,bool yn);
166  bool hasSingleColorFallback(int id) const;
167  void setTranslation(int visid,const Coord3& shift);
168  Coord3 getTranslation(int visid) const;
169 
170  //Volume data stuff
171  TrcKeyZSampling getTrcKeyZSampling(int id,int attrib=-1) const;
172  const RegularSeisDataPack* getCachedData(int id,int attrib) const;
173  bool setCubeData(int id,int attrib,
174  const RegularSeisDataPack*);
176  bool setDataPackID(int id,int attrib,DataPack::ID);
177  DataPack::ID getDataPackID(int id,int attrib) const;
178  DataPack::ID getDisplayedDataPackID(int id,int attrib) const;
179  DataPackMgr::ID getDataPackMgrID(int id) const;
180 
181  //Trace data
182  void getDataTraceBids(int id,TypeSet<BinID>&) const;
183  Interval<float> getDataTraceRange(int id) const;
184 
185  // See visSurvey::SurfaceDisplay for details
186  void getRandomPos(int visid,DataPointSet&) const;
187  void getRandomPosCache(int visid,int attrib,
188  DataPointSet& ) const;
189  void setRandomPosData(int visid, int attrib,
190  const DataPointSet*);
191 
192  bool hasMaterial(int id) const;
193  void setMaterial(int id);
194  bool hasColor(int id) const;
195  void setColor(int id,const Color&);
196 
197  bool blockMouseSelection(bool yn);
200  bool disabMenus(bool yn);
202  void createToolBars();
203  bool disabToolBars(bool yn);
206  bool showMenu(int id,int menutype=0,const TypeSet<int>* =0,
207  const Coord3& = Coord3::udf());
213  MenuHandler* getMenuHandler();
214  MenuHandler* getToolBarHandler();
215 
216  DBKey getDBKey(int) const;
217 
218  int getSelObjectId() const;
219  int getSelAttribNr() const;
220  void setSelObjectId(int visid,int attrib=-1);
221  void setCurInterObjID(int visid) { curinterpobjid_ = visid; }
222  int getCurInterObjID() const { return curinterpobjid_; }
223  int getSceneID(int visid) const;
224  const ZDomain::Info* zDomainInfo(int sceneid) const;
227  //Events and their functions
228  void unlockEvent();
232  int getEventObjId() const;
233  /*<\returns the id that triggered the event */
234  int getEventAttrib() const;
235  /*<\returns the attrib that triggered the event */
236 
237  static int evUpdateTree();
238  void triggerTreeUpdate();
239 
240  static int evSelection();
241  /*<! Get the id with getEventObjId() */
242 
243  static int evDeSelection();
244  /*<! Get the id with getEventObjId() */
245 
246  static int evGetNewData();
251  void calculateAllAttribs();
252  void calculateAllAttribs(int);
253  bool calculateAttrib(int id,int attrib,bool newsel,
254  bool ignorelocked=false);
255  bool calcManipulatedAttribs(int id);
256 
257  void movePlaneAndCalcAttribs(int,const TrcKeyZSampling&);
258 
259  bool canHaveMultipleTextures(int) const;
260  int nrTextures(int id,int attrib) const;
261  void selectTexture(int id,int attrib,int texture);
262  int selectedTexture(int id,int attrib) const;
263 
264  static int evMouseMove();
265  Coord3 getMousePos() const;
266  int zFactor() const { return zfactor_; }
267  BufferString getMousePosVal() const;
268  BufferString getMousePosString() const { return mouseposstr_; }
269  void getObjectInfo(int id,BufferString&) const;
270 
271  static int evKeyboardEvent();
273  const KeyboardEvent& getKeyboardEvent() const { return kbevent_; }
274  static int evMouseEvent();
276  const MouseEvent& getMouseEvent() const { return mouseevent_; }
277  void setSceneEventHandled();
278 
279  static int evSelectAttrib();
280 
281  static int evInteraction();
282  /*<! Get the id with getEventObjId() */
283  BufferString getInteractionMsg(int id) const;
287  static int evViewAll();
288  static int evToHomePos();
289 
290  // ColorTable stuff
291  void fillDispPars(int id,int attrib,
292  FlatView::DataDispPars&,bool) const;
293  const ColTab::Mapper& getColTabMapper(int id,int attrib) const;
294  void setColTabMapper(int id,int attrib,
295  const ColTab::Mapper&);
296  const ColTab::Sequence& getColTabSequence(int id,int attrib) const;
297  bool canSetColTabSequence(int id) const;
298  void setColTabSequence(int id,int attrib,
299  const ColTab::Sequence&);
300  bool canHandleColTabSeqTrans(int id,int attr) const;
301 
302  void displayMapperRangeEditForAttribs(int id,
303  int attrib=-1);
304 
305  static int evColorTableChange();
306  void displaySceneColorbar(bool);
307  void manageSceneColorbar(int);
308  bool sceneColorbarDisplayed();
309 
310  Color getSceneAnnotCol(int);
311 
312  //General stuff
313  bool deleteAllObjects();
314  void setZStretch();
315  void setDirectionalLight();
316  bool setWorkingArea();
317  void setOnlyAtSectionsDisplay(int id,bool);
318  bool displayedOnlyAtSections(int id) const;
319  static int evViewModeChange();
320  void setViewMode(bool yn,bool notify=true);
321  void setSoloMode(bool,TypeSet< TypeSet<int> >,int);
322  bool isSoloMode() const;
323  bool isViewMode() const;
324  typedef enum { View, Interactive, Pick } WorkMode;
325  void setWorkMode(WorkMode,bool notify=true);
326  WorkMode getWorkMode() const;
327  enum SelectionMode { Polygon, Rectangle };
328  void setSelectionMode(SelectionMode);
329  SelectionMode getSelectionMode() const;
330  void turnSelectionModeOn(bool);
331  bool isSelectionModeOn() const;
333  void setZAxisTransform(int sceneid,ZAxisTransform*,
334  TaskRunner*);
335  const ZAxisTransform* getZAxisTransform(int sceneid) const;
336  ZAxisTransform* getZAxisTransform(int sceneid);
337  visBase::EventCatcher* getEventCatcher(int sceneid);
338 
339  const Selector<Coord3>* getCoordSelector(int scene) const;
340  void turnOn(int,bool,bool doclean=false);
341  bool isOn(int) const;
342  void updateDisplay(bool,int,int refid=-1);
343  void setTopBotImg(int sceneid);
344 
345  bool canDuplicate(int) const;
346  int duplicateObject(int id,int sceneid);
349  // Tracking stuff
350  void turnSeedPickingOn(bool yn);
351  static int evPickingStatusChange();
352  static int evDisableSelTracker();
353  static int evShowMPESetupDlg();
354  static int evShowMPEParentPath();
355 
356  void reportTrackingSetupActive(bool yn);
357  bool isTrackingSetupActive() const;
358 
359  bool isPicking() const;
364  void getPickingMessage(uiString&) const;
365 
366  static int evShowSetupGroupOnTop();
367  bool showSetupGroupOnTop(const char* grpnm);
368  const char* getTopSetupGroupName() const;
369 
370  void initMPEStuff();
371  static int evStoreEMObject();
372  static int evStoreEMObjectAs();
373  void storeEMObject(bool storeas);
374 
376  { return slicepostools_; }
377 
378  bool writeSceneToFile(int id,
379  const uiString& dlgtitle) const;
380 
381  bool usePar(const IOPar&);
382  void fillPar(IOPar&) const;
383 
384  bool canBDispOn2DViewer(int id) const;
385  bool isVerticalDisp(int id) const;
386 
387  void lock(int id,bool yn);
388  bool isLocked(int id) const;
389 
390  bool sendVisEvent(int);
392 
393 protected:
394 
395  void createMenuCB(CallBacker*);
396  void addToToolBarCB(CallBacker*);
397  void handleMenuCB(CallBacker*);
398  void survChgCB(CallBacker*);
399 
400  visSurvey::Scene* getScene(int);
401  const visSurvey::Scene* getScene(int) const;
402 
403  bool selectAttrib(int id, int attrib);
404  void updateManipulatorStatus(visBase::DataObject*,
405  bool issel) const;
406 
407  void setMarkerPos(const TrcKeyValue&,
408  int dontsetscene);
409 
410  bool isManipulated(int id) const;
411  void acceptManipulation(int id);
412  bool resetManipulation(int id);
413 
414  void setUpConnections(int id);
416  void removeConnections(int id);
417 
418  void updateDraggers();
419  int getTypeSetIdx(int);
420 
421  void triggerObjectMoved(int id);
422 
424 
427 
430 
433 
435  int zfactor_;
441 
443  const char* topsetupgroupname_;
444  bool viewmode_;
445  WorkMode workmode_;
453 
454  int seltype_;
456 
457  void mouseCursorCB(CallBacker*);
458  void rightClickCB(CallBacker*);
459  void selectObjCB(CallBacker*);
460  void deselectObjCB(CallBacker*);
461  void updateSelObjCB(CallBacker*);
462  void interactionCB(CallBacker*);
463  void mouseMoveCB(CallBacker*);
464  void keyEventCB(CallBacker*);
465  void mouseEventCB(CallBacker*);
466  void vwAll(CallBacker*);
467  void toHome(CallBacker*);
468  void colTabChangeCB(CallBacker*);
469 
470  void mapperRangeEditChanged(CallBacker*);
471 
475 
477 
478  static const char* sKeyWorkArea();
479  static const char* sKeyAppVel();
480 
485 
487 
489 };
490 
491 
493 {
494 public:
497 
498  bool allowTurnOn(int,bool);
499 
500 protected:
501 
503 };
Definition: uivispartserv.h:117
Definition: uitoolbar.h:30
int seltype_
Definition: uivispartserv.h:454
MouseEvent mouseevent_
Definition: uivispartserv.h:439
#define mExpClass(module)
Definition: commondefs.h:157
Definition: trckeyvalue.h:25
Threads::Mutex & eventmutex_
Definition: uivispartserv.h:447
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.
uiTreeItemTBHandler * toolbar_
Definition: uivispartserv.h:426
Definition: menuhandler.h:185
MenuItem resmnuitem_
Definition: uivispartserv.h:474
Set of data points with group selection.
Definition: datapointset.h:47
const MouseEvent & getMouseEvent() const
Definition: uivispartserv.h:276
Surface info name/attribname with an ID (usually the EM-ID).
Definition: surfaceinfo.h:19
int eventattrib_
Definition: uivispartserv.h:449
Definition: uivispickretriever.h:21
MenuItem changematerialmnuitem_
Definition: uivispartserv.h:473
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
A series of color control points able to give an (interpolated) color for every position [0...
Definition: coltabsequence.h:37
int eventobjid_
Definition: uivispartserv.h:448
BufferString mouseposval_
Definition: uivispartserv.h:436
SelectionMode selectionmode_
Definition: uivispartserv.h:455
The Visualization Part Server.
Definition: uivispartserv.h:60
Interface class for Notifier. See comments there.
Definition: notify.h:20
int getCurInterObjID() const
Definition: uivispartserv.h:222
ObjectSet< visSurvey::Scene > scenes_
Definition: uivispartserv.h:423
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
DataObject is the base class off all objects that are used in Visualization and ought to be shared in...
Definition: visdata.h:59
uiDirLightDlg * dirlightdlg_
Definition: uivispartserv.h:488
bool issolomode_
Definition: uivispartserv.h:446
uiVisPartServer & visserv
Definition: uivispartserv.h:502
Keyboard event.
Definition: keyboardevent.h:22
Definition: uimenuhandler.h:87
Definition: uimapperrangeeditordlg.h:24
uiSlicePos3DDisp * getUiSlicePos() const
Definition: uivispartserv.h:375
int selattrib_
Definition: uivispartserv.h:450
VolumeDataPack for 2D and 3D seismic data.
Definition: seisdatapack.h:42
Definition: uistring.h:88
Set of BufferString objects.
Definition: bufstringset.h:25
MenuItem resetmanipmnuitem_
Definition: uivispartserv.h:472
Maps data values to color sequence positions: [0,1].
Definition: coltabmapper.h:33
Used for displaying a polyline, preview for a random line created throught well path.
Definition: visarrowdisplay.h:18
bool isAngle(DataType)
Definition: mouseevent.h:206
FixedString PickSet()
Definition: keystrs.h:99
int mapperrgeditordisplayid_
Definition: uivispartserv.h:451
FixedString None()
Definition: keystrs.h:90
Data display parameters.
Definition: flatview.h:184
Definition: uimenuhandler.h:25
bool blockmenus_
Definition: uivispartserv.h:482
uiSlicePos3DDisp * slicepostools_
Definition: uivispartserv.h:429
~uiVisModeMgr()
Definition: uivispartserv.h:496
Definition: groupedid.h:40
Notifier< uiVisPartServer > nrscenesChange
Definition: uivispartserv.h:484
interface to threads that should be portable.
Definition: atomic.h:24
Coord3 xytmousepos_
Definition: uivispartserv.h:434
uiMenuHandler & menu_
Definition: uivispartserv.h:425
KeyboardEvent kbevent_
Definition: uivispartserv.h:438
3D point or vector
Definition: commontypes.h:57
bool allowTurnOn(int, bool)
NotifierAccess & nrScenesChange()
Definition: uivispartserv.h:102
visSurvey::Scene * sceneeventsrc_
Definition: uivispartserv.h:440
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
Definition: menuhandler.h:74
Toolbar for setting slice position _ 3D visualization display.
Definition: uivisslicepos3d.h:26
bool isOn(int flag=0xffff)
Class that can execute a task.
Definition: task.h:193
static Point3D< T > udf()
Definition: geometry.h:924
Definition: uivisdirlightdlg.h:26
FixedString Cube()
Definition: keystrs.h:49
Notifier< uiVisPartServer > keyEvent
Definition: uivispartserv.h:272
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
uiMultiMapperRangeEditWin * multirgeditwin_
Definition: uivispartserv.h:431
Notifier< uiVisPartServer > mouseEvent
Definition: uivispartserv.h:275
uiVisPickRetriever * pickretriever_
Definition: uivispartserv.h:483
const char * topsetupgroupname_
Definition: uivispartserv.h:443
AttribFormat
Definition: uivispartserv.h:117
Database for 3D objects.
Definition: vissurvscene.h:74
int curinterpobjid_
Definition: uivispartserv.h:452
WorkMode workmode_
Definition: uivispartserv.h:445
int zFactor() const
Definition: uivispartserv.h:266
Interface for classes that select on basis of a key.
Definition: selector.h:23
MouseCursorExchange * mousecursorexchange_
Definition: uivispartserv.h:486
WorkMode
Definition: uivispartserv.h:324
uiVisModeMgr * vismgr_
Definition: uivispartserv.h:481
bool mapperrgeditinact_
Definition: uivispartserv.h:432
bool tracksetupactive_
Definition: uivispartserv.h:442
BufferString getMousePosString() const
Definition: uivispartserv.h:268
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
Index_Type GeomID
Definition: commontypes.h:48
BufferString mouseposstr_
Definition: uivispartserv.h:437
Definition: visannot.h:40
TypeSet< TypeSet< int > > displayids_
Definition: uivispartserv.h:476
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
Notifier< uiVisPartServer > selectionmodeChange
Definition: uivispartserv.h:332
uiMPEMan * mpetools_
Definition: uivispartserv.h:428
Services from application level to &#39;Part servers&#39;.
Definition: uiapplserv.h:22
Is a lock that allows a thread to have exlusive rights to something.
Definition: thread.h:43
SelectionMode
Definition: uivispartserv.h:327
Notifier< uiVisPartServer > planeMovedEvent
Definition: uivispartserv.h:391
Definition: picklocation.h:19
uiVisModeMgr(uiVisPartServer *)
CNotifier< uiVisPartServer, int > objectRemoved
Definition: uivispartserv.h:93
set of seismic traces.
Definition: seisbuf.h:28
Definition: coltab.h:20
Specifies an attribute selection (ID or output number of NN).
Definition: attribsel.h:43
Color is an RGB color object, with a transparancy. The storage is in a 4-byte integer, similar to Qt.
Definition: color.h:24
Dialog for tracking properties.
Definition: uimpeman.h:51
const KeyboardEvent & getKeyboardEvent() const
Definition: uivispartserv.h:273
const ObjectSet< visSurvey::Scene > & getAllScenes() const
Definition: uivispartserv.h:105
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
Definition: groupedid.h:41
bool viewmode_
Definition: uivispartserv.h:444
Makes available certain services that are needed on a higher level.
Definition: uiapplserv.h:46
#define mClass(module)
Definition: commondefs.h:161
Definition: seistype.h:25
CNotifier< uiVisPartServer, int > objectAdded
Definition: uivispartserv.h:92
Base class for z-axis transforms.
Definition: zaxistransform.h:35
int zfactor_
Definition: uivispartserv.h:435
Definition: bitmap2rgb.h:15
Definition: uivispartserv.h:492
Definition: mouseevent.h:72
Definition: visevent.h:83
Information of z-domain.
Definition: zdomain.h:96
void setCurInterObjID(int visid)
Definition: uivispartserv.h:221
Semblance Attribute.
Definition: attribdataholder.h:21
Definition: zdomain.h:18

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