mainwindow.h 9.5 KB

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