|
@@ -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;
|
|
|
+ }
|
|
|
+}
|