mainwindow.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include "myview.h"
  5. #include "gps_type.h"
  6. #include <iostream>
  7. #include <fstream>
  8. #include <QLineEdit>
  9. #include <QPushButton>
  10. #include <QLabel>
  11. #include <QGroupBox>
  12. #include <QGridLayout>
  13. #include <QTabWidget>
  14. #include <QFileDialog>
  15. #include <QProgressBar>
  16. #include <QSlider>
  17. #include <QComboBox>
  18. #include <QDateTime>
  19. #include <QMessageBox>
  20. #include <QCheckBox>
  21. #include <QSlider>
  22. #include <QMutex>
  23. //#include "linedata.h"
  24. //#include "ttx.pb.h"
  25. #include "OpenDrive/OpenDrive.h"
  26. #include "OpenDrive/OpenDriveXmlWriter.h"
  27. #include "OpenDrive/OpenDriveXmlParser.h"
  28. #include "modulecomm.h"
  29. #include "geofit.h"
  30. #include "autoconnect.h"
  31. #include "speeddialog.h"
  32. #include "trafficlightdialog.h"
  33. #include "roadeditdialog.h"
  34. #include "dialogaddroadfromrtk.h"
  35. #include <iostream>
  36. #include <map>
  37. #include <math.h>
  38. #include <vector>
  39. #include <map>
  40. #include <Eigen/Core>
  41. #include <Eigen/QR>
  42. // inlcude iostream and string libraries
  43. #include <iostream>
  44. #include <fstream>
  45. #include <string>
  46. using namespace std;
  47. using namespace Eigen;
  48. #include "rawtype.h"
  49. #include "xodrmake.h"
  50. #include "roaddigit.h"
  51. #include "xodrscenfunc.h"
  52. namespace Ui {
  53. class MainWindow;
  54. }
  55. class MainWindow : public QMainWindow
  56. {
  57. Q_OBJECT
  58. public:
  59. explicit MainWindow(QWidget *parent = 0);
  60. ~MainWindow();
  61. private:
  62. Ui::MainWindow *ui;
  63. QImage *image;
  64. QPainter *painter;
  65. MyView *myview;
  66. QTimer *timer;
  67. QGraphicsScene *scene;
  68. QGraphicsScene * mpscene;
  69. public:
  70. static void ComboToString(std::string strroadid,QComboBox * pCB);
  71. public:
  72. void resizeEvent(QResizeEvent *event);
  73. private:
  74. void AdjustWPos(QSize sizemain);
  75. void ExecPainter();
  76. private slots:
  77. virtual void paintEvent(QPaintEvent *);
  78. void onTimer();
  79. void onClickXY(double x,double y);
  80. void onChangeScale(int scale);
  81. void onChangeMoveX(int scale);
  82. void onChangeMoveY(int scale);
  83. void onChangeMark(int scale);
  84. void onClickDefView();
  85. void onClickZoomOne();
  86. void onClickAsStart();
  87. void onClickAsDst();
  88. void onClickSetDst();
  89. void onClickPlan();
  90. void onClickSetStart();
  91. void onClickLoadLane();
  92. void onClickRemoveLane();
  93. void onClickMarkLane();
  94. void onClickToRoad();
  95. void onClickToOpposite();
  96. void onClickClearRoadLane();
  97. void onClickAddRoad();
  98. void onClickRoadContact();
  99. void onClickLoad();
  100. void onClickSave();
  101. void onClickLaneContact();
  102. void onClickOpLaneContact();
  103. void onClickCreateRoad();
  104. void onChangeRoadType(int index);
  105. void onClickRoadDel();
  106. void onClickRoadMark();
  107. void onClickCBRoadChange(int index);
  108. void onClickCBJunctionChange(int index);
  109. void onClickCBJunctionConnectionChange(int index);
  110. void onClickCBJunctionIncommingChange(int index);
  111. void onClickCBJunctionConnectionroadChange(int index);
  112. void onClickCreateJunction();
  113. void onClickCreateJunctionLaneLink();
  114. void onClickDeleteJunctionLaneLink();
  115. void onClickPreNxtRoadChange(int index);
  116. void onClickSetRoadPredecessor();
  117. void onClickSetRoadSuccessor();
  118. void onClickDelRoadPredecessor();
  119. void onClickDelRoadSuccessor();
  120. void onClickAutoConnect();
  121. void onClickSetMove();
  122. void onClickReSetMove();
  123. void on_actionLoad_triggered();
  124. void on_actionSave_triggered();
  125. void on_actionAutoConnect_triggered();
  126. void on_actionSet_Speed_triggered();
  127. void closeEvent(QCloseEvent * event);
  128. void on_actionSet_Traffic_Light_triggered();
  129. void on_actionEdit_Road_Lane_triggered();
  130. void on_actionEdit_Road_triggered();
  131. void on_actionAdd_Road_From_RTK_triggered();
  132. void on_actionSummary_Road_triggered();
  133. void on_actionSplit_Road_triggered();
  134. void onViewModeChange(int index);
  135. private:
  136. private:
  137. QGroupBox * mgpright;
  138. QScrollArea * mgpScroll;
  139. void CreateRightView(QGroupBox * pGroup);
  140. QTabWidget * mTabMain;
  141. void CreateTab1View(QTabWidget * p);
  142. QLineEdit * mpLEMarkPoint;
  143. int mnMarkPoint = 100;
  144. QLineEdit * mpLEPointData[3];
  145. QLineEdit * mpLELineStart,* mpLELineEnd;
  146. QLineEdit * mpLESampleDis;
  147. QLineEdit * mpLEMarkGeo;
  148. QLineEdit * mpLEGeo[9];
  149. QLineEdit * mpLEMarkGeo_Slider_u;
  150. QLineEdit * mpLEMarkGeo_Slider_v;
  151. QSlider * mpSLMarkGeo_u;
  152. QSlider * mpSLMarkGeo_v;
  153. QLineEdit * mpLEOff;
  154. QLineEdit * mpLECurvature;
  155. int mnfac = 1;
  156. double mfSampleDis = 1.0;
  157. double mClickX,mClickY;
  158. bool mbClick = false;
  159. double mfObjX,mfObjY;
  160. bool mbSetObj = false;
  161. double mfManualX,mfManualY,mfManualHdg;
  162. double mfNowX,mfNowY,mfNowHdg;
  163. bool mbGPSUpdate = true;
  164. bool mbSetManualStart = false;
  165. bool mbGPSViewUpdate = false;
  166. QLineEdit * mpLEConGeoStart, * mpLEConGeoEnd;
  167. QLineEdit * mpLEConGeo_Slider_u;
  168. QLineEdit * mpLEConGeo_Slider_v;
  169. QSlider * mpSLConGeo_u;
  170. QSlider * mpSLConGeo_v;
  171. // QLineEdit * mpLERoadName;
  172. // QComboBox * mpCBRoad;
  173. // QComboBox * mpCBGeo;
  174. QLineEdit * mpLERoadGeo;
  175. QLineEdit * mpLELat0,* mpLELon0,* mpLEHead0;
  176. QComboBox * mpCBLane;
  177. QComboBox * mpCBSelLane , *mpCBSelOpLane;
  178. QComboBox * mpCBRoad;
  179. QComboBox * mpCBRoad1, * mpCBRC1, * mpCBRoad2, * mpCBRC2;
  180. QComboBox * mpCBRoadCon;
  181. QComboBox * mpCBLane1, * mpCBLane2 , * mpCBLane1Lane2, * mpCBLane1Lane2op;
  182. QComboBox * mpCBRoadType;
  183. QLineEdit * mpLERoadType;
  184. QLabel * mpLBRoadType;
  185. double mx0,my0;
  186. OpenDrive mxodr;
  187. bool mbRefresh = true;
  188. bool mbInit = false;
  189. QLineEdit * mpLE_SelX, * mpLE_SelY, * mpLE_SelLat, * mpLE_SelLon;
  190. QCheckBox * mpCheckFromSel, * mpCheckToSel;
  191. // QLineEdit * mpLE_StartLat, * mpLE_StartLon, * mpLE_StartHeading;
  192. // QLineEdit * mpLE_EndLat, * mpLE_EndLon;
  193. int mnFontHeight;
  194. int mnMoveX;
  195. int mnMoveY;
  196. double mfViewMoveX = 0;
  197. double mfViewMoveY = 0;
  198. int mnMarkSize = 5;
  199. int mnDefmnfac,mnDefMoveX,mnDefMoveY;
  200. QSlider * mpSlider_Scale, * mpSlider_MoveX, * mpSlider_MoveY;
  201. QSlider * mpSlider_Mark;
  202. QLineEdit * mpLE_Scale, * mpLE_MoveX, * mpLE_MoveY, * mpLE_Mark;
  203. QLineEdit * mpLE_CurLon,*mpLE_CurLat,* mpLE_CurHeading;
  204. QLineEdit * mpLE_DstLon,* mpLE_DstLat;
  205. QLineEdit * mpLE_LaneSel;
  206. QLineEdit * mpLE_StartLon,* mpLE_StartLat,*mpLE_StartHeading;
  207. QLineEdit * mpLE_RoadName;
  208. QLabel * mpLabelRoadShowPreType1,* mpLabelRoadShowPreType2,* mpLabelRoadShowPreID;
  209. QLabel * mpLabelRoadShowNxtType1,* mpLabelRoadShowNxtType2,* mpLabelRoadShowNxtID;
  210. QComboBox * mpCBRoadShowPre, * mpCBRoadShowNext;
  211. QComboBox * mpCBJunctionIncommingRoad, * mpCBJunctionConnectingRoad;
  212. QComboBox * mpCBJunctionContactPoint;
  213. QComboBox * mpCBJunctionFromLane, * mpCBJunctionToLane;
  214. QComboBox * mpCBJunction, * mpCBJunctionConnection;
  215. QLabel * mpLabelJunctionIncommingRoad, * mpLabelJunctionConnectingRoad;
  216. QLabel * mpLabelJunctionContactPoint;
  217. QComboBox * mpCBJunctionFromTo;
  218. QComboBox * mpCBPreNxtRoad, * mpCBPreNxtRelLane, * mpCBPreNxtConatact;
  219. QLabel * mpLabel_Status;
  220. QLineEdit * mpLEViewMoveX, * mpLEViewMoveY;
  221. void * mpasrc,*mpadst,*mpatrace;
  222. QMutex mMutexNavi;
  223. std::vector<iv::GPSData> m_navigation_data;
  224. void * mpagpsimu;
  225. public:
  226. int CreateRoadID(int ntype = 0); //Create Road ID for new road. default:road 1:not create by lane road.
  227. private:
  228. void UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  229. void UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  230. std::vector<iv::lpunit> mvectorlp;
  231. std::vector<int> mvectorroadlane;
  232. std::vector<int> mvectorroadopposite;
  233. std::vector<iv::roadcontact> mvectorrc;
  234. bool mbSetOrigin = false;
  235. int mnRoadIndex = 10001;
  236. bool mbShowLane = true;
  237. bool mbShowXODR = true;
  238. int mnMarkLane = -1;
  239. // OpenDrive mxodr;
  240. Road CreateRoad(Eigen::VectorXd xvals, Eigen::VectorXd yvals);
  241. int CreateJunctionID();
  242. int GetEndPoint(Road * proad,double & x, double & y, double & hdg);
  243. std::vector<geobase> CreateLineGeo(double startx,double starty,double starthdg,double endx,double endy,double endhdg);
  244. std::vector<geobase> CreateTurnGeo(double startx,double starty,double starthdg,double endx,double endy,double endhdg,double R);
  245. std::vector<geobase> CreateUTurnGeo(double startx,double starty,double starthdg,double endx,double endy,double endhdg,double fextend);
  246. double getoff(Road * p,int nlane,bool bstart = true);
  247. double getlanewidth(Road * p,int nlane,bool bstart = true);
  248. std::string getlanetype(Road * p,int nlane,bool bstart = true);
  249. void ChangeXODRRoadID(OpenDrive * pxodr,int index,int newid);
  250. void ChangeXODRJunctionID(OpenDrive * pxodr,int index,int newid);
  251. void MoveXODR(OpenDrive * pxodr,double movex,double movey);
  252. int FindNewRoadID(OpenDrive * pxodr1,OpenDrive * pxodr2);
  253. int FindNewJunctionID(OpenDrive * pxodr1,OpenDrive * pxodr2);
  254. void updateCBRoad();
  255. void updateJunction();
  256. int mnViewMode = 0; //Use Scene
  257. void UpdateScene();
  258. std::vector<QGraphicsPathItem *> mvectorviewitem;
  259. };
  260. #endif // MAINWINDOW_H