1 #include "hokuyoscan.h"
4 #include "PlaygroundScene.h"
8 HokuyoScan::HokuyoScan() : QGraphicsItem(), showShapeDetect(false)
10 memset(&data, 0, sizeof(data));
13 HokuyoScan::~HokuyoScan()
17 QRectF HokuyoScan::boundingRect() const
20 tl = PlaygroundScene::world2scene(QPointF(-3, -3));
21 br = PlaygroundScene::world2scene(QPointF(+3, +3));
22 return QRectF(tl, br);
25 void HokuyoScan::paintShapeDetect(QPainter * painter)
29 std::vector<Shape_detect::Line> lines;
30 std::vector<Shape_detect::Arc> arcs;
32 sd.prepare(data.data);
33 sd.line_detect(lines);
41 for (unsigned i = 0; i < lines.size(); i++)
42 painter->drawLine(lines[i].a.x, lines[i].a.y,
43 lines[i].b.x, lines[i].b.y);
48 painter->setPen(pen2);
50 for (unsigned i = 0; i < arcs.size(); i++) {
51 painter->drawLine(arcs[i].begin.x, arcs[i].begin.y,
52 arcs[i].end.x, arcs[i].end.y);
56 void HokuyoScan::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
59 QPointF points[HOKUYO_ARRAY_SIZE + 1];
60 unsigned point_num = 0;
63 painter->setPen(QPen(Qt::blue));
64 color = QColor(Qt::red);
66 painter->setBrush(QBrush(color));
68 for (unsigned i=0; i < HOKUYO_ARRAY_SIZE; i++) {
76 points[0] = QPointF(0, 0);
80 x = d * cos(HOKUYO_INDEX_TO_RAD(i));
81 y = d * sin(HOKUYO_INDEX_TO_RAD(i));
83 points[point_num] = QPointF(x, y);
86 painter->drawPolygon(points, point_num);
90 painter->drawPolygon(points, point_num);
93 paintShapeDetect(painter);
97 void HokuyoScan::setPosition(double x, double y, double phi)
99 // Store position to be used when new data arrives
105 void HokuyoScan::newScan(struct hokuyo_scan_type *scan)
108 pos = PlaygroundScene::world2scene(pos);
110 setTransform(QTransform().rotateRadians(phi).translate(HOKUYO_CENTER_OFFSET_MM, 0));
114 update(boundingRect());