se2ez
renderarea.h
Go to the documentation of this file.
1 /* Author: Constantinos Chamzas, Zachary Kingston */
2 
3 #ifndef SE2EZ_GUI_RENDERAREA_H
4 #define SE2EZ_GUI_RENDERAREA_H
5 
6 #include <mutex>
7 #include <set>
8 
9 #include <QWidget>
10 #include <QPainter>
11 #include <QColor>
12 #include <QCheckBox>
13 #include <QPaintEvent>
14 #include <QString>
15 
16 #include <Eigen/Core>
17 
19 #include <se2ez/core/collision.h>
20 
21 namespace Ui
22 {
23  class RenderArea;
24 }
25 
26 namespace se2ez
27 {
28  /** \cond IGNORE */
29  SE2EZ_CLASS_FORWARD(Robot)
30  SE2EZ_CLASS_FORWARD(State)
31  SE2EZ_CLASS_FORWARD(Frame)
32  SE2EZ_CLASS_FORWARD(Geometry)
33  /** \endcond */
34 
35  namespace gui
36  {
37  /** \cond IGNORE */
38  SE2EZ_CLASS_FORWARD(MainWindow)
39  /** \endcond */
40 
41  /** \cond IGNORE */
42  SE2EZ_CLASS_FORWARD(RenderArea)
43  /** \endcond */
44 
45  /** \brief The canvas widget.
46  * It contains all the drawing functions as well as all the general
47  * settings for drawing ( Origin, scale etc..)*/
48  class RenderArea : public QWidget
49  {
50  Q_OBJECT
51 
52  public:
55  class GeometryDrawer
56  {
57 
58  public:
59  GeometryDrawer(const RobotPtr &robot, const StatePtr &state);
60  virtual bool frameCallback(RenderArea *area, QPainter &painter, const FramePtr &frame) = 0;
61  virtual bool geometryCallback(RenderArea *area, QPainter &painter, const FramePtr &frame,
62  const GeometryPtr &geometry) = 0;
63 
64  protected:
67  };
68 
70  {
71  public:
72  CollideDrawer(bool doCollide, const std::set<std::string> &colliding, const RobotPtr &robot,
73  const StatePtr &state);
74  virtual ~CollideDrawer();
75 
76  bool frameCallback(RenderArea *area, QPainter &painter, const FramePtr &frame);
77  bool geometryCallback(RenderArea *area, QPainter &painter, const FramePtr &frame, const GeometryPtr &geometry);
78 
79  bool doCollide{false};
81  };
82 
84  {
85  public:
86  SignedDistanceDrawer(bool doCollide, bool doMin, const CollisionManager::SignedDistance &minimum, const CollisionManager::SignedDistanceMap &distances,
87  const RobotPtr &robot, const StatePtr &state);
88  virtual ~SignedDistanceDrawer();
89 
90  bool frameCallback(RenderArea *area, QPainter &painter, const FramePtr &frame);
91  bool geometryCallback(RenderArea *area, QPainter &painter, const FramePtr &frame, const GeometryPtr &geometry);
92 
93  bool doCollide{false};
94  bool doMin{false};
97  };
98 
99  RenderArea(QWidget *parent, MainWindow *mainwindow);
100  ~RenderArea();
101 
102  void drawFrame(QPainter &painter, QString name = "");
103  void drawAllFrames(QPainter &painter, RobotPtr robot, StatePtr state);
104 
105  void drawGeometry(QPainter &painter, RobotPtr robot, StatePtr state,
106  GeometryDrawerPtr drawer = nullptr);
107 
108  void setOriginX(double x);
109  void setOriginY(double y);
110  void setScale(double scale);
111 
112  void toRobot(int xin, int yin, double &xout, double &yout);
113  void toScreen(double xin, double yin, int &xout, int &yout);
114 
115  void takeScreenshot(const std::string &file);
116 
117  void paint(bool force = false);
118  bool didPaint();
119 
120  protected:
121  void mousePressEvent(QMouseEvent *event) override;
122  void mouseMoveEvent(QMouseEvent *event) override;
123  void mouseReleaseEvent(QMouseEvent *event) override;
124  void wheelEvent(QWheelEvent *event) override;
125 
126  private:
127  void paintEvent(QPaintEvent *event) override;
128  void bottomLeftTransform(QPainter &painter);
129  void drawGrid(QPainter &painter);
130 
131  const double RATIO{10.};
132  const double ROBOT{50.};
133  const double SCALE_BOUNDS[2]{0.25, 8.0};
134 
135  double scale_{1};
136  double origx_;
137  double origy_;
138  double x_{10.};
139  double y_{10.};
140 
141  bool paint_{false};
142 
143  Ui::RenderArea *ui_;
145 
146  QPixmap pixmap_;
147 
150 
151  bool panning_;
152  QPoint click_;
153  };
154  } // namespace gui
155 } // namespace se2ez
156 
157 #endif
MainWindow * mainwidget_
Definition: renderarea.h:144
double area(const Geometry &geometry)
Compute the area of a polygon.
Definition: polygon.cpp:106
A shared pointer wrapper for se2ez::State.
const CollisionManager::SignedDistance & minimum
Definition: renderarea.h:95
const CollisionManager::SignedDistanceMap & distances
Definition: renderarea.h:96
The main widget that acts a container for other widgets (canvas, panels). It also delegates the drawi...
Definition: mainwindow.h:34
Definition: cspacepanel.h:22
const std::set< std::string > & colliding
Definition: renderarea.h:80
A class that contains all information about the signed distance of a frame to another.
Definition: collision.h:75
A shared pointer wrapper for se2ez::Frame.
A shared pointer wrapper for se2ez::Geometry.
Ui::RenderArea * ui_
Definition: renderarea.h:143
A shared pointer wrapper for se2ez::Robot.
The canvas widget. It contains all the drawing functions as well as all the general settings for draw...
Definition: renderarea.h:48
Main namespace.
Definition: collision.h:11
#define SE2EZ_CLASS_FORWARD(C)
Definition: class_forward.h:9