mainwindow.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QTime>
  4. #include <iostream>
  5. MainWindow * gw;
  6. extern std::string gstrmemradar[NUM_MAX_RADAR];
  7. void ListenRadar(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  8. {
  9. if(nSize<1)return;
  10. iv::radar::radarobjectarray xobj;
  11. if(false == xobj.ParseFromArray(strdata,nSize))
  12. {
  13. std::cout<<"ListenenRadar fail."<<std::endl;
  14. return;
  15. }
  16. int i;
  17. int radarindex = -1;
  18. for(i=0;i<NUM_MAX_RADAR;i++)
  19. {
  20. if(strcmp(strmemname,gstrmemradar[i].data()) == 0)
  21. {
  22. radarindex =i;
  23. break;
  24. }
  25. }
  26. if(index >= 0)gw->UpdateRADAR(xobj,radarindex);
  27. }
  28. MainWindow::MainWindow(QWidget *parent) :
  29. QMainWindow(parent),
  30. ui(new Ui::MainWindow)
  31. {
  32. gw = this;
  33. ui->setupUi(this);
  34. mpRadarView = new IVRadarView();
  35. mpIVView = mpRadarView;
  36. mpIVView->start();
  37. CreateView();
  38. int i;
  39. for(i=0;i<NUM_MAX_RADAR;i++)
  40. {
  41. mpa[i] = iv::modulecomm::RegisterRecv(gstrmemradar[i].data(),ListenRadar);
  42. }
  43. // mpa = iv::modulecomm::RegisterRecv("radar",ListenRadar);
  44. QTimer * xTimer = new QTimer(this);
  45. connect(xTimer,SIGNAL(timeout()),this,SLOT(onTimer()));
  46. xTimer->start(10);
  47. setWindowTitle("View RADAR");
  48. }
  49. MainWindow::~MainWindow()
  50. {
  51. QTime xTime;
  52. xTime.start();
  53. mpIVView->requestInterruption();
  54. while(xTime.elapsed()<1000)
  55. {
  56. if(mpIVView->isFinished())break;
  57. }
  58. delete ui;
  59. }
  60. void MainWindow::resizeEvent(QResizeEvent *event)
  61. {
  62. qDebug("resize");
  63. QSize sizemain = ui->centralWidget->size();
  64. qDebug("size x = %d y=%d",sizemain.width(),sizemain.height());
  65. AdjustWPos(sizemain);
  66. }
  67. void MainWindow::AdjustWPos(QSize sizemain)
  68. {
  69. int i;
  70. int width = (sizemain.width() - 300)/2;
  71. if(width < 0)width = 20;
  72. int hgt = (sizemain.height()-20)/2;
  73. myview->setGeometry(0,10,width*2,hgt*2 );
  74. mpGroup->setGeometry(width*2 + 20,10,sizemain.width()-width*2-20,sizemain.height()-20);
  75. // mgplidar->setGeometry(sizemain.width()-280,30,260,200);
  76. }
  77. void MainWindow::CreateView()
  78. {
  79. myview = new MyView(ui->centralWidget);
  80. myview->setObjectName(QStringLiteral("graphicsView"));
  81. myview->setGeometry(QRect(30, 30, 600, 600));
  82. myview->setCacheMode(myview->CacheBackground);
  83. scene = new QGraphicsScene;
  84. mpGroup = new QGroupBox(ui->centralWidget);
  85. CreateRightView(mpGroup);
  86. }
  87. void MainWindow::CreateRightView(QGroupBox *pGroup)
  88. {
  89. int nXPos;
  90. int nYPos = 10;
  91. int i;
  92. nXPos = 10;
  93. // nYPos = nYPos + 50;
  94. QCheckBox * pCheck;
  95. for(i=0;i<NUM_MAX_RADAR;i++)
  96. {
  97. nXPos = 10;
  98. nYPos = nYPos + 50;
  99. pCheck = new QCheckBox(pGroup);
  100. pCheck->setText(gstrmemradar[i].data());
  101. pCheck->setGeometry(nXPos,nYPos,150,30);
  102. mpCheck[i] = pCheck;
  103. }
  104. nYPos = nYPos + 300;
  105. QPushButton * pSave = new QPushButton(pGroup);
  106. pSave->setText(tr("Save Frame"));
  107. pSave->setGeometry(nXPos,nYPos,150,50);
  108. mpPBSaveFrame = pSave;
  109. connect(pSave,SIGNAL(clicked()),this,SLOT(onSaveFrame()));
  110. nYPos=10;
  111. for(i=0;i<NUM_MAX_MSG;i++){
  112. nXPos = 160;
  113. nYPos = nYPos + 20;
  114. pCheck = new QCheckBox(pGroup);
  115. pCheck->setText(msgbox[i]);
  116. pCheck->setGeometry(nXPos,nYPos,150,20);
  117. msgCheck[i]=pCheck;
  118. if(i==0||i==1||i==4) pCheck->setChecked(true);
  119. connect(msgCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
  120. }
  121. for(i=0;i<NUM_MAX_RADAR;i++)
  122. {
  123. mpCheck[i]->setChecked(true);
  124. connect(mpCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
  125. }
  126. // connect(pSL,SIGNAL(valueChanged())),this,SLOT(onChangeWind());
  127. }
  128. //void MainWindow::SetRADAR(std::array<iv::ObstacleBasic,OBJ_NUM> xobs)
  129. //{
  130. //// mpRadarView->SetRADAR(xobs);
  131. //}
  132. void MainWindow::UpdateRADAR(iv::radar::radarobjectarray radarobj,int index)
  133. {
  134. mpRadarView->SetRADAR(radarobj,index);
  135. if(mbSaveFrame)
  136. {
  137. QFile xFile;
  138. QString filename = QString("./")+QDateTime::currentDateTime().toString("RADARFRAME_yyyy-MM-dd-hh-mm-ss-zzz")+ QString(".txt");
  139. xFile.setFileName(filename);
  140. if(xFile.open(QIODevice::ReadWrite))
  141. {
  142. unsigned int i;
  143. unsigned int nobjsize = radarobj.obj_size();
  144. char strline[1000];
  145. if(nobjsize>0)
  146. {
  147. iv::radar::radarobject * pobj = radarobj.mutable_obj(0);
  148. (void)pobj;
  149. snprintf(strline,1000,"x\ty\tvx\t\vy\tvel\n");
  150. xFile.write(strline,strnlen(strline,1000));
  151. }
  152. for(i=0;i<nobjsize;i++)
  153. {
  154. iv::radar::radarobject * pobj = radarobj.mutable_obj(i);
  155. 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());
  156. xFile.write(strline,strnlen(strline,1000));
  157. }
  158. xFile.close();
  159. }
  160. else
  161. {
  162. std::cout<<"save radar frame fail. file path: "<<filename.toStdString()<<std::endl;
  163. }
  164. mbSaveFrame = false;
  165. }
  166. }
  167. void MainWindow::onCheckChange()
  168. {
  169. QCheckBox * pCheck = dynamic_cast<QCheckBox *>(this->sender());
  170. int i;
  171. int ncheck = -1;
  172. for(i=0;i<NUM_MAX_RADAR;i++)
  173. {
  174. if(pCheck == mpCheck[i])ncheck = i;
  175. }
  176. if(ncheck<0)
  177. for(i=0;i<NUM_MAX_MSG;i++)
  178. {
  179. if(pCheck == msgCheck[i])ncheck = i+NUM_MAX_RADAR;
  180. }
  181. std::cout<<"check is "<<ncheck<<" "<<pCheck->checkState()<<std::endl;
  182. if(ncheck < 0)return;
  183. mpRadarView->SetCheck(ncheck,pCheck->isChecked());
  184. }
  185. void MainWindow::paintEvent(QPaintEvent * e)
  186. {
  187. (void)e;
  188. if(!mpRadarView->IsHaveNew())return;
  189. QImage image = mpRadarView->GetImage();
  190. scene->clear();
  191. scene->addPixmap(QPixmap::fromImage(image));
  192. myview->setScene(scene);
  193. myview->show();
  194. }
  195. void MainWindow::onTimer()
  196. {
  197. update();
  198. }
  199. void MainWindow::onSaveFrame()
  200. {
  201. mbSaveFrame = true;
  202. }