CEDRIC  Revision_backup-2009-02
EventViewerWidget.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright (C) 2008 Boris Iven, Max Hermann
4  *
5  * This file is part of the "CEDRIC Event Display" application.
6  *
7  *****************************************************************************/
8 
9 #ifndef EVENTVIEWERWIDGET_H
10 #define EVENTVIEWERWIDGET_H
11 
12 #include "EventCameraWidget.h"
13 #include "RulerWidget.h"
14 #include "MyCamera.h"
15 class PhastScene;
16 
17 #include <QFrame>
18 #include <QColor>
19 
20 #include <osg/ref_ptr>
21 #include <osg/Node>
22 #include <osg/BoundingBox>
23 #include <osg/MatrixTransform>
24 #include <osg/Vec3>
25 
26 #include <iostream>
27 
51 class EventViewerWidget : public QFrame
52 {
53  Q_OBJECT
54 
55 public:
60 
61  EventViewerWidget( QWidget* parent=0 );
62  virtual ~EventViewerWidget() {}
63 
65  virtual QSize minimumSizeHint() const { return QSize( 200, 200 ); }
66 
68  void setScenegraph( osg::Node* node );
69 
71  virtual void setPhastScene( PhastScene* scene );
72 
74  int getViewMode() const { return m_viewMode; }
76  double getProjectionAlpha() const { return m_planarAlpha; }
77 
79  MyCameraWidget* getMyCameraWidget() { return static_cast<MyCameraWidget*>(cameraWidget); }
81  MyCamera* getMyCamera() { return cameraWidget->getMyCamera(); }
82 
84  bool isContinuousUpdateForced() const { return cameraWidget->isContinuousUpdateForced(); }
85 
86  bool isLinked() const { return m_linked; }
87  void setLinked( bool l ) { m_linked = l; if(!l) cameraWidget->getMyCamera()->unlinkAll(); }
88  void linkTo( EventViewerWidget* viewer ) { viewer->getMyCamera()->link( getMyCamera() ); }
89  void unlinkFrom( EventViewerWidget* viewer ) { viewer->getMyCamera()->unlink( getMyCamera() ); }
90 
91 signals:
93  void positionChanged( float x, float y, float z );
94 
96 
97 public slots:
99  void setViewMode( int viewMode ); // { cameraWidget->setProjection(viewMode); cameraWidget->triggerRedraw(); }
101  void setViewHome( int perspective );
102 
106  void viewTop() { setViewHome( TOP_VIEW ); }
109 
111  void setHomePosition( osg::Vec3 center ) { m_homePosition = center; m_autoHome = false; }
113  void enableAutoHomePosition() { m_autoHome = true; }
114 
115  void home();
116 
118  void adjustDistance();
120  void adjustCenter();
121 
123  void fitBoundingBox() { if( m_bbox.valid() ) cameraWidget->getMyCamera()->zoom( m_bbox ); }
124 
126  void setRulerVisible( bool enable );
128  bool isRulerVisible() const;
129 
131  void forceContinuousUpdate( bool force ) { cameraWidget->forceContinuousUpdate( force ); }
133  void triggerRedraw() { cameraWidget->triggerRedraw(); }
134 
136  void changeProjectionAlpha( double alpha );
137 
138 protected:
139  void getRulerProjection( osg::Vec3& projEast, osg::Vec3& projUp );
140 
141  virtual void enterEvent( QEvent* /*event*/ )
142  {
143  rulerHWidget->setCurrentMarkerEnabled( true );
144  rulerVWidget->setCurrentMarkerEnabled( true );
145  }
146 
147  virtual void leaveEvent( QEvent* /*event*/ )
148  {
149  rulerHWidget->setCurrentMarkerEnabled( false );
150  rulerVWidget->setCurrentMarkerEnabled( false );
151  }
152 
153 protected slots:
154  void updateRuler();
155  void setPosition( float x, float y, float z );
156  void gotFocus( bool b )
157  {
158  //~ std::cout << "EventViewerWidget " << (b?"got":"lost") << " focus" << std::endl;
159  setFrameColor( b ? activeFrameColor : inactiveFrameColor );
160  emit activeViewerChanged(this);
161  }
162 
163 private:
164  EventCameraWidget* cameraWidget;
165 
166  RulerWidget* rulerVWidget;
167  RulerWidget* rulerHWidget;
168  QWidget* cornerWidget;
169  bool m_rulerProjectToPrincipalAxis;
170 
171  osg::BoundingBox m_bbox;
172 
173  QColor inactiveFrameColor;
174  QColor activeFrameColor;
175  void setFrameColor( QColor color )
176  {
177  QPalette pal( palette() );
178  pal.setColor( QPalette::WindowText, color );
179  setPalette( pal );
180  }
181 
182  bool m_linked;
183  int m_viewMode;
184  bool m_planarActive;
185  double m_planarAlpha;
186 
187  bool m_autoHome;
188  osg::Vec3 m_homePosition;
189 
190  osg::ref_ptr<osg::MatrixTransform> _root;
191 };
192 
193 #endif
virtual void enterEvent(QEvent *)
Definition: EventViewerWidget.h:141
void forceContinuousUpdate(bool force)
Pass through to OsgViewerWidget member m_viewerWidget.
Definition: EventViewerWidget.h:131
void setHomePosition(osg::Vec3 center)
Specify home position by hand (to disable call enableAutoHomePosition())
Definition: EventViewerWidget.h:111
Base class for a cedric "Viewer" i.e. a manipulable camera onto a scenegraph.
Definition: EventViewerWidget.h:51
Change ROTATE mouse mode of MyCameraWidget.
Definition: EventCameraWidget.h:22
MyCameraWidget * getMyCameraWidget()
Access contained MyCameraWidget (usefull for making connections)
Definition: EventViewerWidget.h:79
void zoom(int x0, int y0, int x1, int y1)
Definition: MyCamera.cpp:277
void adjustCenter()
Reset center of view to origin (0,0,0)
Definition: EventViewerWidget.cpp:342
Definition: EventViewerWidget.h:57
bool isLinked() const
Definition: EventViewerWidget.h:86
void unlinkFrom(EventViewerWidget *viewer)
Definition: EventViewerWidget.h:89
Manage modelview and projection, allows switching between ORTHOGRAPHIC and PERSPECTIVE projection...
Definition: MyCamera.h:44
Definition: EventViewerWidget.h:59
Definition: EventViewerWidget.h:59
void adjustDistance()
Compute and set distance for which camera fits bounding box.
Definition: EventViewerWidget.cpp:359
void setPosition(float x, float y, float z)
Definition: EventViewerWidget.cpp:243
bool isContinuousUpdateForced() const
Pass through from OsgViewerWidget member m_viewerWidget.
Definition: EventViewerWidget.h:84
void viewSide()
Definition: EventViewerWidget.h:105
void setRulerVisible(bool enable)
Set visibility of rulers.
Definition: EventViewerWidget.cpp:165
void setLinked(bool l)
Definition: EventViewerWidget.h:87
void triggerRedraw()
Trigger a redraw in 1/60 sec.
Definition: OsgWidget.cpp:203
void unlinkAll()
Definition: MyCamera.h:214
void fitBoundingBox()
DOESN'T WORK CORRECTLY, SEE MyCamera.
Definition: EventViewerWidget.h:123
ViewModes
Provided for convenience, should match with MyCamera::Projection)
Definition: EventViewerWidget.h:57
void home()
Definition: EventViewerWidget.cpp:321
Simple ruler widget.
Definition: RulerWidget.h:23
MyCamera * getMyCamera()
Provided for convenience to get MyCamera of MyCameraWidget member.
Definition: EventViewerWidget.h:81
void setViewHome(int perspective)
Set a default camera without changing projection.
Definition: EventViewerWidget.cpp:261
void setViewMode(int viewMode)
Set projection mode.
Definition: EventViewerWidget.cpp:118
double getProjectionAlpha() const
Rotation angle in "Planar" view mode.
Definition: EventViewerWidget.h:76
virtual QSize minimumSizeHint() const
Force a minimum size.
Definition: EventViewerWidget.h:65
EventViewerWidget(QWidget *parent=0)
Definition: EventViewerWidget.cpp:21
void linkTo(EventViewerWidget *viewer)
Definition: EventViewerWidget.h:88
virtual void setPhastScene(PhastScene *scene)
Set scenegraph via PhastScene.
Definition: EventViewerWidget.cpp:113
Definition: EventViewerWidget.h:57
void setCurrentMarkerEnabled(bool enable)
Definition: RulerWidget.h:89
void unlink(MyCamera *other)
Definition: MyCamera.cpp:234
virtual void leaveEvent(QEvent *)
Definition: EventViewerWidget.h:147
void forceContinuousUpdate(bool force)
Forces continous redraw (i.e. continuous redraw cannot be disabled via toggleContinousUpdate(false)) ...
Definition: OsgWidget.h:132
Definition: EventViewerWidget.h:59
void changeProjectionAlpha(double alpha)
Change projection plane in "Planar" view mode.
Definition: EventViewerWidget.cpp:154
void gotFocus(bool b)
Definition: EventViewerWidget.h:156
void viewFront()
Definition: EventViewerWidget.h:107
Scenegraph holding static and dynamic Phast geometry.
Definition: PhastScene.h:32
bool isContinuousUpdateForced() const
Returns true if continous update was forced (i.e. continuous redraw cannot be disable via toggleConti...
Definition: OsgWidget.h:182
Definition: EventViewerWidget.h:57
Viewer based on MyCamera providing Trackball rotation, Rubberband zoom and Picking.
Definition: MyCameraWidget.h:27
void enableAutoHomePosition()
Compute home position according to bounding box (and if bounding box is not valid set (0...
Definition: EventViewerWidget.h:113
void activeViewerChanged(EventViewerWidget *)
ViewHomePerspectives
Supplied default camera perspectives.
Definition: EventViewerWidget.h:59
void viewTop()
Definition: EventViewerWidget.h:106
int getViewMode() const
Provided for convenience, returns current projection mode.
Definition: EventViewerWidget.h:74
void link(MyCamera *other)
Definition: MyCamera.cpp:223
virtual ~EventViewerWidget()
Definition: EventViewerWidget.h:62
void triggerRedraw()
Pass through to OsgViewerWidget member m_viewerWidget.
Definition: EventViewerWidget.h:133
void setScenegraph(osg::Node *node)
Set scenegraph containing all event geometry (e.g. tracks and setup)
Definition: EventViewerWidget.cpp:73
void updateRuler()
Definition: EventViewerWidget.cpp:221
bool isRulerVisible() const
Get visibility of rulers.
Definition: EventViewerWidget.cpp:172
MyCamera * getMyCamera()
Access to MyCamera class (e.g. for switching between orthographic and perspective projection) ...
Definition: MyCameraWidget.h:52
void getRulerProjection(osg::Vec3 &projEast, osg::Vec3 &projUp)
Definition: EventViewerWidget.cpp:202
void positionChanged(float x, float y, float z)
Unprojected mouse position (forwarded from MyCameraWidget)