15 #include "ui_mainwindow.h"    16 #include "ui_renderarea.h"    18 using namespace se2ez;
    25   : robot_(robot), state_(state)
    50         QPen pen(QColor(255, 0, 0));
    62   , doCollide(doCollide)
    65   , distances(distances)
    91             painter.resetTransform();
    93             QPen pen(QColor(255, 0, 0));
    97             int x, y, x2, y2, x3, y3, xt, yt;
   110             painter.drawLine(x, y, x2, y2);
   115             painter.drawLine(x2, y2, x3, y3);
   123             QPen pen(QColor(255, 0, 0));
   140     setMouseTracking(
true);
   142     QFont newFont = font();
   143     newFont.setPixelSize(12);
   146     QFontMetrics fontMetrics(newFont);
   197     for (
const auto &name : robot->getFrameNames())
   204         t.rotateRadians(fpose[2]);
   205         painter.setTransform(t, 
true);
   206         drawFrame(painter, QString::fromUtf8(name.c_str()));
   212                                    gui::RenderArea::GeometryDrawerPtr drawer)
   214     for (
const auto &name : robot->getFrameNames())
   217         const auto &frame = robot->getFrameConst(name);
   223         t.rotateRadians(fpose[2]);
   224         painter.setTransform(t, 
true);
   226         if (drawer && !drawer->frameCallback(
this, painter, frame))
   229         for (
const auto &geom : frame->getGeometry())
   231             const auto &color = geom->color;
   237             offt.translate(offset[0] * 
ROBOT * scale_, offset[1] * 
ROBOT * scale_);
   238             offt.rotateRadians(offset[2]);
   239             painter.setTransform(offt, 
true);
   242             painter.setPen(QColor(255 * color[0], 255 * color[1], 255 * color[2], 255 * color[3]));
   244             if (drawer && !drawer->geometryCallback(
this, painter, frame, geom))
   251                         -scale_ * 
ROBOT * (geom->dimensions[0]), -scale_ * 
ROBOT * (geom->dimensions[1]),
   252                         scale_ * 2 * 
ROBOT * geom->dimensions[0], scale_ * 2 * ROBOT * geom->dimensions[1]);
   256                     painter.drawEllipse(QPoint(0, 0), 
int(scale_ * ROBOT * geom->dimensions[0]),
   257                                         int(scale_ * ROBOT * geom->dimensions[0]));
   263                     QPoint points[geom->points.size()];
   264                     for (
unsigned int i = 0; i < geom->points.size(); ++i)
   266                             QPoint(geom->points[i][0] * scale_ * ROBOT, geom->points[i][1] * scale_ * ROBOT);
   268                     painter.drawPolygon(points, geom->points.size());
   272                     SE2EZ_ERROR(
"Geometry Type: %d does not exist", geom->type);
   285     QPoint p = painter.window().bottomLeft();
   289     painter.setTransform(t);
   297     QRect vp = painter.viewport();
   300     double vxd, vyd, txd, tyd;
   301     vp.getCoords(&vx, &vy, &tx, &ty);
   314     const double move = 1;
   315     for (
double s = vxd; s <= txd; s += move)
   318             painter.setPen(QColor(220, 220, 220));
   320             painter.setPen(QColor(240, 240, 240));
   325         painter.drawLine(x, 0, x, vp.height());
   327         painter.setPen(QColor(180, 180, 180));
   328         painter.drawText(x + 2, vp.height() - 2, QString(
log::format(
"%1$+3.0f", s).c_str()));
   331     for (
double s = tyd; s <= vyd; s += move)
   334             painter.setPen(QColor(220, 220, 220));
   336             painter.setPen(QColor(240, 240, 240));
   341         painter.drawLine(0, y, vp.width(), y);
   343         painter.setPen(QColor(180, 180, 180));
   344         painter.drawText(2, y - 2, QString(
log::format(
"%1$+3.0f", s).c_str()));
   373     QRect size = geometry();
   374     pixmap_ = QPixmap(size.size());
   378     painter.setRenderHint(QPainter::Antialiasing);
   379     painter.fillRect(event->rect(), QBrush(Qt::white));
   388     QPainter painter2(
this);
   389     painter2.drawPixmap(size, 
pixmap_, size);
   395     QPen pen(QColor(200, 20, 20));
   399     painter.drawLine(0, 0, 
ROBOT, 0);
   403     painter.drawLine(0, 0, 0, 
ROBOT);
   407     QTransform t = painter.transform();
   410     painter.resetTransform();
   417     painter.drawText(t.map(x), 
"x");
   418     painter.drawText(t.map(y), 
"y");
   420     painter.drawText(t.map(QPoint(10, 10)), name);
   439     QPoint pos = 
event->pos();
   441     if (event->button() == Qt::LeftButton)
   449         toRobot(pos.x(), pos.y(), x, y);
   458     QPoint pos = 
event->pos();
   461     toRobot(pos.x(), pos.y(), x, y);
   464     if ((event->buttons() & Qt::LeftButton) && 
panning_)
   473     if ((event->buttons() & Qt::RightButton))
   476         toRobot(pos.x(), pos.y(), x, y);
   485     if (event->button() == Qt::LeftButton && 
panning_)
   493     double delta = 
event->angleDelta().y() / 1000.;
 
GeometryDrawer(const RobotPtr &robot, const StatePtr &state)
 
void wheelEvent(QWheelEvent *event) override
 
double area(const Geometry &geometry)
Compute the area of a polygon. 
 
A shared pointer wrapper for se2ez::State. 
 
Eigen::Vector3d flattenIsometry(const Eigen::Isometry2d &frame)
Converts a transformation frame into a vector [x, y, t] composed of a translation (x...
 
const CollisionManager::SignedDistance & minimum
 
const CollisionManager::SignedDistanceMap & distances
 
Eigen::Vector2d normal
Normal vector to collision. 
 
void mouseMoveEvent(QMouseEvent *event) override
 
The main widget that acts a container for other widgets (canvas, panels). It also delegates the drawi...
 
void paintEvent(QPaintEvent *event) override
 
bool frameCallback(RenderArea *area, QPainter &painter, const FramePtr &frame)
 
void mousePressEvent(QMouseEvent *event) override
 
void setOriginY(double y)
 
void setScale(double scale)
 
SignedDistanceDrawer(bool doCollide, bool doMin, const CollisionManager::SignedDistance &minimum, const CollisionManager::SignedDistanceMap &distances, const RobotPtr &robot, const StatePtr &state)
 
bool geometryCallback(RenderArea *area, QPainter &painter, const FramePtr &frame, const GeometryPtr &geometry)
 
const std::set< std::string > & colliding
 
A class that contains all information about the signed distance of a frame to another. 
 
void drawGeometry(QPainter &painter, RobotPtr robot, StatePtr state, GeometryDrawerPtr drawer=nullptr)
 
A shared pointer wrapper for se2ez::Frame. 
 
void drawGrid(QPainter &painter)
 
void drawFrame(QPainter &painter, QString name="")
 
CollideDrawer(bool doCollide, const std::set< std::string > &colliding, const RobotPtr &robot, const StatePtr &state)
 
A shared pointer wrapper for se2ez::Geometry. 
 
void draw(QPainter &painter, RenderArea *canvas)
Asks all the panels to draw their respective information. 
 
void bottomLeftTransform(QPainter &painter)
 
void takeScreenshot(const std::string &file)
 
RenderArea(QWidget *parent, MainWindow *mainwindow)
 
Ui::MainWindow * ui_
UI (User Interface) pointer. 
 
A simple polygon (no holes). 
 
void toScreen(double xin, double yin, int &xout, int &yout)
 
void mouseReleaseEvent(QMouseEvent *event) override
 
std::string frame
Frame closet to collision. 
 
Eigen::Vector2d point
Point on fixture where normal begins. 
 
void setOriginX(double x)
 
void drawAllFrames(QPainter &painter, RobotPtr robot, StatePtr state)
 
A shared pointer wrapper for se2ez::Robot. 
 
std::string format(const std::string &fmt, Args &&... args)
 
bool frameCallback(RenderArea *area, QPainter &painter, const FramePtr &frame)
 
void updateState()
calls the update function from canvas to draw the updated state 
 
void paint(bool force=false)
 
The canvas widget. It contains all the drawing functions as well as all the general settings for draw...
 
#define SE2EZ_ERROR(fmt,...)
 
bool geometryCallback(RenderArea *area, QPainter &painter, const FramePtr &frame, const GeometryPtr &geometry)
 
const double SCALE_BOUNDS[2]
 
virtual ~SignedDistanceDrawer()
 
SE2EZ_EIGEN_CLASS double distance
Distance to collision. 
 
void click(QMouseEvent *event, double x, double y, int sx, int sy)
Asks the top panel to click at the location. 
 
void toRobot(int xin, int yin, double &xout, double &yout)