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)