OpendTect  6.3
visdata.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 "visdataman.h"
15 #include "callback.h"
16 #include "refcount.h"
17 #include "sets.h"
18 
19 namespace visBase { class EventInfo; }
20 
21 namespace osg { class Switch; class Node; class StateSet; }
22 namespace osgViewer { class CompositeViewer; }
23 namespace osgGeo { class GLInfo; }
24 
25 #define mVisTrans visBase::Transformation
26 
27 
28 namespace visBase
29 {
30 
31 class Transformation;
32 class SelectionManager;
33 class DataManager;
34 class Scene;
35 class DataObjectGroup;
36 class NodeState;
37 
38 
39 // OSG traversal bitmasks defined by OpendTect
40 inline unsigned int cNoTraversalMask() { return 0; }
41 inline unsigned int cAllTraversalMask() { return 0xFFFFFFFF; }
42 inline unsigned int cEventTraversalMask() { return 0x00000001; }
43 inline unsigned int cBBoxTraversalMask() { return 0x00000002; }
44 
45 inline unsigned int cActiveIntersecTraversalMask() { return 0x00000004; }
46 inline unsigned int cPassiveIntersecTraversalMask() { return 0x00000008; }
47 inline unsigned int cIntersectionTraversalMask()
49 inline unsigned int cDraggerIntersecTraversalMask() { return 0x00000010; }
50 
51 
59 mExpClass(visBase) DataObject : public RefCount::Referenced
60  , public CallBacker
61 {
62 public:
63 
64  virtual const char* getClassName() const { return "Not impl"; }
65 
66  virtual bool isOK() const { return true; }
67 
68  int id() const { return id_; }
69 
70  void setID(int nid);
71  static int getID(const osg::Node*);
72 
73  uiString name() const;
74  virtual void setName(const uiString&);
75 
76  osg::Node* osgNode(bool skipswitch=false);
77  const osg::Node* osgNode(bool skipswitch=false) const;
78 
79  void enableTraversal(unsigned int mask,bool yn=true);
80  bool isTraversalEnabled(unsigned int mask) const;
81 
82  virtual bool turnOn(bool yn);
83  virtual bool isOn() const;
84 
85  bool isPickable(bool actively=true) const;
86  void setPickable(bool actively,bool passively=true);
90  virtual bool rightClickable() const { return selectable(); }
91  virtual bool selectable() const { return false; }
92  void select() const;
93  /*<! Is here for convenience. Will rewire to
94  SelectionManager. */
95  void deSelect() const;
96  /*<! Is here for convenience. Will rewire to
97  SelectionManager. */
98  void updateSel() const;
99  /*<! Is here for convenience. Will rewire to
100  SelectionManager. */
101 
102  virtual bool isSelected() const;
103  virtual NotifierAccess* selection() { return 0; }
104  virtual NotifierAccess* deSelection() { return 0; }
105  virtual NotifierAccess* rightClicked() { return 0; }
106  virtual const TypeSet<int>* rightClickedPath() const{ return 0; }
107 
108  virtual void setDisplayTransformation(const mVisTrans*);
117  virtual const mVisTrans* getDisplayTransformation() const { return 0; }
126  virtual void setRightHandSystem(bool yn) {}
129  virtual bool isRightHandSystem() const { return true; }
130 
131  virtual void setPixelDensity(float dpi);
132  static float getDefaultPixelDensity();
133  virtual float getPixelDensity() const;
134 
135  virtual const uiString& errMsg() const
136  { return uiString::emptyString(); }
137 
138  bool serialize(const char* filename,
139  bool binary=false);
140 
141  void setParent(DataObjectGroup* g) { parent_ = g; }
142 
143  template <class T> T* addNodeState(T* ns)
144  { doAddNodeState(ns); return ns; }
145  NodeState* removeNodeState(NodeState*);
146  NodeState* getNodeState( int idx );
147 
148  static void setVisualizationThread(Threads::ThreadID);
150  static bool isVisualizationThread();
151 
152  static void requestSingleRedraw();
153 
154  static void setCommonViewer(osgViewer::CompositeViewer*);
155  static osgViewer::CompositeViewer* getCommonViewer();
156 
157 
158  static const osgGeo::GLInfo* getGLInfo();
162  static NotifierAccess& glInfoAvailable() { return glinfoavailable_; }
163  //Triggers once, when glinfo is available
164 
165 protected:
166  ~DataObject();
167  virtual osg::StateSet* getStateSet();
168  void doAddNodeState(NodeState* ns);
169 
170  friend class SelectionManager;
171  friend class Scene;
172  virtual void triggerSel() {}
174  virtual void triggerDeSel() {}
176  virtual void triggerRightClick(const EventInfo* =0) {}
177 
178  DataObject();
179 
181 
182  template <class T>
183  T* setOsgNode( T* t )
184  {
185  setOsgNodeInternal( (osg::Node*) t );
186  return t;
187  }
189 
190  void updateNodemask();
191 
192 private:
193  void setOsgNodeInternal(osg::Node*);
194  void updateOsgNodeData();
195 
197  osg::Node* osgnode_;
198  osg::Switch* osgoffswitch_;
199  int id_;
200  bool ison_;
202  unsigned int enabledmask_;
204  static osgViewer::CompositeViewer* commonviewer_;
206 };
207 
208 };
209 
210 #define mCreateDataObj(clss) \
211 { \
212  return new clss; \
213 } \
214  \
215 private: \
216  static visBase::DataObject* createInternal() \
217  { return new clss; } \
218  clss& operator =(const clss&); \
219  clss(const clss&); \
220 public: \
221  clss(); \
222  static void initClass(); \
223  static const char* getStaticClassName(); \
224  static const char* sFactoryKeyword(); \
225  virtual const char* getClassName() const
226 
227 
228 #define mCreateFactoryEntry( clss ) \
229 const char* clss::getStaticClassName() { return #clss; } \
230 const char* clss::getClassName() const \
231 { return clss::getStaticClassName(); } \
232 const char* clss::sFactoryKeyword() { return #clss; } \
233 void clss::initClass() \
234 { visBase::DataManager::factory().addCreator( \
235  createInternal, getStaticClassName() ); }
#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.
unsigned int cDraggerIntersecTraversalMask()
Definition: visdata.h:49
DataObjectGroup * parent_
Definition: visdata.h:180
osg::Switch * osgoffswitch_
Definition: visdata.h:198
void setParent(DataObjectGroup *g)
Definition: visdata.h:141
virtual bool selectable() const
Definition: visdata.h:91
virtual const char * getClassName() const
Definition: visdata.h:64
uiString name_
Definition: visdata.h:201
Definition: visdatagroup.h:24
virtual NotifierAccess * rightClicked()
Definition: visdata.h:105
bool ison_
Definition: visdata.h:200
Interface class for Notifier. See comments there.
Definition: notify.h:20
T * setOsgNode(T *t)
Must be called during construction.
Definition: visdata.h:183
Definition: visdata.h:22
virtual NotifierAccess * deSelection()
Definition: visdata.h:104
DataObject is the base class off all objects that are used in Visualization and ought to be shared in...
Definition: visdata.h:59
A collection of geoscientific extensions to OpenSceneGraph.
Definition: visannot.h:35
virtual void triggerSel()
Definition: visdata.h:172
static const uiString & emptyString()
Definition: uistring.h:107
Definition: uistring.h:88
virtual const uiString & errMsg() const
Definition: visdata.h:135
virtual bool isOK() const
Definition: visdata.h:66
Definition: visnodestate.h:25
virtual void triggerDeSel()
Definition: visdata.h:174
virtual bool rightClickable() const
Definition: visdata.h:90
Class to help setup a callback handling.
Definition: notify.h:121
Set of pointers to objects.
Definition: commontypes.h:28
unsigned int cBBoxTraversalMask()
Definition: visdata.h:43
T * addNodeState(T *ns)
Definition: visdata.h:143
bool isOn(int flag=0xffff)
SelectionManager handles DataObject that can be selected. If an object can be selected, it has to register himself with regSelObject. At registration it has to give two objects, first of all, he gives the object that outside users will associate him with when they want to add their CB to detect his selection.
Definition: visselman.h:37
void * ThreadID
Definition: thread.h:33
#define mVisTrans
Definition: visdata.h:25
virtual void setRightHandSystem(bool yn)
Definition: visdata.h:126
unsigned int cActiveIntersecTraversalMask()
Definition: visdata.h:45
virtual void triggerRightClick(const EventInfo *=0)
Definition: visdata.h:176
unsigned int enabledmask_
Definition: visdata.h:202
static osgViewer::CompositeViewer * commonviewer_
Definition: visdata.h:204
osg::Node * osgnode_
Definition: visdata.h:197
virtual bool isRightHandSystem() const
Definition: visdata.h:129
virtual const visBase::Transformation * getDisplayTransformation() const
Definition: visdata.h:117
virtual const TypeSet< int > * rightClickedPath() const
Definition: visdata.h:106
Definition: visannot.h:40
static NotifierAccess & glInfoAvailable()
Definition: visdata.h:162
static Notifier< DataObject > glinfoavailable_
Definition: visdata.h:205
Scene manages all DataObjects and has some managing functions such as the selection management and va...
Definition: visscene.h:38
Open Scene Graph.
Definition: visannot.h:26
ObjectSet< NodeState > nodestates_
Definition: visdata.h:196
Definition: visevent.h:40
int id() const
Definition: visdata.h:68
int id_
Definition: visdata.h:199
virtual NotifierAccess * selection()
Definition: visdata.h:103
static Threads::ThreadID visualizationthread_
Definition: visdata.h:203
unsigned int cPassiveIntersecTraversalMask()
Definition: visdata.h:46
unsigned int cAllTraversalMask()
Definition: visdata.h:41
unsigned int cIntersectionTraversalMask()
Definition: visdata.h:47
unsigned int cNoTraversalMask()
Definition: visdata.h:40
unsigned int cEventTraversalMask()
Definition: visdata.h:42

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