123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #include "ivradarview.h"
- #include <QColor>
- #include <iostream>
- #define VIEW_WIDTH 2000
- #define VIEW_HEIGHT 2000
- QColor selradarcolor[] = {Qt::red,Qt::green,Qt::blue,Qt::cyan,Qt::magenta,Qt::yellow};
- IVRadarView::IVRadarView()
- {
- int i;
- for(i=0;i<NUM_MAX_RADAR;i++)
- {
- mnNotDataCount[i] = NOTDATACOUNTMAX;
- mbCheck[i] = true;
- }
- for(i=0;i<NUM_MAX_MSG;i++)
- if(i==0||i==1||i==4) msgCheck[i]=true;
- else msgCheck[i]=false;
- image = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);//画布的初始化大小设为300*300,使用32位颜色
- mimagepaint = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);
- painter = new QPainter(image);
- painter->end();
- }
- void IVRadarView::run()
- {
- while(!QThread::isInterruptionRequested())
- {
- if(mnReadIndex != mnWriteIndex)
- {
- paint();
- mnReadIndex = mnWriteIndex;
- mbImageUpdate = true;
- }
- else
- {
- msleep(1);
- }
- }
- }
- void IVRadarView::paint()
- {
- iv::radar::radarobjectarray xobj;
- painter->begin(image);
- image->fill(QColor(255, 255, 255));//对画布进行填充
- // std::vector<iv::GPSData> navigation_data = brain->navigation_data;
- painter->setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式,好看一点
- painter->translate(1000,1000);
- painter->setPen(Qt::black);
- painter->drawLine(-1000,0,1000,0);
- painter->drawLine(0,-1000,0,1000);
- int i;
- for(i=-9;i<=9;i++)
- {
- painter->drawLine(i*100,0,i*100,-20);
- // painter->drawText(i*100-20,-50,40,20,Qt::AlignHCenter | Qt::AlignTop,QString::number(i*10));
- }
- // std::cout<<"enter paint."<<std::endl;
- painter->save();
- painter->rotate(90);
- for(i=-9;i<=9;i++)
- {
- painter->drawLine(i*100,0,i*100,-20);
- // painter->drawText(i*100-20,-50,40,20,Qt::AlignHCenter | Qt::AlignTop,QString::number(i*(-10)));
- }
- painter->restore();
- painter->setPen(QPen(Qt::black, 2));
- painter->setBrush(Qt::blue);
- QFont esr_font("Microsoft YaHei", 10, 60); //第一个属性是字体(微软雅黑),第二个是大小,第三个是加粗(权重是75)
- painter->setFont(esr_font);
- int k;
- for(k=0;k<NUM_MAX_RADAR;k++)
- {
- mMutex.lock();
- xobj.CopyFrom(mradar[k]);
- mMutex.unlock();
- if(mbCheck[k] == false)continue;
- QColor xcolor = Qt::gray;
- if(mnNotDataCount[k] < NOTDATACOUNTMAX)
- {
- if(k<6)
- {
- xcolor = selradarcolor[k];
- }
- else
- {
- xcolor = Qt::black;
- }
- }
- //根据类型改变颜色
- if(xobj.has_acc_sta_obj_id())
- xcolor = selradarcolor[0];
- if(xobj.has_acc_mov_obj_id())
- xcolor = selradarcolor[1];
- if(xobj.has_cmbb_sta_obj_id())
- xcolor = selradarcolor[2];
- if(xobj.has_cmbb_mov_obj_id())
- xcolor = selradarcolor[3];
- if(xobj.has_fcw_sta_obj_id())
- xcolor = selradarcolor[4];
- if(xobj.has_fcw_mov_obj_id())
- xcolor = selradarcolor[5];
- painter->setBrush(xcolor);
- for(i=0;i<xobj.obj_size();i++)
- {
- iv::radar::radarobject xr = xobj.obj(i);
- if(xr.bvalid())
- {
- int x;
- int y;
- x = (int)(xr.x()*10.0);
- y = (int)(xr.y()*(-10.0));
- painter->drawEllipse(x, y, 10, 10);
- // char strradar[1000];
- // sprintf(strradar,"(%6.1f %6.1f %6.1f)",xr.x(),xr.y(),xr.vel());
- // painter->drawText(x,y,strradar);
- // // sprintf(coordinate_ear, "(%d, %d)", (int)ServiceCarStatus.obs_radar[a].nomal_x, (int)ServiceCarStatus.obs_radar[a].nomal_y);
- // // painter->drawText(((ServiceCarStatus.obs_radar)[a].nomal_x) * 10 + 450, -(ServiceCarStatus.obs_radar)[a].nomal_y * 10 + 700, QString(coordinate_ear));
- QString str="";
- if(msgCheck[0]) str+=QString::number(xr.x(),'f',1)+",";
- if(msgCheck[1]) str+=QString::number(xr.y(),'f',1)+",";
- if(msgCheck[2]) str+=QString::number(xr.vx())+",";
- if(msgCheck[3]) str+=QString::number(xr.vy())+",";
- if(msgCheck[4]) str+=QString::number(xr.vel())+",";
- if(msgCheck[5]) str+="true,";
- if(msgCheck[6]) str+=QString::number(xr.range())+",";
- if(msgCheck[7]) str+=QString::number(xr.range_rate())+",";
- if(msgCheck[8]) str+=QString::number(xr.range_accel())+",";
- if(msgCheck[9]) str+=QString::number(xr.angle())+",";
- if(msgCheck[10]) str+=QString::number(xr.width())+",";
- if(msgCheck[11]) str+="true,";
- if(msgCheck[12]) str+="true,";
- if(msgCheck[13]) str+="true,";
- if(msgCheck[14]) str+=QString::number(xr.med_range_mode())+",";
- if(msgCheck[15]) str+=QString::number(xr.track_status())+",";
- if(msgCheck[16]) str+="true,";
- if(msgCheck[17]) str+="true,";
- if(msgCheck[18]) str+="true,";
- if(msgCheck[19]) str+="true,";
- if(msgCheck[20]) str+=QString::number(xr.power())+",";
- if(msgCheck[21]) str+=QString::number(xr.detect_valid_level())+",";
- if(msgCheck[22]) str+="true,";
- painter->drawText(x,y,str.length()>0? "("+str.mid(0,str.length()-1)+")":"");
- }//if
- }//for
- if(mnNotDataCount[k] <NOTDATACOUNTMAX)mnNotDataCount[k]++;
- }
- double lrange = xobj.valid_lr_range()*10;
- double langle = xobj.valid_lr_angle();
- double mrange = xobj.valid_mr_range()*10;
- double mangle = xobj.valid_mr_angle();
- if(msgCheck[23]){
- painter->setBrush(QBrush(QColor(255,0,0,80)));
- //lrange=60*10,langle=75;
- painter->drawPie(-lrange/2,-lrange/2,lrange,lrange,(180-langle)/2*16,langle*16);
- }
- if(msgCheck[24]){
- painter->setBrush(QBrush(QColor(0,0,255,80)));
- //mrange=40*10, mangle=100;
- painter->drawPie(-mrange/2,-mrange/2,mrange,mrange,(180-mangle)/2*16,mangle*16);
- }
- painter->end();
- mMutexPaint.lock();
- // delete mimagepaint;
- // mimagepaint = new QImage(*image);
- *mimagepaint = image->copy();
- mMutexPaint.unlock();
- }
- QImage IVRadarView::GetImage()
- {
- mMutexPaint.lock();
- // QImage imagertn(*mimagepaint);
- QImage imagertn = mimagepaint->copy();
- mMutexPaint.unlock();
- mbImageUpdate = false;
- return imagertn;
- }
- bool IVRadarView::IsHaveNew()
- {
- return mbImageUpdate;
- }
- int IVRadarView::GetType()
- {
- return 3;
- }
- void IVRadarView::SetRADAR(iv::radar::radarobjectarray radarobj,int index)
- {
- mMutex.lock();
- mnWriteIndex++;
- mradar[index].clear_obj();
- mradar[index].CopyFrom(radarobj);
- mnNotDataCount[index] = 0;
- mMutex.unlock();
- }
- void IVRadarView::SetCheck(int n, bool bcheck)
- {
- // if((n<0)||(n>NUM_MAX_RADAR))return;
- // mbCheck[n] = bcheck;
- if(n<0||n>NUM_MAX_MSG+NUM_MAX_RADAR) return;
- else if(n<NUM_MAX_RADAR)
- mbCheck[n]=bcheck;
- else
- msgCheck[n-NUM_MAX_RADAR]=bcheck;
- }
|