/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (C) 2001-2010 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 . *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
//=============================================================================
//
// Property storage Class for glWidgets
//
//=============================================================================
/**
* \file ViewerProperties.hh
* This file contains a class for managing all viewer settings
*/
//
#ifndef VIEWERPROPERTIES_HH
#define VIEWERPROPERTIES_HH
#include
#include
#include
#include
#include
#include
#include
// forward declaration
class ViewObjectMarker;
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
};
class DLLEXPORT ViewerProperties : public QObject {
Q_OBJECT
public:
ViewerProperties();
~ViewerProperties();
//===========================================================================
/** @name Draw Mode States
* @{ */
//===========================================================================
public:
/// set draw mode (No test if this mode is available!)
void drawMode(ACG::SceneGraph::DrawModes::DrawMode _mode) { currentDrawMode_ = _mode; emit updated(); };
/// get current draw mode
ACG::SceneGraph::DrawModes::DrawMode drawMode() { return currentDrawMode_; };
private:
ACG::SceneGraph::DrawModes::DrawMode currentDrawMode_;
/** @} */
//===========================================================================
/** @name Snapshot settings
* @{ */
//===========================================================================
public slots:
/** Set the base file name and reset the counter for snapshots.
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);
/** Set the file type for snapshots. defaults to png"
*/
void snapshotFileType(const QString& _type);
/** Get the file type for the current snapshot */
QString snapshotFileType() { return snapshotFileType_; };
/** 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_++; };
private:
QString snapshotName_;
QString snapshotFileType_;
int snapshotCounter_;
/** @} */
//===========================================================================
//===========================================================================
/** @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_;
/** @} */
//===========================================================================
//===========================================================================
/** @name View Control
* @{ */
//===========================================================================
//===========================================================================
/** @} */
//===========================================================================
//===========================================================================
/** @name Rendering Settings
* @{ */
//===========================================================================
//===========================================================================
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_;
//===========================================================================
public slots:
/// Get current background color
ACG::Vec4f backgroundColor() { return backgroundColor_; }
/// 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(); };
/** Set background color.
*/
void backgroundColor( ACG::Vec4f _color ) { backgroundColor_ = _color; emit updated(); };
/** 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(); };
private:
ACG::Vec4f backgroundColor_;
//===========================================================================
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_;
//===========================================================================
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_;
//===========================================================================
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
void twoSidedLighting(bool _state ) { twoSidedLighting_ = _state; emit updated(); }
/// is 2-sided lighing enabled?
bool twoSidedLighting() { return twoSidedLighting_; };
private:
bool twoSidedLighting_;
//===========================================================================
public slots:
/// set multisampling on/off
void multisampling(bool _state ) { multisampling_ = _state; emit updated(); }
/// is multisampling enabled?
bool multisampling() { return multisampling_; };
private:
bool multisampling_;
//===========================================================================
public slots:
/// set mipmapping on/off
void mipmapping(bool _state ) { glState_->allow_mipmapping(_state); mipmapping_ = _state; emit updated(); }
/// is mipmapping enabled?
bool mipmapping() { return mipmapping_; };
private:
bool mipmapping_;
//===========================================================================
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_;
//===========================================================================
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_;
//===========================================================================
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_;
//===========================================================================
public:
int currentViewingDirection();
void currentViewingDirection(int _dir);
private:
int currentViewingDirection_;
//===========================================================================
public:
bool rotationLocked();
void rotationLocked(bool _lock);
private:
bool rotationLocked_;
//===========================================================================
/** @} */
//===========================================================================
//===========================================================================
/** @name Projection controls and information
* @{ */
//===========================================================================
//===========================================================================
public:
/// Get width of the gl scene in orthogonal projection mode (defaults to 2.0)
double orthoWidth() { return orthoWidth_; };
/// Set the width of the gl scene in orthogonal projection mode
void orthoWidth(double _width){ orthoWidth_ = _width; emit updated(); };
/// Return distance to near Plane
double nearPlane(){ return nearPlane_;};
/// set new near Plane distance
void nearPlane(double _near){nearPlane_ = _near; emit updated(); };
/// Return distance to far Plane
double farPlane(){ return farPlane_;};
/// set new near Plane distance
void farPlane(double _far){farPlane_ = _far; emit updated(); };
private:
/// Width of the gl scene in orthogonal mode ( defaults to 2.0 )
double orthoWidth_;
/// Distance to near Plane
double nearPlane_;
///distance to far Plane
double farPlane_;
/** @} */
signals:
/** \brief This signal is emitted when the configuration has been changed
*/
void updated();
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();
/// set active action mode
void actionMode(const Viewer::ActionMode _am);
};
}
#endif //VIEWERPROPERTIES_HH