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<int> input(HOKUYO_ARRAY_SIZE);
31 for (unsigned i = 0; i < HOKUYO_ARRAY_SIZE; i++)
32 input[i] = (int) data.data[i];
34 std::vector<Shape_detect::Line> output;
35 sd.shape_detect(input, output);
42 for (unsigned i = 0; i < output.size(); i++)
43 painter->drawLine(output[i].a.x, output[i].a.y,
44 output[i].b.x, output[i].b.y);
47 void HokuyoScan::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
50 QPointF points[HOKUYO_ARRAY_SIZE + 1];
51 unsigned point_num = 0;
54 painter->setPen(QPen(Qt::blue));
55 color = QColor(Qt::red);
57 painter->setBrush(QBrush(color));
59 for (unsigned i=0; i < HOKUYO_ARRAY_SIZE; i++) {
67 points[0] = QPointF(0, 0);
71 x = d * cos(HOKUYO_INDEX_TO_RAD(i));
72 y = d * sin(HOKUYO_INDEX_TO_RAD(i));
74 points[point_num] = QPointF(x, y);
77 painter->drawPolygon(points, point_num);
81 painter->drawPolygon(points, point_num);
84 paintShapeDetect(painter);
88 void HokuyoScan::setPosition(double x, double y, double phi)
90 // Store position to be used when new data arrives
96 void HokuyoScan::newScan(struct hokuyo_scan_type *scan)
99 pos = PlaygroundScene::world2scene(pos);
101 setTransform(QTransform().rotateRadians(phi).translate(HOKUYO_CENTER_OFFSET_MM, 0));
105 update(boundingRect());