/**************************************************************************/ /* Copyright 2009 Tim Day */ /* */ /* This file is part of Fracplanet */ /* */ /* Fracplanet is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* Fracplanet 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 General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with Fracplanet. If not, see . */ /**************************************************************************/ /*! \file \brief Interface for class TriangleMeshViewer. */ #ifndef _triangle_mesh_viewer_h_ #define _triangle_mesh_viewer_h_ #include "common.h" #include "parameters_render.h" #include "qtcommon.h" #include "random.h" #include "triangle_mesh.h" #include "triangle_mesh_viewer_display.h" //! A class to display a triangle mesh. /*! Wraps a TriangleMeshViewerDisplay with some controls. \todo Add better controls. */ class TriangleMeshViewer : public QWidget { private: Q_OBJECT; public: //! Constructor. TriangleMeshViewer(QWidget* parent,const ParametersRender* param,const std::vector& m,bool verbose); //! Destructor ~TriangleMeshViewer(); //! Used to set message in statusbar void notify(const std::string&); //! Sets the TriangleMesh to be displayed. void set_mesh(const std::vector& m); public slots: void fly(); void unfly(); void set_tilt(int v); void set_spinrate(int v); private: //! Control logging const bool _verbose; //! Pointer to the rendering parameters. const ParametersRender* parameters; //! The actual rendering area. TriangleMeshViewerDisplay* display; //! Real time for computing how much to advance animation boost::scoped_ptr clock; //! Record time last tick int last_t; //! Label and box around the elevation slider. QGroupBox* tilt_box; //! Slider controlling tilt QSlider* tilt_slider; //! Container for fly and reset buttons QWidget* button_box; //! Label and box arond the spin-rate slider. QGroupBox* spinrate_box; //! Spin rate slider. QSlider* spinrate_slider; //! Display fly velocity, render info QStatusBar* statusbar; //! Last notified message std::string notify_message; //@{ //! Parameter of camera position. XYZ camera_position; XYZ camera_forward; XYZ camera_up; float camera_velocity; float camera_yaw_rate; float camera_pitch_rate; float camera_roll_rate; //@} //@{ //! Parameters of object float object_tilt; float object_rotation; float object_spinrate; //@} //@{ //! Key state bool keypressed_arrow_left; bool keypressed_arrow_right; bool keypressed_arrow_up; bool keypressed_arrow_down; bool keypressed_mouse_left; bool keypressed_mouse_right; //@} //! Whether in fly mode bool fly_mode; //! Interested in some key presses void keyPressEvent(QKeyEvent* e); //! Interested in some key state void keyReleaseEvent(QKeyEvent* e); //! Interested in mouse clicks for steering void mousePressEvent(QMouseEvent* e); //! Interested in some button state void mouseReleaseEvent(QMouseEvent* e); //! Interested in mouse position for steering void mouseMoveEvent(QMouseEvent* e); //! Interested in wheel for speed void wheelEvent(QWheelEvent* e); private slots: void tick(); void reset(); }; #endif