#include "ivtraceview.h" #include #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 xvectorndtxy; std::vector xvectorndtcalibxy; std::vector xvectorgpsxy; std::vector 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 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."<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;idrawPoint(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;idrawPoint(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;idrawPoint(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;idrawPoint(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 xvectorndtxy) { mMutexNDT.lock(); mvectorndtxy = xvectorndtxy; mbNDTUpdate = true; mMutexNDT.unlock(); } void ivtraceview::SetGPSTrace(std::vector xvectorgpsxy) { mMutexGPS.lock(); mvectorgpsxy = xvectorgpsxy; mbGPSUpdate = true; mMutexGPS.unlock(); } void ivtraceview::SetNDTCalibTrace(std::vector xvectorndtxy) { mMutexNDTCalib.lock(); mvectorndtcalibxy = xvectorndtxy; mbNDTCalibUpdate = true; mMutexNDTCalib.unlock(); } void ivtraceview::SetFac(int nFac) { mnFac = nFac; } void ivtraceview::SetGlobalGPSTrace(std::vector xvectorgpsxy) { mMutexGlobalGPS.lock(); mvectorglobalgpsxy = xvectorgpsxy; mbGlobalGPSUpdate = true; mMutexGlobalGPS.unlock(); }