OpendTect  6.3
visrandomtrackdragger.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: K. Tingdahl
8  Date: Feb 2006
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "visobject.h"
14 #include "objectset.h"
15 #include "position.h"
16 #include "ranges.h"
17 
18 
19 namespace osg { class Switch; }
20 
21 namespace visBase
22 {
23 
27 class Transformation;
28 class Dragger;
29 class MarkerSet;
30 class PlaneDragCBHandler;
31 class PolyLine;
32 
33 
35 {
36  friend class PlaneDragCBHandler;
37 
38 public:
41 
42  int nrKnots() const;
43  Coord getKnot(int) const;
44  void setKnot(int,const Coord&);
45  void insertKnot(int,const Coord&);
46  void removeKnot(int);
47 
48  int getKnotIdx(const TypeSet<int>& pickpath) const;
49 
50  void showAdjacentPanels(int knotidx,bool yn);
51  bool areAdjacentPanelsShown(int knotidx) const;
52  void showAllPanels(bool yn);
53  bool areAllPanelsShown() const;
54 
55  Interval<float> getDepthRange() const;
56  void setDepthRange(const Interval<float>&);
57 
58  void setDisplayTransformation(const mVisTrans*);
59  const mVisTrans* getDisplayTransformation() const;
60 
61  void setLimits(const Coord3& start,
62  const Coord3& stop,
63  const Coord3& step);
64 
65  void showPlaneDraggers(bool yn,int minsizeinsteps=0);
66 
67  void setTransDragKeys(bool trans1d,int keys,
68  int groupidx=0);
69  int getTransDragKeys(bool trans1d,
70  int groupidx=0) const;
71 
72  CNotifier<RandomTrackDragger,int> motion;
73  Notifier<RandomTrackDragger> movefinished;
74 
75  NotifierAccess* rightClicked() { return &rightclicknotifier_; }
76  const TypeSet<int>* rightClickedPath() const;
77  const EventInfo* rightClickedEventInfo() const;
78 
79  void handleEvents(bool yn);
80  bool isHandlingEvents() const;
81 
82  void setDragCtrlSpacing(const StepInterval<float>&,
83  const StepInterval<float>&,
84  const StepInterval<float>&);
85 
86 protected:
88 
89  void startCB(CallBacker*);
90  void moveCB(CallBacker*);
91  void finishCB(CallBacker*);
92 
93  void triggerRightClick(const EventInfo* eventinfo);
94 
95  void doSetKnot(int,const Coord&);
96 
97  void followActiveDragger(int activeidx);
98  void updatePanels();
99  void postponePanelUpdate(bool);
100  void turnPanelOn(int planeidx,bool yn);
101  void setPanelsPolygonOffset(bool);
102 
103  void removePlaneDraggerCBHandler(int idx);
104  void addPlaneDraggerCBHandler();
105 
106  void updatePlaneDraggers();
107  void updateKnotColor(int idx,bool horoverlap);
108  bool canShowPlaneDragger(int planeidx,
109  bool& horoverlap) const;
110  void snapToLimits(Coord3& pos) const;
111  Coord3 getPlaneBoundingBoxInSteps(int planeidx) const;
112 
113  bool doesKnotStickToBorder(int knotidx) const;
114  unsigned char getOnBorderFlags(int knotidx) const;
115 
116  void showRotationAxis(bool yn,int planeidx=0,
117  Coord normpickedpos=Coord::udf());
118 
119  int getDragControlIdx(bool trans1d,int groupidx,
120  bool docreate);
121  int getDragControlIdx(bool trans1d,
122  int groupidx) const;
123 
125  /* Contains four coupled draggers per knot:
126  idx%4==0: 2D horizontal dragger at start depth
127  idx%4==1: 1D vertical dragger at start depth
128  idx%4==2: 2D horizontal dragger at stop depth
129  idx%4==3: 1D vertical dragger at stop depth */
131 
133 
134  osg::Switch* panels_;
135  osg::Switch* planedraggers_;
136  osg::Switch* rotationaxis_;
137 
140 
143 
145 
148  StepInterval<float> dragctrlspacing_[3];
149 
152 
155 
157 
158  struct DragControl
159  {
160  DragControl(bool trans1d,int groupidx);
162 
163  bool trans1d_;
167  };
168 
170 
171  static const char* sKeyDraggerScale() { return "subDraggerScale"; }
172 };
173 
174 } // namespace visBase
#define mExpClass(module)
Definition: commondefs.h:157
static const char * sKeyDraggerScale()
Definition: visrandomtrackdragger.h:171
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
Notifier< RandomTrackDragger > rightclicknotifier_
Definition: visrandomtrackdragger.h:153
BoolTypeSet showadjacents_
Definition: visrandomtrackdragger.h:138
const visBase::Transformation * displaytrans_
Definition: visrandomtrackdragger.h:156
Interface class for Notifier. See comments there.
Definition: notify.h:20
bool postponepanelupdate_
Definition: visrandomtrackdragger.h:144
int modkeymask_
Definition: visrandomtrackdragger.h:166
Interval< float > zrange_
Definition: visrandomtrackdragger.h:146
int mousebutmask_
Definition: visrandomtrackdragger.h:165
static Point2D< T > udf()
Definition: geometry.h:78
const EventInfo * rightclickeventinfo_
Definition: visrandomtrackdragger.h:154
Interval of values.
Definition: commontypes.h:27
ObjectSet< PlaneDragCBHandler > planedraghandlers_
Definition: visrandomtrackdragger.h:132
Definition: visrandomtrackdragger.h:158
Class to help setup a callback handling.
Definition: notify.h:121
Set of pointers to objects.
Definition: commontypes.h:28
~DragControl()
Definition: visrandomtrackdragger.h:161
3D point or vector
Definition: commontypes.h:57
Set of (small) copyable elements.
Definition: commontypes.h:26
bool showallpanels_
Definition: visrandomtrackdragger.h:139
#define mVisTrans
Definition: visdata.h:25
osg::Switch * rotationaxis_
Definition: visrandomtrackdragger.h:136
static RandomTrackDragger * create()
Definition: visrandomtrackdragger.h:39
Definition: visrandomtrackdragger.h:34
osg::Switch * planedraggers_
Definition: visrandomtrackdragger.h:135
bool trans1d_
Definition: visrandomtrackdragger.h:163
int groupidx_
Definition: visrandomtrackdragger.h:164
osg::Switch * panels_
Definition: visrandomtrackdragger.h:134
Definition: visannot.h:40
ObjectSet< Dragger > draggers_
Definition: visrandomtrackdragger.h:124
Interval< float > zborder_
Definition: visrandomtrackdragger.h:151
bool showplanedraggers_
Definition: visrandomtrackdragger.h:141
Open Scene Graph.
Definition: visannot.h:26
Definition: visevent.h:40
Notifier with automatic capsule creation.
Definition: notify.h:166
#define mCreateDataObj(clss)
Definition: visdata.h:210
int planedraggerminsizeinsteps_
Definition: visrandomtrackdragger.h:142
Definition: visobject.h:67
2D point or vector class.
Definition: commontypes.h:58
Geom::Rectangle< double > horborder_
Definition: visrandomtrackdragger.h:150
ObjectSet< DragControl > dragcontrols_
Definition: visrandomtrackdragger.h:169
ObjectSet< MarkerSet > draggermarkers_
Definition: visrandomtrackdragger.h:130

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