Developer Documentation

QtExaminerViewer.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41
42
43
44
45
46 //=============================================================================
47 //
48 // CLASS QtExaminerViewer
49 //
50 //=============================================================================
51
52 #ifndef ACG_QTEXAMINERVIEWER_HH
53 #define ACG_QTEXAMINERVIEWER_HH
54
55
56 //== INCLUDES =================================================================
57
58
59 #include "QtBaseViewer.hh"
60
61 #include <QTime>
62 #include <QMouseEvent>
63 #include <QWheelEvent>
64 #include <QKeyEvent>
65
66
67 //== NAMESPACES ===============================================================
68
69
70 namespace ACG {
71 namespace QtWidgets {
72
73
74 //== FORWARDDECLARATIONS ======================================================
75
76
77 class QWheel;
78 class QtQGLWidget_Internal;
79 class QtSceneGraphWidget;
80
81
82 //== CLASS DEFINITION =========================================================
83
84
91 class ACGDLLEXPORT QtExaminerViewer : public QtBaseViewer
92 {
93 Q_OBJECT
94
95 public:
96
97
99 QtExaminerViewer( QWidget* _parent=0,
100 const char* _name=0,
101 QStatusBar *_statusBar=0,
102 const QGLFormat* _format=0,
103 const QtBaseViewer* _share=0,
104 Options _options=DefaultOptions );
105
106 // Destructor.
107 virtual ~QtExaminerViewer() {}
108
109
111 void allowRotation( bool _mode ) { allowRotation_ = _mode; };
112
113
115 public:
116 double wheelZoomFactor();
117 double wheelZoomFactorShift();
118 void setWheelZoomFactor(double _factor);
119 void setWheelZoomFactorShift(double _factor);
120 private:
121 double wZoomFactor_;
122 double wZoomFactorShift_;
123
124
125 private slots:
126
127 void slotAnimation();
128
129
130 protected:
131
133 virtual bool viewKeyPressEvent(QKeyEvent* /* _event */ ) override { return false; }
135 virtual void viewWheelEvent(QWheelEvent* _event) override;
137 virtual void viewMouseEvent(QMouseEvent* _event) override;
139 virtual void lightMouseEvent(QMouseEvent* _event) override;
140
141
142 protected:
143
144 // mouse interaction
145 QPoint lastPoint2D_;
146
147
148 private:
149
151 bool mapToSphere(const QPoint& _p, Vec3d& _result) const;
152
153
154 // mouse interaction
155 Vec3d lastPoint3D_;
156 bool lastPoint_hitSphere_;
157 bool allowRotation_;
158
159
160 // animation stuff
161 Vec3d lastRotationAxis_;
162 double lastRotationAngle_;
163 QTime lastMoveTime_;
164 QTimer* timer_;
165 };
166
167
168 //=============================================================================
169 } // namespace QtWidgets
170 } // namespace ACG
171 //=============================================================================
172 #endif // ACG_QTEXAMINERWIDGET_HH defined
173 //=============================================================================
174
ACG::QtWidgets::QtExaminerViewer::allowRotation
void allowRotation(bool _mode)
Lock scene rotation.
Definition: QtExaminerViewer.hh:111
QWheel
Inventor-like wheel widget.
ACG
Namespace providing different geometric functions concerning angles.
Definition: BaseObjectData.hh:68
OpenMesh::VectorT
Definition: Vector11T.hh:83
ACG::QtWidgets::QtBaseViewer::Options
Options
Definition: QtBaseViewer.hh:139
ACG::QtWidgets::QtBaseViewer
Definition: QtBaseViewer.hh:129
ACG::QtWidgets::QtExaminerViewer
Definition: QtExaminerViewer.hh:91
ACG::QtWidgets::QtExaminerViewer::viewKeyPressEvent
virtual bool viewKeyPressEvent(QKeyEvent *) override
handle new key events
Definition: QtExaminerViewer.hh:133