mainwindow.h 9.2 KB

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