#include "ivradarview.h" #include #include #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;iend(); } 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 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."<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;ksetBrush(xcolor); for(i=0;idrawEllipse(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] 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