ViewerProperties.hh 14.3 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
 *      Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen      *
 *                           www.openflipper.org                             *
 *                                                                           *
 *---------------------------------------------------------------------------*
 *  This file is part of OpenFlipper.                                        *
 *                                                                           *
 *  OpenFlipper is free software: you can redistribute it and/or modify      *
 *  it under the terms of the GNU Lesser General Public License as           *
 *  published by the Free Software Foundation, either version 3 of           *
 *  the License, or (at your option) any later version with the              *
 *  following exceptions:                                                    *
 *                                                                           *
 *  If other files instantiate templates or use macros                       *
 *  or inline functions from this file, or you compile this file and         *
 *  link it with other files to produce an executable, this file does        *
 *  not by itself cause the resulting executable to be covered by the        *
 *  GNU Lesser General Public License. This exception does not however       *
 *  invalidate any other reasons why the executable file might be            *
 *  covered by the GNU Lesser General Public License.                        *
 *                                                                           *
 *  OpenFlipper is distributed in the hope that it will be useful,           *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
 *  GNU Lesser General Public License for more details.                      *
 *                                                                           *
 *  You should have received a copy of the GNU LesserGeneral Public          *
 *  License along with OpenFlipper. If not,                                  *
 *  see <http://www.gnu.org/licenses/>.                                      *
 *                                                                           *
\*===========================================================================*/

/*===========================================================================*\
 *                                                                           *
 *   $Revision$                                                         *
 *   $Author$                                                      *
 *   $Date$                   *
 *                                                                           *
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60




//=============================================================================
//
//  Property storage Class for glWidgets
//
//=============================================================================

/**
 * \file ViewerProperties.hh
 * This file contains a class for managing all viewer settings
 */

//
#ifndef VIEWERPROPERTIES_HH
#define VIEWERPROPERTIES_HH

Jan Möbius's avatar
Jan Möbius committed
61

Jan Möbius's avatar
 
Jan Möbius committed
62
#include <QObject>
Dirk Wilden's avatar
Dirk Wilden committed
63
#include <QColor>
Jan Möbius's avatar
Jan Möbius committed
64
#include <OpenFlipper/common/GlobalDefines.hh>
65
#include <ACG/Math/VectorT.hh>
66
#include <ACG/Scenegraph/SceneGraph.hh>
67
#include <ACG/GL/GLState.hh>
Jan Möbius's avatar
 
Jan Möbius committed
68

Jan Möbius's avatar
Jan Möbius committed
69
70
71
// forward declaration
class ViewObjectMarker;

Jan Möbius's avatar
 
Jan Möbius committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
namespace Viewer {

  /// How to react on mouse events?
  enum ActionMode {
    // examine geometry, get transformations from mouse events
    ExamineMode,
    /** Picking mode. Actually no pick()ing is performed (!) but events are
        forwarded to the application via signalMouseEvent().
      */
    PickingMode,
    // same as picking, but emit signalMouseEventIdentify()
    QuestionMode,
    // Ligh rotation mode
    LightMode
  };

Jan Möbius's avatar
Jan Möbius committed
88
  class DLLEXPORT ViewerProperties : public QObject {
Jan Möbius's avatar
 
Jan Möbius committed
89
90
91
92
93
94

    Q_OBJECT

    public:
      ViewerProperties();
      ~ViewerProperties();
95
96
97
98
99
      
    //===========================================================================
    /** @name Draw Mode States
     * @{ */
    //===========================================================================      
Jan Möbius's avatar
 
Jan Möbius committed
100

101
102
103
104
105
106
107
108
109
110
    public:
      /// set draw mode (No test if this mode is available!)
      void drawMode(unsigned int _mode) { currentDrawMode_ = _mode; emit updated(); };
      
      /// get current draw mode
      unsigned int drawMode() { return currentDrawMode_; };
      
    private:
      
      unsigned int currentDrawMode_;
Jan Möbius's avatar
 
Jan Möbius committed
111

112
113
    /** @} */
      
Jan Möbius's avatar
 
Jan Möbius committed
114
    //===========================================================================
115
    /** @name Snapshot settings
Jan Möbius's avatar
 
Jan Möbius committed
116
117
118
    * @{ */
    //===========================================================================

119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
    public slots:
      /** Set the base file name and reset the counter for snapshots.

        The image file format is determined from the file name extension,
        the \a QImageIO formats are supported (e.g. ".ppm" [raw], ".png").

        The current snapshot counter will be added in front of the last "."
        in the filename.

        \a Note: Calling snapshotBaseFileName() will always reset the snapshot
        counter to 0.
      */
      void snapshotBaseFileName(const QString& _fname);

      /** Get the name for the current snapshot */
      QString snapshotName() { return snapshotName_; };

      /** Get the counter for the current snapshot and increases the counter */
      int snapshotCounter() { return snapshotCounter_++; };
Jan Möbius's avatar
 
Jan Möbius committed
138

139
140
141
    private:
      QString                      snapshotName_;
      int                          snapshotCounter_;
Jan Möbius's avatar
 
Jan Möbius committed
142
143
144

    /** @} */

145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
    //===========================================================================
    //===========================================================================
    /** @name Mouse Wheel Settings
    * @{ */
    //===========================================================================
    //===========================================================================


    public slots:
      /// Zoom factor when using mousewheel
      double wheelZoomFactor() { return wZoomFactor_; };

      /// Zoom factor when using mousewheel and pressing shift
      double wheelZoomFactorShift() { return wZoomFactorShift_; };

      /// Set zoom factor when using mousewheel
      void wheelZoomFactor(double _factor) { wZoomFactor_ = _factor; };

      /// Set zoom factor when using mousewheel and pressing shift
      void wheelZoomFactorShift(double _factor) { wZoomFactorShift_ = _factor; }; ;

    private:
      double wZoomFactor_;

      double wZoomFactorShift_;

    /** @} */

173
174
175
176
177
178
179
180
181
    //===========================================================================
    //===========================================================================
    /** @name View Control
    * @{ */
    //===========================================================================
    //===========================================================================

    /** @} */

182
    //===========================================================================
183
184
185
186
    //===========================================================================
    /** @name Rendering Settings
    * @{ */
    //===========================================================================
187
188
    //===========================================================================

189
190
191
192
193
194
195
196
197
198
199
200
201
    public slots:
      /** true if counter clockwise orientation should be used to define front facing orientation.
       */
      bool isCCWFront(){ return CCWFront_; };

      /// Set counter clockwise orientation as front
      void ccwFront() { CCWFront_ = true; emit updated(); };
      /// Set clockwise orientation as front
      void cwFront() { CCWFront_ = false; emit updated(); };

    private:
      bool CCWFront_;

202
203
204

    //===========================================================================

205
206
207
208
209
    public slots:

      /// Get current background color
      ACG::Vec4f backgroundColor() { return backgroundColor_; }

Dirk Wilden's avatar
Dirk Wilden committed
210
211
212
213
214
215
216
217
      /// Get current background color
      QRgb backgroundColorRgb(){ QColor c;
                                 c.setRedF(  backgroundColor_[0]);
                                 c.setGreenF(backgroundColor_[1]);
                                 c.setBlueF( backgroundColor_[2]);
                                 c.setAlphaF(backgroundColor_[3]);
                                 return c.rgba(); };

218
219
220
221
      /** Set background color.
      */
      void backgroundColor( ACG::Vec4f _color ) { backgroundColor_ = _color; emit updated(); };

Dirk Wilden's avatar
Dirk Wilden committed
222
223
224
225
226
227
228
229
230
      /** Set background color.
      */
      void backgroundColor( QRgb _color ) { QColor c(_color);
                                            backgroundColor_[0] = c.redF();
                                            backgroundColor_[1] = c.greenF();
                                            backgroundColor_[2] = c.blueF();
                                            backgroundColor_[3] = c.alphaF();
                                            emit updated(); };

231
232
233
    private:
      ACG::Vec4f backgroundColor_;

234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
    //===========================================================================

    public slots:

      /// Render picking or not
      bool renderPicking() { return renderPicking_; };

      /// Mode used for the picking renderer
      ACG::SceneGraph::PickTarget renderPickingMode() { return pickRendererMode_; };

      void renderPickin(bool _mode ) { renderPicking_ = _mode; emit updated(); };

      /** Use this function to switch the viewer to visualize picking.
      * When you set this function to true the renderer will render the picking
      * elements rather then the scene
      */
      void renderPicking(bool _renderPicking, ACG::SceneGraph::PickTarget _mode) {
        pickRendererMode_ = _mode ; renderPicking_ = _renderPicking; emit updated();
      }

    private:
      /** This variable controls if the scene is rendered in normal or in picking mode
      */
      bool renderPicking_;

      /** If rendering is in picking mode, this variable controls which picking targets
      * will be rendered. ( see renderPicking_ , renderPicking(bool _renderPicking, PickRendererMode _mode) ,
      * and ACG::SceneGraph::PickTarget
      */
      ACG::SceneGraph::PickTarget pickRendererMode_;

265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291

    //===========================================================================

    public slots:
      /** Lock update of display.
      If locked (isUpdateLocked()) then all calls to updateDisplayList()
      and updateGL() will have no effect! This is true until the display is
      unlockUpdate()'ed.
      */
      void lockUpdate()  { locked_++; };

      /// Unlock display locked by updateLock().
      void unLockUpdate(){
        locked_-- ;
        if ( locked_ <0 ) {
          std::cerr << "More unlocks then locks" << std::endl;
          locked_ = 0;
        }
      };

      /** Are updateDisplayList() and updateGL() locked?
      (c.f. lockUpdate()) */
      bool updateLocked() { return (locked_ != 0); };

    private:
      int locked_;

292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308

    //===========================================================================

    public slots:
      /// Get current state of backface culling
      bool backFaceCulling() { return backFaceCulling_; };

      /// Enable or disable backface culling
      void backFaceCulling(bool _state ) { backFaceCulling_ = _state; emit updated(); }

    private:
      bool backFaceCulling_;

    //===========================================================================

    public slots:
      /// set 2-sided lighting on/off
Dirk Wilden's avatar
Dirk Wilden committed
309
      void twoSidedLighting(bool _state ) { twoSidedLighting_ = _state; emit updated(); }
310
311
312
313
314
315

      /// is 2-sided lighing enabled?
      bool twoSidedLighting() { return twoSidedLighting_; };

    private:
      bool twoSidedLighting_;
316
317
318
319
320
321
322
323
324
325
326
327
      
    //===========================================================================

    public slots:
      /// set multisampling on/off
      void multisampling(bool _state ) { multisampling_ = _state; emit updated(); }

      /// is multisampling enabled?
      bool multisampling() { return multisampling_; };

    private:
      bool multisampling_;      
328
329
330
331
332
333
334
335
336
337
338
339
340

    //===========================================================================

    public slots:
      /// set 2-sided lighting on/off
      void animation(bool _state ) { animation_ = _state; emit updated(); }

      /// is 2-sided lighing enabled?
      bool animation() { return animation_; };

    private:
      bool animation_;

341

342
343
344
345
346
347
348
349
350
351
352
353
    //===========================================================================

    public:
      /// Get the glState of the Viewer
      ACG::GLState& glState() { return (*glState_); };

      void setglState(ACG::GLState* _glState) { glState_ = _glState; };

    private:
      /// Pointer to the glState of the Viewer
      ACG::GLState* glState_;

Jan Möbius's avatar
Jan Möbius committed
354
355
356
357
358
359
360
361
362
363
364
365
    //===========================================================================

    public slots:
      /// set object marker for viewer
      void objectMarker (ViewObjectMarker* _marker) { objectMarker_ = _marker; emit updated(); }

      /// current object marker
      ViewObjectMarker* objectMarker() { return objectMarker_; };

    private:
      ViewObjectMarker *objectMarker_;

366
367
368
369
370
371
372
373
374
    //===========================================================================

    public:
      int currentViewingDirection();

      void currentViewingDirection(int _dir);

    private:
      int currentViewingDirection_;
Jan Möbius's avatar
Jan Möbius committed
375
376

    //===========================================================================
377

378
    /** @} */
Jan Möbius's avatar
 
Jan Möbius committed
379
380
381
382
383
384

    signals:
      /** \brief This signal is emitted when the configuration has been changed
      */
      void updated();

385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
      void getPickMode(std::string& _mode );
      void setPickMode(const std::string  _mode );

      void getActionMode(Viewer::ActionMode& _am);
      void setActionMode(const Viewer::ActionMode  _am);

    public:

      /// get active pick mode
      std::string pickMode();

      /// set the pickMode
      void pickMode(const std::string _name);

      /// get the action mode
      Viewer::ActionMode actionMode();
401

402
403
      /// set active action mode
      void actionMode(const Viewer::ActionMode _am);
404

Jan Möbius's avatar
 
Jan Möbius committed
405
406
407
408
409
  };

}


410
411
#endif //VIEWERPROPERTIES_HH