| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #include "ivtraceview.h"
- #include <memory>
- #define VIEW_WIDTH 2000
- #define VIEW_HEIGHT 2000
- ivtraceview::ivtraceview()
- {
- // mpix.load(":/car1.png");
- 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 ivtraceview::run()
- {
- while(!QThread::isInterruptionRequested())
- {
- // if(mnReadIndex != mnWriteIndex)
- if(mbGPSUpdate || mbNDTUpdate || mbNDTCalibUpdate)
- {
- paint();
- mnReadIndex = mnWriteIndex;
- mbImageUpdate = true;
- mbGPSUpdate = false;
- mbNDTUpdate = false;
- mbNDTCalibUpdate = false;
- mbGlobalGPSUpdate = false;
- }
- else
- {
- msleep(10);
- }
- // paint();
- // mbImageUpdate = true;
- // msleep(1000);
- }
- }
- void ivtraceview::paint()
- {
- int i;
- std::vector<iv::ndttracepoint> xvectorndtxy;
- std::vector<iv::ndttracepoint> xvectorndtcalibxy;
- std::vector<iv::ndttracepoint> xvectorgpsxy;
- std::vector<iv::ndttracepoint> xvectorglobalgpsxy;
- mMutexGlobalGPS.lock();
- xvectorglobalgpsxy = mvectorglobalgpsxy;
- mMutexGlobalGPS.unlock();
- mMutexGPS.lock();
- xvectorgpsxy = mvectorgpsxy;
- mMutexGPS.unlock();
- mMutexNDT.lock();
- xvectorndtxy = mvectorndtxy;
- mMutexNDT.unlock();
- mMutexNDTCalib.lock();
- xvectorndtcalibxy = mvectorndtcalibxy;
- mMutexNDTCalib.unlock();
- 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(VIEW_WIDTH/2,VIEW_HEIGHT/2);
- painter->setPen(Qt::black);
- painter->drawLine(-VIEW_WIDTH/2,0,VIEW_WIDTH/2,0);
- painter->drawLine(0,-VIEW_HEIGHT/2,0,VIEW_HEIGHT/2);
- int viewstep1 = VIEW_WIDTH/2;
- int viewstep2 = VIEW_HEIGHT/2;
- for(i=-9;i<=9;i++)
- {
- painter->drawLine(i*viewstep1,0,i*viewstep1,-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*viewstep2,0,i*viewstep2,-20);
- // painter->drawText(i*100-20,-50,40,20,Qt::AlignHCenter | Qt::AlignTop,QString::number(i*(-10)));
- }
- painter->restore();
- painter->translate(-VIEW_WIDTH/2,-VIEW_HEIGHT/2);
- painter->setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式,好看一点
- QPen penPoint;
- penPoint.setColor(Qt::blue);
- penPoint.setWidth(1);
- painter->setPen(penPoint);//蓝色的笔,用于标记各个点
- int pointx = VIEW_WIDTH/2, pointy = VIEW_HEIGHT/2;//确定坐标轴起点坐标,这里定义(35,280)
- int nsize = xvectorndtxy.size();
- for(i=0;i<nsize;i++)
- {
- painter->drawPoint(pointx + mnFac * xvectorndtxy[i].x, pointy - mnFac *xvectorndtxy[i].y);
- }
- penPoint.setColor(Qt::yellow);
- penPoint.setWidth(1);
- painter->setPen(penPoint);//蓝色的笔,用于标记各个点
- nsize = xvectorgpsxy.size();
- for(i=0;i<nsize;i++)
- {
- painter->drawPoint(pointx + mnFac *xvectorgpsxy[i].x, pointy - mnFac *xvectorgpsxy[i].y);
- }
- penPoint.setColor(Qt::red);
- penPoint.setWidth(1);
- painter->setPen(penPoint);//蓝色的笔,用于标记各个点
- nsize = xvectorndtcalibxy.size();
- for(i=0;i<nsize;i++)
- {
- painter->drawPoint(pointx + mnFac *xvectorndtcalibxy[i].x, pointy - mnFac *xvectorndtcalibxy[i].y);
- }
- penPoint.setColor(Qt::green);
- penPoint.setWidth(1);
- painter->setPen(penPoint);//蓝色的笔,用于标记各个点
- nsize = xvectorglobalgpsxy.size();
- for(i=0;i<nsize;i++)
- {
- painter->drawPoint(pointx + mnFac *xvectorglobalgpsxy[i].x, pointy - mnFac *xvectorglobalgpsxy[i].y);
- }
- //pix.load("car.png");
- // painter->drawPixmap(VIEW_WIDTH/2-15,VIEW_HEIGHT/2-34,30,67,mpix);
- painter->end();
- mMutexPaint.lock();
- // delete mimagepaint;
- // mimagepaint = new QImage(*image);
- *mimagepaint = image->copy();
- mMutexPaint.unlock();
- }
- QImage ivtraceview::GetImage()
- {
- mMutexPaint.lock();
- // QImage imagertn(*mimagepaint);
- QImage imagertn = mimagepaint->copy();
- mMutexPaint.unlock();
- mbImageUpdate = false;
- return imagertn;
- }
- bool ivtraceview::IsHaveNew()
- {
- return mbImageUpdate;
- }
- int ivtraceview::GetType()
- {
- return 3;
- }
- void ivtraceview::SetNDTTrace(std::vector<iv::ndttracepoint> xvectorndtxy)
- {
- mMutexNDT.lock();
- mvectorndtxy = xvectorndtxy;
- mbNDTUpdate = true;
- mMutexNDT.unlock();
- }
- void ivtraceview::SetGPSTrace(std::vector<iv::ndttracepoint> xvectorgpsxy)
- {
- mMutexGPS.lock();
- mvectorgpsxy = xvectorgpsxy;
- mbGPSUpdate = true;
- mMutexGPS.unlock();
- }
- void ivtraceview::SetNDTCalibTrace(std::vector<iv::ndttracepoint> xvectorndtxy)
- {
- mMutexNDTCalib.lock();
- mvectorndtcalibxy = xvectorndtxy;
- mbNDTCalibUpdate = true;
- mMutexNDTCalib.unlock();
- }
- void ivtraceview::SetFac(int nFac)
- {
- mnFac = nFac;
- }
- void ivtraceview::SetGlobalGPSTrace(std::vector<iv::ndttracepoint> xvectorgpsxy)
- {
- mMutexGlobalGPS.lock();
- mvectorglobalgpsxy = xvectorgpsxy;
- mbGlobalGPSUpdate = true;
- mMutexGlobalGPS.unlock();
- }
|