view.hpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef QT_INPUT_VIEW_HPP
  2. #define QT_INPUT_VIEW_HPP
  3. #include <QPainter>
  4. #include <QOpenGLWidget>
  5. #include <QMouseEvent>
  6. #include <GL/glut.h>
  7. #include "math/point.hpp"
  8. #include "math/spline.hpp"
  9. #include "qt/input/geometry.hpp"
  10. #include "qt/input/initial_state.hpp"
  11. #include "qt/input/data.hpp"
  12. using namespace std;
  13. class QtInputView: public QOpenGLWidget{
  14. Q_OBJECT
  15. public:
  16. enum Status{Geom,Init,Sources,Other};
  17. private:
  18. Status status;
  19. QtInputData* data;
  20. static constexpr int const pointSize=6;
  21. static constexpr double const min_d=0.01;
  22. static constexpr size_t const p_none=3*QtInputData::np+QtInputData::np_ov;
  23. size_t selected;
  24. double time;
  25. size_t findPoint(int x,int y);
  26. void drawSpline(Spline& S);
  27. void drawOverland();
  28. void moveSelected(double x,double y);
  29. public:
  30. QtInputView(QtInputData* data);
  31. ~QtInputView();
  32. void paintGL() override;
  33. void mousePressEvent(QMouseEvent* event);
  34. void mouseMoveEvent(QMouseEvent* event);
  35. void mouseReleaseEvent(QMouseEvent* event);
  36. void setStatus(Status status);
  37. void initializeGL();
  38. void resizeGL(int x,int h);
  39. void drawTriangle(size_t ix1,size_t iz1,size_t ix2,size_t iz2,size_t ix3,size_t iz3);
  40. void setColor(size_t ix,size_t iz);
  41. double getP(size_t ix,size_t iz);
  42. void paintTank(Tank*);
  43. void paintPump(Pump*);
  44. void paintCloud(Cloud*);
  45. public slots:
  46. //void updateGeometry();
  47. //void updateInitialState(double factor);
  48. //void updateSource();
  49. void setTime(int v);
  50. signals:
  51. void geometryChanged();
  52. void timeChanged();
  53. };
  54. inline void
  55. QtInputView::setStatus(Status _status){
  56. status=_status;
  57. }
  58. inline double
  59. QtInputView::getP(size_t ix,size_t iz){
  60. return data->initial_state->Pinit[ix][iz];
  61. }
  62. inline
  63. QtInputView::~QtInputView(){
  64. }
  65. inline void
  66. QtInputView::setTime(int v){
  67. time=double(v)/99;
  68. emit timeChanged();
  69. }
  70. #endif