|
@@ -0,0 +1,135 @@
|
|
|
+#include "radarview.h"
|
|
|
+#include "complex"
|
|
|
+
|
|
|
+#define VIEW_WIDTH 1000
|
|
|
+#define VIEW_HEIGHT 1000
|
|
|
+
|
|
|
+RadarView::RadarView()
|
|
|
+{
|
|
|
+ image = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);
|
|
|
+ mimagepaint = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);
|
|
|
+ painter = new QPainter(image);
|
|
|
+ painter->end();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void RadarView::start(){
|
|
|
+ this->run();
|
|
|
+}
|
|
|
+
|
|
|
+//该类不是QThread的子类
|
|
|
+void RadarView::run()
|
|
|
+{
|
|
|
+ this->paint();
|
|
|
+ mnReadIndex = mnWriteIndex;
|
|
|
+ mbImageUpdate = true;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void RadarView::paint(){
|
|
|
+
|
|
|
+ painter->begin(image);
|
|
|
+
|
|
|
+ image->fill(QColor(255, 255, 255));
|
|
|
+ painter->setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式
|
|
|
+ painter->translate(500,500);
|
|
|
+
|
|
|
+ painter->setPen(Qt::black);
|
|
|
+
|
|
|
+ painter->drawLine(-1000,0,1000,0);//横轴
|
|
|
+ painter->drawLine(5,-1000,5,1000);//竖轴
|
|
|
+
|
|
|
+// int i;
|
|
|
+// for(i=-9;i<=9;i++)
|
|
|
+// {
|
|
|
+// painter->drawLine(i*50,0,i*50,-5);
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+// painter->rotate(90);
|
|
|
+// for(i=-9;i<=9;i++)
|
|
|
+// {
|
|
|
+// painter->drawLine(i*50,0,i*50,-5);
|
|
|
+// }
|
|
|
+// //坐标轴用来定位
|
|
|
+
|
|
|
+// painter->rotate(-90);//转回来
|
|
|
+ painter->save();
|
|
|
+ QImage car;
|
|
|
+ if(car.load(":/car.png")){
|
|
|
+ //qDebug("loaded pic");
|
|
|
+ painter->drawImage(-75,-140,car.scaled(160,300));
|
|
|
+ }else{
|
|
|
+ qDebug("Load car pic Error");
|
|
|
+ }
|
|
|
+ painter->restore();
|
|
|
+ painter->setPen(QPen(Qt::black,2));
|
|
|
+ painter->setBrush(Qt::red);
|
|
|
+ double x = cos(45);//帮忙定位四个角的
|
|
|
+
|
|
|
+ int xy[4][2]={{-1,-1},{1,-1},{-1,1},{1,1}};//左上、右上、左下、右下分别为负负、正负、负正、正正
|
|
|
+ int loc[3][4]={{3,4,9,10},{1,6,7,12},{2,5,8,11}};//分区,将12个点分成3个分区,每个分区有四个方位
|
|
|
+ //loc[0][*]为分区1的范围,loc[1][*]为分区2, loc[2][*]为分区3
|
|
|
+
|
|
|
+ //3 4 9 10 上下四个范围,分区1
|
|
|
+ for(int i = 0; i<4 ; i++){
|
|
|
+ painter->drawEllipse(20*xy[i][0],(170+distance[loc[0][i]-1])*xy[i][1],10,10);
|
|
|
+ painter->drawText(30*xy[i][0],(170+distance[loc[0][i]-1])*xy[i][1],DisString[loc[0][i]-1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //1 6 7 12 左右四个范围,分区2
|
|
|
+ for(int i = 0; i<4; i++){
|
|
|
+ painter->drawEllipse((100+distance[loc[1][i]-1])*xy[i][0],40*xy[i][1],10,10);
|
|
|
+ painter->drawText((100+distance[loc[1][i]-1])*xy[i][0],40*xy[i][1],DisString[loc[1][i]-1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //2 5 8 11 四个角,分区3
|
|
|
+ for(int i = 0; i<4; i++){
|
|
|
+ painter->drawEllipse((80+distance[loc[2][i]-1]*x)*xy[i][0],170*xy[i][1],10,10);
|
|
|
+ painter->drawText((80+distance[loc[2][i]-1]*x)*xy[i][0],170*xy[i][1],DisString[loc[2][i]-1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ painter->end();
|
|
|
+
|
|
|
+ mMutexPaint.lock();
|
|
|
+ *mimagepaint = image->copy();
|
|
|
+ mMutexPaint.unlock();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+QImage RadarView::GetImage(){
|
|
|
+ mMutexPaint.lock();
|
|
|
+ QImage imagertn = mimagepaint->copy();
|
|
|
+ mMutexPaint.unlock();
|
|
|
+ mbImageUpdate = false;
|
|
|
+ return imagertn;
|
|
|
+}
|
|
|
+
|
|
|
+//修改左边界面上显示的数值,右边栏的数值在radarinfoview.cpp修改
|
|
|
+void RadarView::SetRadar(iv::ultrasonic::ultrasonic myobj){
|
|
|
+ distance[0]=myobj.sigobjdist_flside();
|
|
|
+ distance[1]=myobj.sigobjdist_flcorner();
|
|
|
+ distance[2]=myobj.sigobjdist_flmiddle();
|
|
|
+ distance[3]=myobj.sigobjdist_frmiddle();
|
|
|
+ distance[4]=myobj.sigobjdist_frcorner();
|
|
|
+ distance[5]=myobj.sigobjdist_frside();
|
|
|
+ distance[6]=myobj.sigobjdist_rlside();
|
|
|
+ distance[7]=myobj.sigobjdist_rlcorner();
|
|
|
+ distance[8]=myobj.sigobjdist_rlmiddle();
|
|
|
+ distance[9]=myobj.sigobjdist_rrmiddle();
|
|
|
+ distance[10]=myobj.sigobjdist_rrcorner();
|
|
|
+ distance[11]=myobj.sigobjdist_rrside();
|
|
|
+ for(int i = 0; i < NUM_OF_DIRECTIONS; i++ ){
|
|
|
+ if(distance[i]<MAX_DISTANCE&&distance[i]>=0){
|
|
|
+ DisString[i]=QString::number(distance[i])+"cm";
|
|
|
+ }else{
|
|
|
+ distance[i]=-1;
|
|
|
+ DisString[i]="无";
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|