#ifndef _PAYSAGES_QT_WIDGETHEIGHTMAP_H_ #define _PAYSAGES_QT_WIDGETHEIGHTMAP_H_ #include #include #include "../lib_paysages/tools/euclid.h" #include "../lib_paysages/renderer.h" #include "../lib_paysages/terrain/public.h" typedef struct { Vector3 point; Vector3 normal; int painted; } _VertexInfo; typedef enum { HEIGHTMAP_BRUSH_RAISE = 0, HEIGHTMAP_BRUSH_SMOOTH = 1 } HeightMapBrushMode; class WidgetHeightMap : public QGLWidget { Q_OBJECT public: WidgetHeightMap(QWidget* parent, TerrainDefinition* terrain); ~WidgetHeightMap(); void setHorizontalViewAngle(double angle_h); void setVerticalViewAngle(double angle_v); void setBrushMode(HeightMapBrushMode mode); void setBrushSize(double size); void setBrushSmoothing(double smoothing); void setBrushStrength(double smoothing); QString getMemoryStats(); public slots: void revert(); signals: void heightmapChanged(); protected: void mousePressEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event); void timerEvent(QTimerEvent* event); void initializeGL(); void resizeGL(int w, int h); void paintGL(); private: void updateVertexInfo(); private: TerrainDefinition* _terrain; Renderer* _renderer; _VertexInfo* _vertices; bool _dirty; qint64 _memory_stats; double _average_frame_time; int _last_brush_action; int _last_mouse_x; int _last_mouse_y; QDateTime _last_time; bool _mouse_moved; int _position_x; int _position_z; double _angle_h; double _angle_v; double _brush_x; double _brush_z; HeightMapBrushMode _brush_mode; double _brush_size; double _brush_smoothing; double _brush_strength; NoiseGenerator* _brush_noise; }; #endif