//=============================================================================
//
// OpenFlipper
// Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
// www.openflipper.org
//
//-----------------------------------------------------------------------------
//
// License
//
// 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.
//
// 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 Lesser General Public License
// along with OpenFlipper. If not, see .
//
//-----------------------------------------------------------------------------
//
// $Revision$
// $Author$
// $Date$
//
//=============================================================================
#ifndef ViewControlPlugin_HH
#define ViewControlPlugin_HH
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "shaderWidget.hh"
struct ShaderInfo {
QString name;
QString description;
QString details;
QString version;
QString example;
QString directory;
QString vertexShader;
QString fragmentShader;
bool hasUniforms;
QStringList uniforms;
QStringList uniformTypes;
QStringList uniformsDefault;
QStringList uniformsMax;
QStringList uniformsMin;
};
class ViewControlPlugin : public QObject, BaseInterface , PickingInterface, LoggingInterface, ContextMenuInterface
{
Q_OBJECT
Q_INTERFACES(BaseInterface)
Q_INTERFACES(PickingInterface)
Q_INTERFACES(LoggingInterface)
Q_INTERFACES(ContextMenuInterface)
signals:
void updateView();
void updatedObject(int);
void addHiddenPickMode( const std::string _mode );
void log(Logtype _type, QString _message);
void log(QString _message);
void addContextMenu(QMenu* _menu ,DataType _objectType , ContextMenuType _type );
void setSlotDescription(QString _slotName, QString _slotDescription,
QStringList _parameters, QStringList _descriptions);
private slots:
void pluginsInitialized();
void contextMenuTriggered(QAction* _action);
void slotUpdateContextMenu( int _objectId );
public :
~ViewControlPlugin() {};
QString name() { return (QString("ViewControl")); };
QString description( ) { return (QString("Control the current or global visualization settings")); };
private:
QMenu* viewControlMenu_;
/** Last object id for context menu. Is -1 if no object was selected
*/
int lastObjectId_;
/** Actions in the draw Context Menu
*/
std::vector< QAction * > drawMenuActions_;
/** Active draw Modes for the last clicked object and its children
*/
unsigned int activeDrawModes_;
/** Available draw Modes for the last clicked object and its children
*/
unsigned int availDrawModes_;
ShaderWidget* shaderWidget_;
/** List of available shaders
*/
std::vector shaderList_;
private slots:
QString version() { return QString("1.0"); };
// This slot is called when a custom draw mode is selected from the context menu
void slotDrawModeSelected( QAction * _action );
// This slot is called when the user clicks on an item in the shaderWidget
void slotShaderClicked( QListWidgetItem * _item );
// This slot is called when the user doubleclicks on an item in the shaderWidget
void slotShaderDoubleClicked( QListWidgetItem * _item );
// slot for setting a shader from the widget
void slotSetShader();
// slot is called when the data of the uniforms-table changes
void itemChanged(QTableWidgetItem* item);
private:
// Update the list of available shaders
void updateShaderList();
// initialize the shader Widget
void initShaderWidget();
// Announce local slots
void setDescriptions();
public slots:
/// For meshes returns if the selection for this object is visible
bool selectionVisible( int _id );
/// Allows to enable/disable visualization of the objects selection for meshes
void showSelection( int _id , bool _state );
/// For meshes returns if the modeling areas for this object is visible
bool modelingAreasVisible( int _id );
/// Allows to enable/disable visualization of the objects modeling area for meshes
void showModelingAreas( int _id , bool _state );
/** Sets a shader for the object and the given drawMode( can be a combination of draw modes )
* @param _id Object Id
* @param _drawMode ; seperated list of drawmodes used by the shader
* @param _vertexShader File with the vertex shader code
* @param _fragmentShader File with the fragment shader code
*/
void setShader(int _id, QString _drawMode, QString _vertexShader, QString _fragmentShader );
/** Sets a Shader from the Shader directory of OpenFlipper ( Name of the one given inside the ini file )
*
*/
void setShader(int _id, QString _drawMode, QString _name );
/// Set the viewing direction
void setViewingDirection( Vector _direction, Vector _upvector , int _viewer = PluginFunctions::ALL_VIEWERS );
/// Rotate Scene
void rotate( Vector _axis, double _angle, Vector _center , int _viewer = PluginFunctions::ALL_VIEWERS );
/// translate Scene
void translate( Vector _vec , int _viewer = PluginFunctions::ALL_VIEWERS );
/// Set the draw mode for a viewer
void setDrawMode(QString _mode, int _viewer = PluginFunctions::ALL_VIEWERS );
/// Get a viewers viewing direction
Vector viewingDirection( int _viewer = PluginFunctions::ACTIVE_VIEWER );
/// get a viewers up vector
Vector upVector( int _viewer = PluginFunctions::ACTIVE_VIEWER );
/// get a viewers eye Position
Vector eyePosition( int _viewer = PluginFunctions::ACTIVE_VIEWER );
/// Get the scene center
Vector sceneCenter( int _viewer = PluginFunctions::ACTIVE_VIEWER );
/// Set the scene center
void setSceneCenter( Vector _center, int _viewer = PluginFunctions::ALL_VIEWERS );
/// Enable or disable Backface culling
void enableBackfaceCulling( bool _state , int _viewer = PluginFunctions::ALL_VIEWERS );
void setEyePosition(Vector _eye);
};
#endif //ViewControlPlugin_HH