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);
38 painter->setBrush(QBrush(Qt::NoBrush));
42 for (unsigned i = 0; i < lines.size(); i++)
43 painter->drawLine(lines[i].a.x, lines[i].a.y,
44 lines[i].b.x, lines[i].b.y);
49 painter->setPen(pen2);
51 for (unsigned i = 0; i < arcs.size(); i++) {
52 Shape_detect::Arc *a = &arcs[i];
53 painter->drawPoint(QPoint(a->center.x, a->center.y));
54 painter->drawEllipse(QRectF(a->center.x - a->radius, a->center.y - a->radius,
55 2*a->radius, 2*a->radius));
59 void HokuyoScan::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
63 QPointF points[HOKUYO_ARRAY_SIZE + 1];
64 unsigned point_num = 0;
67 painter->setPen(QPen(Qt::blue));
68 color = QColor(Qt::red);
70 painter->setBrush(QBrush(color));
72 for (unsigned i=0; i < HOKUYO_ARRAY_SIZE; i++) {
75 ang = HOKUYO_INDEX_TO_RAD(i);
77 if((ang<(-HOKUYO_RANGE_ANGLE_LEFT/180.0*M_PI))||((ang>(HOKUYO_RANGE_ANGLE_RIGHT/180.0*M_PI)))) {
87 points[0] = QPointF(0, 0);
91 x = d * cos(HOKUYO_INDEX_TO_RAD(i));
92 y = d * sin(HOKUYO_INDEX_TO_RAD(i));
94 points[point_num] = QPointF(x, y);
97 painter->drawPolygon(points, point_num);
101 painter->drawPolygon(points, point_num);
104 paintShapeDetect(painter);
108 void HokuyoScan::setPosition(double x, double y, double phi)
110 // Store position to be used when new data arrives
116 void HokuyoScan::newScan(struct hokuyo_scan_type *scan)
119 pos = PlaygroundScene::world2scene(pos);
121 setTransform(QTransform().rotateRadians(phi).translate(HOKUYO_CENTER_OFFSET_MM, 0));
125 update(boundingRect());