Преглед на файлове

add view_radar4d_2d for use 2d view, not complete.

yuchuli преди 1 година
родител
ревизия
f7d4388452

+ 275 - 0
src/tool/view_radar4d_2d/ivradarview.cpp

@@ -0,0 +1,275 @@
+#include "ivradarview.h"
+
+#include <QColor>
+#include <iostream>
+#include <math.h>
+
+#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();
+
+    connect(this,SIGNAL(update4d()),this,SLOT(onupdate4d()));
+
+
+}
+
+void IVRadarView::run()
+{
+    while(!QThread::isInterruptionRequested())
+    {
+        if(mnReadIndex != mnWriteIndex)
+        {
+            paint();
+            mnReadIndex = mnWriteIndex;
+            mbImageUpdate = true;
+        }
+        else
+        {
+            msleep(1);
+        }
+    }
+}
+
+void IVRadarView::onupdate4d()
+{
+    paint();
+}
+
+
+void IVRadarView::paint()
+{
+
+    static int64_t nlastdet = 0;
+    static int64_t nlastobj = 0;
+
+    static iv::radar::radar4ddetectarray xdetarray;
+    static iv::radar::radar4dobjectarray xobjarray;
+
+    bool bdetdraw = false;
+    bool bobjdraw = false;
+
+    if(mbdetupdate)
+    {
+        mmutexdet.lock();
+        xdetarray.CopyFrom(mdetarray);
+        mbdetupdate = false;
+        bdetdraw = true;
+        nlastdet = std::chrono::system_clock::now().time_since_epoch().count();
+        mmutexdet.unlock();
+    }
+
+    if(mbobjupdate)
+    {
+        mmutexobj.lock();
+        xobjarray.CopyFrom(mobjarray);
+        mbobjupdate = false;
+        bobjdraw = true;
+        nlastobj = std::chrono::system_clock::now().time_since_epoch().count();
+        mmutexobj.unlock();
+    }
+
+    int64_t nnow = std::chrono::system_clock::now().time_since_epoch().count();
+    if(bdetdraw == false)
+    {
+        if((nnow - nlastdet) < 1e9)
+        {
+            bdetdraw = true;
+        }
+    }
+
+    if(bobjdraw == false)
+    {
+        if((nnow - nlastobj) < 1e9)
+        {
+            bobjdraw = true;
+        }
+    }
+
+
+    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);
+
+    painter->setBrush(Qt::yellow);
+
+    if(bdetdraw)
+    {
+        mbImageUpdate = true;
+        int i;
+        int nsize = xdetarray.mdet_size();
+        for(i=0;i<nsize;i++)
+        {
+            double xr,yr;
+            iv::radar::radar4ddetect * pdet;
+            pdet = xdetarray.mutable_mdet(i);
+            xr = pdet->detection_radial_distance() * cos(pdet->unaligned_detection_elevation_angle()) * cos(pdet->unaligned_detection_azimuth_angle() + M_PI/2.0);
+            yr = pdet->detection_radial_distance() * cos(pdet->unaligned_detection_elevation_angle()) * sin(pdet->unaligned_detection_azimuth_angle() + M_PI/2.0);
+
+            int x;
+            int y;
+            x = (int)(xr*10.0);
+            y = (int)(yr*(-10.0));
+
+            painter->drawEllipse(x, y, 10, 10);
+        }
+    }
+
+    painter->setBrush(Qt::red);
+
+    if(bobjdraw)
+    {
+        mbImageUpdate = true;
+        int i;
+        int nsize = xobjarray.mobj_size();
+        for(i=0;i<nsize;i++)
+        {
+            double xr,yr;
+            iv::radar::radar4dobject * pobj;
+            pobj = xobjarray.mutable_mobj(i);
+            xr = pobj->u_position_y() * (-1);
+            yr = pobj->u_position_x() * (1);
+
+            int x;
+            int y;
+            x = (int)(xr*10.0);
+            y = (int)(yr*(-10.0));
+
+            painter->drawEllipse(x, y, 20, 20);
+        }
+    }
+
+
+
+
+
+    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;
+}
+
+
+void IVRadarView:: SetRADAR4DDet(iv::radar::radar4ddetectarray & radardet)
+{
+    mmutexdet.lock();
+    mdetarray.CopyFrom(radardet);
+    mbdetupdate = true;
+    mmutexdet.unlock();
+    emit update4d();
+}
+
+void IVRadarView::SetRADAR4DObj(iv::radar::radar4dobjectarray & radarobj)
+{
+    mmutexobj.lock();
+    mobjarray.CopyFrom(radarobj);
+    mbobjupdate = true;
+    mmutexobj.unlock();
+    emit update4d();
+}
+

+ 72 - 0
src/tool/view_radar4d_2d/ivradarview.h

@@ -0,0 +1,72 @@
+#ifndef IVRADARVIEW_H
+#define IVRADARVIEW_H
+
+#include "ivview.h"
+
+#include "radarobjectarray.pb.h"
+
+#include "radar4ddetectarray.pb.h"
+#include "radar4dobjectarray.pb.h"
+
+#define NUM_MAX_RADAR 6
+#define NUM_MAX_MSG 25
+class IVRadarView : public IVView
+{
+Q_OBJECT
+public:
+    IVRadarView();public:
+    QImage GetImage();
+    bool IsHaveNew();
+    int GetType();
+
+signals:
+    void update4d();
+
+private slots:
+    void onupdate4d();
+private:
+    void run();
+    int mnWriteIndex = 0;
+    int mnReadIndex = 0;
+
+private:
+    QImage *image;
+    QPainter *painter;
+    QTimer *timer;
+    bool mbImageUpdate = false;
+    QMutex mMutex;
+    QMutex mMutexPaint;
+
+private:
+    void paint();
+    QImage * mimagepaint;
+
+    iv::radar::radarobjectarray mradar[NUM_MAX_RADAR];
+    bool mbCheck[NUM_MAX_RADAR];
+
+    bool msgCheck[NUM_MAX_MSG];
+
+    const int NOTDATACOUNTMAX = 100;
+    int mnNotDataCount[NUM_MAX_RADAR];
+
+    iv::radar::radar4ddetectarray mdetarray;
+    std::mutex mmutexdet;
+    bool mbdetupdate = false;
+
+    iv::radar::radar4dobjectarray mobjarray;
+    std::mutex mmutexobj;
+    bool mbobjupdate = false;
+
+
+public:
+
+    void SetCheck(int n,bool bcheck);
+
+    void SetRADAR(iv::radar::radarobjectarray radarobj,int index);
+
+    void SetRADAR4DDet(iv::radar::radar4ddetectarray & radardet);
+    void SetRADAR4DObj(iv::radar::radar4dobjectarray & radarobj);
+
+};
+
+#endif // IVRADARVIEW_H

+ 25 - 0
src/tool/view_radar4d_2d/ivview.cpp

@@ -0,0 +1,25 @@
+#include "ivview.h"
+
+IVView::IVView()
+{
+
+
+}
+
+QImage IVView::GetImage()
+{
+    QImage * pimage = new QImage(100,100,QImage::Format_RGB32);
+    return *pimage;
+
+
+}
+
+bool IVView::IsHaveNew()
+{
+    return false;
+}
+
+int IVView::GetType()
+{
+    return 0;
+}

+ 31 - 0
src/tool/view_radar4d_2d/ivview.h

@@ -0,0 +1,31 @@
+#ifndef IVVIEW_H
+#define IVVIEW_H
+
+#include <QImage>
+#include <QGraphicsScene>
+#include <QTimer>
+#include <QPainter>
+
+#include <QThread>
+
+#include <QMutex>
+
+
+
+class IVView : public QThread
+{
+public:
+    IVView();  
+
+public:
+    virtual QImage GetImage();
+    virtual bool IsHaveNew();
+    virtual int GetType();
+
+private:
+
+
+
+};
+
+#endif // IVVIEW_H

+ 41 - 0
src/tool/view_radar4d_2d/main.cpp

@@ -0,0 +1,41 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+#include <iostream>
+
+#include "string.h"
+
+#include "xmlparam.h"
+#include "ivradarview.h"
+#include "ivversion.h"
+#include "ivbacktrace.h"
+
+std::string gstrmemradar[NUM_MAX_RADAR];
+
+int main(int argc, char *argv[])
+{
+    RegisterIVBackTrace();
+    showversion("view_radar");
+    QApplication a(argc, argv);
+
+    QString strpath = QCoreApplication::applicationDirPath();
+    if(argc < 2)
+        strpath = strpath + "/view_radar.xml";
+    else
+        strpath = argv[1];
+    std::cout<<strpath.toStdString()<<std::endl;
+    iv::xmlparam::Xmlparam xp(strpath.toStdString());
+
+    int i;
+    for(i=0;i<NUM_MAX_RADAR;i++)
+    {
+        char str[100];
+        snprintf(str,100,"radar%d",i);
+        gstrmemradar[i] = xp.GetParam(str,str);
+    }
+
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}

+ 305 - 0
src/tool/view_radar4d_2d/mainwindow.cpp

@@ -0,0 +1,305 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include <QTime>
+#include <iostream>
+
+
+MainWindow * gw;
+
+extern std::string gstrmemradar[NUM_MAX_RADAR];
+
+void ListenRadar(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+
+    if(nSize<1)return;
+    iv::radar::radarobjectarray xobj;
+
+    if(false == xobj.ParseFromArray(strdata,nSize))
+    {
+        std::cout<<"ListenenRadar fail."<<std::endl;
+        return;
+    }
+
+    int i;
+    int radarindex = -1;
+    for(i=0;i<NUM_MAX_RADAR;i++)
+    {
+        if(strcmp(strmemname,gstrmemradar[i].data()) == 0)
+        {
+            radarindex =i;
+            break;
+        }
+    }
+    if(index >= 0)gw->UpdateRADAR(xobj,radarindex);
+
+}
+
+
+
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    gw = this;
+    ui->setupUi(this);
+
+    mpRadarView = new IVRadarView();
+    mpIVView = mpRadarView;
+    mpIVView->start();
+
+    CreateView();
+
+    int i;
+
+
+    ModuleFun fundetect = std::bind(&MainWindow::UpdateDet,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
+    mpadet = iv::modulecomm::RegisterRecvPlus("radar4ddet",fundetect);
+    ModuleFun funojbect = std::bind(&MainWindow::UpdateObj,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
+    mpaobj = iv::modulecomm::RegisterRecvPlus("radar4dobj",funojbect);
+
+    for(i=0;i<NUM_MAX_RADAR;i++)
+    {
+//        mpa[i] = iv::modulecomm::RegisterRecv(gstrmemradar[i].data(),ListenRadar);
+    }
+//    mpa = iv::modulecomm::RegisterRecv("radar",ListenRadar);
+
+    QTimer * xTimer = new QTimer(this);
+    connect(xTimer,SIGNAL(timeout()),this,SLOT(onTimer()));
+    xTimer->start(10);
+
+    setWindowTitle("View RADAR");
+
+
+}
+
+MainWindow::~MainWindow()
+{
+    QTime xTime;
+    xTime.start();
+
+    mpIVView->requestInterruption();
+
+    while(xTime.elapsed()<1000)
+    {
+        if(mpIVView->isFinished())break;
+    }
+    delete ui;
+}
+
+void MainWindow::resizeEvent(QResizeEvent *event)
+{
+    qDebug("resize");
+    QSize sizemain = ui->centralWidget->size();
+    qDebug("size x = %d y=%d",sizemain.width(),sizemain.height());
+
+    AdjustWPos(sizemain);
+
+}
+
+void MainWindow::AdjustWPos(QSize sizemain)
+{
+    int i;
+    int width = (sizemain.width() - 300)/2;
+    if(width < 0)width = 20;
+    int hgt = (sizemain.height()-20)/2;
+
+    myview->setGeometry(0,10,width*2,hgt*2 );
+    mpGroup->setGeometry(width*2 + 20,10,sizemain.width()-width*2-20,sizemain.height()-20);
+
+ //   mgplidar->setGeometry(sizemain.width()-280,30,260,200);
+}
+
+
+
+void MainWindow::CreateView()
+{
+    myview = new MyView(ui->centralWidget);
+    myview->setObjectName(QStringLiteral("graphicsView"));
+    myview->setGeometry(QRect(30, 30, 600, 600));
+
+    myview->setCacheMode(myview->CacheBackground);
+
+    scene = new QGraphicsScene;
+
+    mpGroup = new QGroupBox(ui->centralWidget);
+    CreateRightView(mpGroup);
+}
+
+void MainWindow::CreateRightView(QGroupBox *pGroup)
+{
+
+   int nXPos;
+   int nYPos = 10;
+
+   int i;
+
+   nXPos = 10;
+//   nYPos = nYPos + 50;
+
+   QCheckBox * pCheck;
+
+   for(i=0;i<NUM_MAX_RADAR;i++)
+   {
+       nXPos = 10;
+       nYPos = nYPos + 50;
+       pCheck = new QCheckBox(pGroup);
+       pCheck->setText(gstrmemradar[i].data());
+       pCheck->setGeometry(nXPos,nYPos,150,30);
+       mpCheck[i] = pCheck;
+   }
+
+   nYPos = nYPos +  300;
+   QPushButton * pSave = new QPushButton(pGroup);
+   pSave->setText(tr("Save Frame"));
+   pSave->setGeometry(nXPos,nYPos,150,50);
+   mpPBSaveFrame = pSave;
+   connect(pSave,SIGNAL(clicked()),this,SLOT(onSaveFrame()));
+
+   nYPos=10;
+   for(i=0;i<NUM_MAX_MSG;i++){
+       nXPos = 160;
+       nYPos = nYPos + 20;
+       pCheck = new QCheckBox(pGroup);
+       pCheck->setText(msgbox[i]);
+       pCheck->setGeometry(nXPos,nYPos,150,20);
+       msgCheck[i]=pCheck;
+       if(i==0||i==1||i==4) pCheck->setChecked(true);
+       connect(msgCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
+
+   }
+
+   for(i=0;i<NUM_MAX_RADAR;i++)
+   {
+       mpCheck[i]->setChecked(true);
+       connect(mpCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
+   }
+
+//    connect(pSL,SIGNAL(valueChanged())),this,SLOT(onChangeWind());
+}
+
+//void MainWindow::SetRADAR(std::array<iv::ObstacleBasic,OBJ_NUM> xobs)
+//{
+////    mpRadarView->SetRADAR(xobs);
+//}
+
+void MainWindow::UpdateRADAR(iv::radar::radarobjectarray radarobj,int index)
+{
+    mpRadarView->SetRADAR(radarobj,index);
+
+   if(mbSaveFrame)
+    {
+       QFile xFile;
+       QString filename = QString("./")+QDateTime::currentDateTime().toString("RADARFRAME_yyyy-MM-dd-hh-mm-ss-zzz")+ QString(".txt");
+       xFile.setFileName(filename);
+       if(xFile.open(QIODevice::ReadWrite))
+       {
+            unsigned int i;
+            unsigned  int nobjsize = radarobj.obj_size();
+            char strline[1000];
+            if(nobjsize>0)
+            {
+                iv::radar::radarobject * pobj = radarobj.mutable_obj(0);
+                (void)pobj;
+                snprintf(strline,1000,"x\ty\tvx\t\vy\tvel\n");
+                xFile.write(strline,strnlen(strline,1000));
+            }
+            for(i=0;i<nobjsize;i++)
+            {
+                iv::radar::radarobject * pobj = radarobj.mutable_obj(i);
+                snprintf(strline,1000,"%6.3f\t%6.3f\t%6.3f\t%6.3f\t%6.3f\n",pobj->x(),pobj->y(),pobj->vx(),pobj->vy(),pobj->vel());
+                xFile.write(strline,strnlen(strline,1000));
+            }
+
+            xFile.close();
+       }
+       else
+       {
+            std::cout<<"save radar frame fail. file path: "<<filename.toStdString()<<std::endl;
+       }
+       mbSaveFrame = false;
+    }
+
+
+}
+
+void MainWindow::onCheckChange()
+{
+    QCheckBox * pCheck = dynamic_cast<QCheckBox *>(this->sender());
+
+    int i;
+    int ncheck = -1;
+    for(i=0;i<NUM_MAX_RADAR;i++)
+    {
+        if(pCheck == mpCheck[i])ncheck = i;
+    }
+
+    if(ncheck<0)
+    for(i=0;i<NUM_MAX_MSG;i++)
+    {
+        if(pCheck == msgCheck[i])ncheck = i+NUM_MAX_RADAR;
+    }
+
+    std::cout<<"check is "<<ncheck<<" "<<pCheck->checkState()<<std::endl;
+    if(ncheck < 0)return;
+
+    mpRadarView->SetCheck(ncheck,pCheck->isChecked());
+}
+
+
+void MainWindow::paintEvent(QPaintEvent * e)
+{
+    (void)e;
+    if(!mpRadarView->IsHaveNew())return;
+
+    QImage image = mpRadarView->GetImage();
+
+    scene->clear();
+    scene->addPixmap(QPixmap::fromImage(image));
+    myview->setScene(scene);
+    myview->show();
+}
+
+void MainWindow::onTimer()
+{
+    update();
+}
+
+void MainWindow::onSaveFrame()
+{
+    mbSaveFrame = true;
+}
+
+
+void MainWindow::UpdateDet(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    (void)index;
+    (void)dt;
+    (void)strmemname;
+    iv::radar::radar4ddetectarray xdetarray;
+    if(xdetarray.ParseFromArray(strdata,(int)nSize))
+    {
+        mpRadarView->SetRADAR4DDet(xdetarray);
+    }
+    else
+    {
+        std::cout<<"detection parse fail."<<std::endl;
+    }
+}
+
+void MainWindow::UpdateObj(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    (void)index;
+    (void)dt;
+    (void)strmemname;
+    iv::radar::radar4dobjectarray xobjarray;
+    if(xobjarray.ParseFromArray(strdata,(int)nSize))
+    {
+        mpRadarView->SetRADAR4DObj(xobjarray);
+    }
+    else
+    {
+        std::cout<<"object parse fail."<<std::endl;
+    }
+}

+ 83 - 0
src/tool/view_radar4d_2d/mainwindow.h

@@ -0,0 +1,83 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+#include <QCheckBox>
+#include <QGroupBox>
+#include <QPushButton>
+
+#include "ivradarview.h"
+#include "ivview.h"
+#include "myview.h"
+
+#include "modulecomm.h"
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+public:
+     void resizeEvent(QResizeEvent *event);
+
+private:
+     void AdjustWPos(QSize sizemain);
+
+private:
+    void CreateView();
+    void CreateRightView(QGroupBox * pGroup);
+
+private slots:
+    void onCheckChange();
+
+     virtual void paintEvent(QPaintEvent *);
+
+   void onTimer();
+
+     void onSaveFrame();
+
+private:
+    Ui::MainWindow *ui;
+
+    QCheckBox * mpCheck[NUM_MAX_RADAR];
+    QCheckBox * msgCheck[NUM_MAX_MSG];
+    QGroupBox * mpGroup;
+
+    QPushButton * mpPBSaveFrame;
+
+    MyView *myview;
+    QGraphicsScene *scene;
+
+    IVRadarView * mpRadarView;
+
+    IVView * mpIVView;
+
+    void * mpa[NUM_MAX_RADAR];
+
+    bool mbSaveFrame = false;
+
+public:
+    QString msgbox[NUM_MAX_MSG]={"x","y","vx","vy","速度标量",
+                       "数据可信标志","极坐标下距离","纵向速度","纵向加速度","位置角度",
+                       "宽度","组别变化","相向移动","横向速度","目标被追踪模式",
+                       "追踪状态","桥梁标志","运动","快速运动","慢速运动",
+                       "信号反射强度","目标置信度","目标检测状态","长距雷达","中距雷达"};
+    void UpdateRADAR(iv::radar::radarobjectarray radarobj,int index);
+
+private:
+    void * mpadet;
+    void * mpaobj;
+    void UpdateDet(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
+    void UpdateObj(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
+//    void SetRADAR(iv);
+};
+
+#endif // MAINWINDOW_H

+ 24 - 0
src/tool/view_radar4d_2d/mainwindow.ui

@@ -0,0 +1,24 @@
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>MainWindow</string>
+  </property>
+  <widget class="QMenuBar" name="menuBar" />
+  <widget class="QToolBar" name="mainToolBar" />
+  <widget class="QWidget" name="centralWidget" />
+  <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>

+ 120 - 0
src/tool/view_radar4d_2d/myview.cpp

@@ -0,0 +1,120 @@
+#include "myview.h"
+#include <QScrollBar>
+#include <iostream>
+#define VIEW_CENTER viewport()->rect().center()
+const double PI = 3.1415926535898;
+
+MyView::MyView(QWidget *parent) :
+     QGraphicsView(parent),
+    beishu(1.00000)
+{
+    setDragMode(QGraphicsView::ScrollHandDrag);
+}
+
+void MyView::mousePressEvent(QMouseEvent *event)
+{
+//    qDebug("x is %d",event->pos().x());
+    bottonstatus = true;
+    QGraphicsView::mousePressEvent(event);
+}
+void MyView::mouseMoveEvent(QMouseEvent *event)
+{
+    QGraphicsView::mouseMoveEvent(event);
+//    QScrollBar * ps = verticalScrollBar();
+//    std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
+//    QScrollBar * ps2= horizontalScrollBar();
+//     std::cout<<" size is "<<ps2->size().width()<<" h = "<<ps2->value()<<std::endl;
+}
+void MyView::mouseReleaseEvent(QMouseEvent *event)
+{
+    bottonstatus = false;
+    QGraphicsView::mouseReleaseEvent(event);
+}
+
+// 放大/缩小
+void MyView::wheelEvent(QWheelEvent *event)
+{
+    // 滚轮的滚动量
+    QPoint scrollAmount = event->angleDelta();
+    // 正值表示滚轮远离使用者(放大),负值表示朝向使用者(缩小)
+    scrollAmount.y() > 0 ? zoomIn() : zoomOut();
+}
+
+
+// 放大
+void MyView::zoomIn()
+{
+
+    int width,hgt;
+    width = sceneRect().width();
+    hgt = sceneRect().height();
+    QScrollBar * psV = verticalScrollBar();
+    QScrollBar * psH = horizontalScrollBar();
+
+    int centery = (psV->value() + psV->size().height()/2)/beishu;
+    int centerx = (psH->value() + psH->size().width()/2)/beishu;
+
+    scale(1.1, 1.1);
+    beishu *= 1.1;
+ //   centerOn(450, 700 - (200 / beishu));
+
+
+
+
+
+    centerOn(centerx,centery);
+
+//    QPoint x = viewport()->rect().center();
+
+
+//    std::cout<<" x is"<<sceneRect().bottom()<<" y is "<<sceneRect().y()<<std::endl;
+//    QScrollBar * ps = verticalScrollBar();
+//    std::cout<<" size is "<<ps->size().height()<<" v = "<<ps->value()<<std::endl;
+
+}
+
+// 缩小
+void MyView::zoomOut()
+{
+
+    int width,hgt;
+    width = sceneRect().width();
+    hgt = sceneRect().height();
+    QScrollBar * psV = verticalScrollBar();
+    QScrollBar * psH = horizontalScrollBar();
+
+    int centery = (psV->value() + psV->size().height()/2)/beishu;
+    int centerx = (psH->value() + psH->size().width()/2)/beishu;
+
+    scale(1 / 1.1, 1 / 1.1);
+    beishu /= 1.1;
+//    centerOn(450, 700 - (200 / beishu));
+
+    centerOn(centerx,centery);
+}
+
+void MyView::mouseDoubleClickEvent(QMouseEvent *event)
+{
+
+    QScrollBar * psV = verticalScrollBar();
+    QScrollBar * psH = horizontalScrollBar();
+
+    int centery = (psV->value() + psV->size().height()/2)/beishu;
+    int centerx = (psH->value() + psH->size().width()/2)/beishu;
+
+
+//    qDebug("x is %d y is %d view center x is %d  centerx is %d",event->pos().x(),
+//           event->pos().y(),
+//           viewport()->rect().center().x(),centerx);
+
+    int viewx,viewy;
+    if(beishu == 0)return;
+    viewx = centerx +(event->pos().x() - viewport()->rect().center().x())/beishu;
+    viewy = centery +(event->pos().y() - viewport()->rect().center().y())/beishu;
+
+    QPoint viewpoint;
+    viewpoint.setX(viewx);
+    viewpoint.setY(viewy);
+
+//    qDebug("view x is %d view y is %d ",viewx,viewy);
+}

+ 35 - 0
src/tool/view_radar4d_2d/myview.h

@@ -0,0 +1,35 @@
+#ifndef MYVIEW_H
+#define MYVIEW_H
+
+#include <qtimer.h>
+#include <qpainter.h>
+#include <QGraphicsView>
+#include <QWheelEvent>
+#include <QKeyEvent>
+#include <QPoint>
+#include <QPointF>
+#include <QGraphicsItem>
+#include <QKeyEvent>
+
+class MyView : public QGraphicsView
+{
+    Q_OBJECT
+
+public:
+    explicit MyView(QWidget *parent =0);
+    qreal x, y, beishu;
+protected:
+    void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
+    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+    void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+    void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+public Q_SLOTS:
+    void zoomIn();  // 放大
+    void zoomOut();  // 缩小
+private:
+    bool bottonstatus = false;
+    QPoint myview_lastMousePos;
+};
+
+#endif // MYVIEW_H

+ 65 - 0
src/tool/view_radar4d_2d/view_radar4d_2d.pro

@@ -0,0 +1,65 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2019-11-12T14:22:23
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = view_radar
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+
+QMAKE_LFLAGS += -no-pie
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+
+SOURCES += \
+    ../../include/msgtype/radar4ddetect.pb.cc \
+    ../../include/msgtype/radar4ddetectarray.pb.cc \
+    ../../include/msgtype/radar4dobject.pb.cc \
+    ../../include/msgtype/radar4dobjectarray.pb.cc \
+        main.cpp \
+        mainwindow.cpp \
+    ivradarview.cpp \
+    ivview.cpp \
+    myview.cpp \
+    ../../include/msgtype/radarobject.pb.cc \
+    ../../include/msgtype/radarobjectarray.pb.cc
+
+HEADERS += \
+    ../../include/msgtype/radar4ddetect.pb.h \
+    ../../include/msgtype/radar4ddetectarray.pb.h \
+    ../../include/msgtype/radar4dobject.pb.h \
+    ../../include/msgtype/radar4dobjectarray.pb.h \
+        mainwindow.h \
+    ivradarview.h \
+    ivview.h \
+    myview.h \
+    ../../include/msgtype/radarobject.pb.h \
+    ../../include/msgtype/radarobjectarray.pb.h
+
+FORMS += \
+        mainwindow.ui
+
+
+!include(../../../include/common.pri ) {
+    error( "Couldn't find the common.pri file!" )
+}
+
+!include(../../../include/ivprotobuf.pri ) {
+    error( "Couldn't find the ivprotobuf.pri file!" )
+}
+