mainwindow.h 11 KB

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