mainwindow.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <iostream>
  4. #include <QMessageBox>
  5. #include <math.h>
  6. #include "google/protobuf/io/zero_copy_stream_impl.h"
  7. #include "google/protobuf/text_format.h"
  8. #include <QFileDialog>
  9. #define VIEW_WIDTH 6000
  10. #define VIEW_HEIGHT 6000
  11. MainWindow::MainWindow(QWidget *parent) :
  12. QMainWindow(parent),
  13. ui(new Ui::MainWindow)
  14. {
  15. ui->setupUi(this);
  16. setWindowTitle(tr("SIASUN Remote Control"));
  17. mmyview = new MyView(ui->Map);
  18. mmyview->setObjectName(QStringLiteral("graphicsView"));
  19. mmyview->setGeometry(QRect(0, 0, 800, 530));
  20. mmyview->setCacheMode(mmyview->CacheBackground);
  21. mpscene = new QGraphicsScene;
  22. mpscene = new QGraphicsScene(0,0,VIEW_WIDTH,VIEW_HEIGHT);
  23. mpscene->setBackgroundBrush(Qt::white);
  24. mmyview->setScene(mpscene);
  25. mmyview->centerOn(VIEW_WIDTH/2,VIEW_HEIGHT/2);
  26. ui->tabWidget->setCurrentIndex(0);
  27. mpdkp = new DialogKickPoint(&msissunmap, this);
  28. connect(mmyview,SIGNAL(dbclickxy(double,double)),this,SLOT(ondbclick(double,double)));
  29. ui->actionSelect_None->setChecked(true);
  30. ui->actionSelect_Kick->setChecked(false);
  31. ui->actionSelect_Point->setChecked(false);
  32. }
  33. MainWindow::~MainWindow()
  34. {
  35. delete ui;
  36. }
  37. void MainWindow::paintEvent(QPaintEvent * event)
  38. {
  39. (void)event;
  40. static double foldratio = 1.0;
  41. double ratio = mmyview->getbeishu();
  42. if(fabs(ratio - foldratio)>0.000001)
  43. {
  44. foldratio = ratio;
  45. double fscale = 1.0/ratio;
  46. unsigned int i;
  47. for(i=0;i<mvectorPickPointItem.size();i++)
  48. {
  49. mvectorPickPointItem[i]->setScale(fscale);
  50. }
  51. for(i=0;i<mvectorMapPointItem.size();i++)
  52. {
  53. mvectorMapPointItem[i]->setScale(fscale);
  54. }
  55. for(i=0;i<(int)mvectorwidthline.size();i++)
  56. {
  57. mvectorwidthline[i]->ChangeWidth(mfLineWidth*fscale);
  58. }
  59. if(mpSelectPointItem != NULL)
  60. {
  61. mpSelectPointItem->setScale(fscale);
  62. }
  63. }
  64. mmyview->setScene(mpscene);
  65. }
  66. void MainWindow::resizeEvent(QResizeEvent *event)
  67. {
  68. (void)event;
  69. QSize sizemain = ui->centralWidget->size();
  70. ui->tabWidget->setGeometry(0,0,sizemain.width(),sizemain.height());
  71. QSize sizemap = ui->Map->size();
  72. mmyview->setGeometry(0,0,sizemap.width(),sizemap.height());
  73. }
  74. void MainWindow::on_actionInsert_Kick_Point_triggered()
  75. {
  76. mpdkp->setModal(false);
  77. mpdkp->show();
  78. }
  79. void MainWindow::on_actionSave_triggered()
  80. {
  81. // QString strfilepath = "/home/yuchuli/testsia.txt";
  82. QString str = QFileDialog::getSaveFileName(this,tr("Save Data"),".","*.txt");
  83. if(str.isEmpty())return;
  84. QString strfilepath = str;
  85. using google::protobuf::TextFormat;
  86. using google::protobuf::io::FileOutputStream;
  87. using google::protobuf::io::ZeroCopyOutputStream;
  88. std::string strout;
  89. ZeroCopyOutputStream *output = new google::protobuf::io::StringOutputStream(&strout);//new FileOutputStream(file_descriptor);
  90. bool success = TextFormat::Print(msissunmap, output);
  91. if(success)
  92. {
  93. QFile xFile;
  94. xFile.setFileName(strfilepath);
  95. if(xFile.open(QIODevice::ReadWrite))
  96. {
  97. xFile.write(strout.data(),strout.size());
  98. xFile.close();
  99. }
  100. // std::cout<<strout<<std::endl;
  101. // qDebug(strout.data());
  102. }
  103. delete output;
  104. }
  105. void MainWindow::on_actionLoad_triggered()
  106. {
  107. // QString strfilepath = "/home/yuchuli/testsia.txt";
  108. QString str = QFileDialog::getOpenFileName(this,tr("Load Data"),".","*.txt");
  109. if(str.isEmpty())return;
  110. QString strfilepath = str;
  111. QFile xFile;
  112. xFile.setFileName(strfilepath);
  113. QByteArray ba;
  114. if(xFile.open(QIODevice::ReadOnly))
  115. {
  116. ba = xFile.readAll();
  117. xFile.close();
  118. }
  119. else
  120. {
  121. QMessageBox::warning(this,tr("Warning"),tr("Open File Fail."),QMessageBox::YesAll);
  122. return;
  123. }
  124. using google::protobuf::TextFormat;
  125. using google::protobuf::io::FileInputStream;
  126. using google::protobuf::io::ZeroCopyInputStream;
  127. std::string strout;
  128. ZeroCopyInputStream *input = new google::protobuf::io::ArrayInputStream(ba.data(),ba.size());//new FileOutputStream(file_descriptor);
  129. iv::siasun::map xsiasun;
  130. bool success = TextFormat::Parse(input,&xsiasun);
  131. if(success)
  132. {
  133. msissunmap.CopyFrom(xsiasun);
  134. }
  135. else
  136. {
  137. QMessageBox::warning(this,tr("Warning"),tr("Load map fail."),QMessageBox::YesAll);
  138. delete input;
  139. return;
  140. }
  141. delete input;
  142. if(msissunmap.mutable_mkickarray()->mkick_size() == 0)
  143. {
  144. return;
  145. }
  146. iv::siasun::kickpointarray * pkickarray = msissunmap.mutable_mkickarray();
  147. iv::siasun::waypointarray * pwayarray = msissunmap.mutable_mwayarray();
  148. int i;
  149. mlon0 = pkickarray->mutable_mkick(0)->mflon();
  150. mlat0 = pkickarray->mutable_mkick(0)->mflat();
  151. if(mpSelectMapPointItem != NULL)
  152. {
  153. mpscene->removeItem(mpSelectMapPointItem);
  154. delete mpSelectMapPointItem;
  155. mpSelectMapPointItem = NULL;
  156. }
  157. if(mpSelectPointItem != NULL)
  158. {
  159. mpscene->removeItem(mpSelectPointItem);
  160. delete mpSelectPointItem;
  161. mpSelectPointItem = NULL;
  162. }
  163. for(i=0;i<(int)mvectorPickPointItem.size();i++)
  164. {
  165. mpscene->removeItem(mvectorPickPointItem[i]);
  166. delete mvectorPickPointItem[i];
  167. }
  168. mvectorPickPointItem.clear();
  169. for(i=0;i<(int)mvectorMapPointItem.size();i++)
  170. {
  171. mpscene->removeItem(mvectorMapPointItem[i]);
  172. delete mvectorMapPointItem[i];
  173. }
  174. mvectorMapPointItem.clear();
  175. for(i=0;i<pkickarray->mkick_size();i++)
  176. {
  177. iv::siasun::kickpoint * ppoint = pkickarray->mutable_mkick(i);
  178. double x0,y0;
  179. double x,y;
  180. GaussProjCal(ppoint->mflon(),ppoint->mflat(),&x,&y);
  181. GaussProjCal(mlon0,mlat0,&x0,&y0);
  182. x = x - x0;
  183. y = y - y0;
  184. double ratio = mmyview->getbeishu();
  185. double fscale = 1.0/ratio;
  186. QGraphicsEllipseItem * pmainitem;
  187. pmainitem = new QGraphicsEllipseItem(0-mfPointSize/2.0,0*(-1)-mfPointSize/2.0,mfPointSize,mfPointSize);
  188. pmainitem->setBrush(Qt::blue);
  189. pmainitem->setPen(Qt::NoPen);
  190. pmainitem->setPos(VIEW_WIDTH/2 + x,VIEW_HEIGHT/2 -y);
  191. pmainitem->setScale(fscale);
  192. mpscene->addItem(pmainitem);
  193. mvectorPickPointItem.push_back(pmainitem);
  194. }
  195. if(pwayarray == NULL)return;
  196. for(i=0;i<pwayarray->mwaypoint_size();i++)
  197. {
  198. iv::siasun::waypoint * ppoint = pwayarray->mutable_mwaypoint(i);
  199. double x0,y0;
  200. double x,y;
  201. GaussProjCal(ppoint->mflon(),ppoint->mflat(),&x,&y);
  202. GaussProjCal(mlon0,mlat0,&x0,&y0);
  203. x = x - x0;
  204. y = y - y0;
  205. double ratio = mmyview->getbeishu();
  206. double fscale = 1.0/ratio;
  207. QGraphicsEllipseItem * pmainitem;
  208. pmainitem = new QGraphicsEllipseItem(0-mfPointSize/2.0,0*(-1)-mfPointSize/2.0,mfPointSize,mfPointSize);
  209. pmainitem->setBrush(Qt::green);
  210. pmainitem->setPen(Qt::NoPen);
  211. pmainitem->setPos(VIEW_WIDTH/2 + x,VIEW_HEIGHT/2 -y);
  212. pmainitem->setScale(fscale);
  213. mpscene->addItem(pmainitem);
  214. mvectorMapPointItem.push_back(pmainitem);
  215. }
  216. }
  217. void MainWindow::on_actionInsert_Map_Point_triggered()
  218. {
  219. if(mbInsertMapPoint == false)
  220. {
  221. ui->actionInsert_Map_Point->setText(tr("Stop Insert Map Point"));
  222. mbInsertMapPoint = true;
  223. }
  224. else
  225. {
  226. ui->actionInsert_Map_Point->setText(tr("Start Insert Map Point"));
  227. mbInsertMapPoint = false;
  228. }
  229. }
  230. void MainWindow::ondbclick(double x,double y)
  231. {
  232. if(mbInsertMapPoint)
  233. {
  234. double fx,fy;
  235. fx = x - VIEW_WIDTH/2;
  236. fy = VIEW_HEIGHT/2 - y;
  237. double x0,y0;
  238. GaussProjCal(mlon0,mlat0,&x0,&y0);
  239. double flonx,flaty;
  240. flonx = fx + x0;
  241. flaty = fy + y0;
  242. double flon,flat;
  243. GaussProjInvCal(flonx,flaty,&flon,&flat);
  244. iv::siasun::waypointarray * pwayarray = msissunmap.mutable_mwayarray();
  245. if(pwayarray == NULL)
  246. {
  247. std::cout<<"way array is NULL."<<std::endl;
  248. iv::siasun::waypointarray * pnew = new iv::siasun::waypointarray;
  249. msissunmap.set_allocated_mwayarray(pnew);
  250. pwayarray = msissunmap.mutable_mwayarray();
  251. }
  252. iv::siasun::waypoint * pwaypoint = pwayarray->add_mwaypoint();
  253. pwaypoint->set_mflat(flat);
  254. pwaypoint->set_mflon(flon);
  255. double ratio = mmyview->getbeishu();
  256. double fscale = 1.0/ratio;
  257. QGraphicsEllipseItem * pmainitem;
  258. pmainitem = new QGraphicsEllipseItem(0-mfPointSize/2.0,0*(-1)-mfPointSize/2.0,mfPointSize,mfPointSize);
  259. pmainitem->setBrush(Qt::green);
  260. pmainitem->setPen(Qt::NoPen);
  261. pmainitem->setPos(x,y);
  262. pmainitem->setScale(fscale);
  263. mpscene->addItem(pmainitem);
  264. mvectorMapPointItem.push_back(pmainitem);
  265. }
  266. else
  267. {
  268. if(mnSelectMode == 1)
  269. {
  270. double fx,fy;
  271. fx = x - VIEW_WIDTH/2;
  272. fy = VIEW_HEIGHT/2 - y;
  273. double x0,y0;
  274. GaussProjCal(mlon0,mlat0,&x0,&y0);
  275. double flonx,flaty;
  276. flonx = fx + x0;
  277. flaty = fy + y0;
  278. double fdismin = 1000000.0;
  279. int index = -1;
  280. int i;
  281. double xv,yv;
  282. iv::siasun::kickpointarray * parray = msissunmap.mutable_mkickarray();
  283. for(i=0;i<parray->mkick_size();i++)
  284. {
  285. iv::siasun::kickpoint * p = parray->mutable_mkick(i);
  286. double p1x,p1y;
  287. GaussProjCal(p->mflon(),p->mflat(),&p1x,&p1y);
  288. double fdis = sqrt(pow(p1x-flonx,2)+pow(p1y-flaty,2));
  289. if(fdis<fdismin)
  290. {
  291. fdismin = fdis;
  292. index = i;
  293. xv = p1x;
  294. yv = p1y;
  295. }
  296. std::cout<<" fdis: "<<fdismin<<std::endl;
  297. }
  298. if(fdismin < mfNearDisLimit)
  299. {
  300. mnIndexSelectKick = index;
  301. double ratio = mmyview->getbeishu();
  302. double fscale = 1.0/ratio;
  303. if(mpSelectPointItem == NULL)
  304. {
  305. QGraphicsEllipseItem * pmainitem;
  306. pmainitem = new QGraphicsEllipseItem(0-mfPointSize*2.0/2.0,0*(-1)-mfPointSize*2.0/2.0,mfPointSize*2.0,mfPointSize*2.0);
  307. pmainitem->setBrush(Qt::red);
  308. pmainitem->setPen(Qt::NoPen);
  309. pmainitem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  310. pmainitem->setScale(fscale);
  311. mpscene->addItem(pmainitem);
  312. mpSelectPointItem = pmainitem;
  313. }
  314. else
  315. {
  316. mpSelectPointItem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  317. mpSelectPointItem->setScale(fscale);
  318. }
  319. }
  320. }
  321. if(mnSelectMode == 2)
  322. {
  323. double fx,fy;
  324. fx = x - VIEW_WIDTH/2;
  325. fy = VIEW_HEIGHT/2 - y;
  326. double x0,y0;
  327. GaussProjCal(mlon0,mlat0,&x0,&y0);
  328. double flonx,flaty;
  329. flonx = fx + x0;
  330. flaty = fy + y0;
  331. double fdismin = 1000000.0;
  332. int index = -1;
  333. int i;
  334. double xv,yv;
  335. iv::siasun::waypointarray * parray = msissunmap.mutable_mwayarray();
  336. for(i=0;i<parray->mwaypoint_size();i++)
  337. {
  338. iv::siasun::waypoint * p = parray->mutable_mwaypoint(i);
  339. double p1x,p1y;
  340. GaussProjCal(p->mflon(),p->mflat(),&p1x,&p1y);
  341. double fdis = sqrt(pow(p1x-flonx,2)+pow(p1y-flaty,2));
  342. if(fdis<fdismin)
  343. {
  344. fdismin = fdis;
  345. index = i;
  346. xv = p1x;
  347. yv = p1y;
  348. }
  349. std::cout<<" fdis: "<<fdismin<<std::endl;
  350. }
  351. if(fdismin < mfNearDisLimit)
  352. {
  353. mnIndexSelectWayPoint = index;
  354. double ratio = mmyview->getbeishu();
  355. double fscale = 1.0/ratio;
  356. if(mpSelectMapPointItem == NULL)
  357. {
  358. QGraphicsEllipseItem * pmainitem;
  359. pmainitem = new QGraphicsEllipseItem(0-mfPointSize*2.0/2.0,0*(-1)-mfPointSize*2.0/2.0,mfPointSize*2.0,mfPointSize*2.0);
  360. pmainitem->setBrush(Qt::red);
  361. pmainitem->setPen(Qt::NoPen);
  362. pmainitem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  363. pmainitem->setScale(fscale);
  364. mpscene->addItem(pmainitem);
  365. mpSelectMapPointItem = pmainitem;
  366. }
  367. else
  368. {
  369. mpSelectMapPointItem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  370. mpSelectMapPointItem->setScale(fscale);
  371. }
  372. }
  373. }
  374. }
  375. }
  376. void MainWindow::on_actionCreate_Map_triggered()
  377. {
  378. iv::siasun::waypointarray * pwayarray = msissunmap.mutable_mwayarray();
  379. if(pwayarray == NULL)
  380. {
  381. QMessageBox::warning(this,tr("Warning"),tr("No Way Point."),QMessageBox::YesAll);
  382. return;
  383. }
  384. if(pwayarray->mwaypoint_size()<2)
  385. {
  386. QMessageBox::warning(this,tr("Warning"),tr("At Least 2 point."),QMessageBox::YesAll);
  387. return;
  388. }
  389. mvectorlinemap.clear();
  390. int i;
  391. for(i=0;i<(int)mvectorwidthline.size();i++)
  392. {
  393. mpscene->removeItem(mvectorwidthline[i]->GetWidthLine());
  394. delete mvectorwidthline[i];
  395. }
  396. mvectorwidthline.clear();
  397. sissunmap xsissunmap;
  398. mvectorlinemap = xsissunmap.GetMapLine(&msissunmap);
  399. double x0,y0;
  400. GaussProjCal(mlon0,mlat0,&x0,&y0);
  401. for(i=0;i<(int)mvectorlinemap.size();i++)
  402. {
  403. widthline *pline = new widthline(mvectorlinemap[i].mfx1-x0,mvectorlinemap[i].mfy1-y0,
  404. mvectorlinemap[i].mfx2-x0,mvectorlinemap[i].mfy2-y0,mfLineWidth,mColorBrush_mapline,VIEW_WIDTH/2,VIEW_HEIGHT/2);
  405. mpscene->addItem(pline->GetWidthLine());
  406. double ratio = mmyview->getbeishu();
  407. double fscale = 1.0/ratio;
  408. pline->ChangeWidth(fscale*mfLineWidth);
  409. mvectorwidthline.push_back(pline);
  410. }
  411. }
  412. void MainWindow::on_actionSelect_None_triggered()
  413. {
  414. mnSelectMode = 0;
  415. ui->actionSelect_None->setChecked(true);
  416. ui->actionSelect_Kick->setChecked(false);
  417. ui->actionSelect_Point->setChecked(false);
  418. if(mpSelectPointItem != NULL)
  419. {
  420. mpscene->removeItem(mpSelectPointItem);
  421. mpSelectPointItem = NULL;
  422. }
  423. }
  424. void MainWindow::on_actionSelect_Kick_triggered()
  425. {
  426. ui->actionSelect_None->setChecked(false);
  427. ui->actionSelect_Kick->setChecked(true);
  428. ui->actionSelect_Point->setChecked(false);
  429. mnSelectMode = 1;
  430. mbInsertMapPoint = false;
  431. ui->actionInsert_Map_Point->setText(tr("Start Insert Map Point"));
  432. }
  433. void MainWindow::on_actionSelect_Point_triggered()
  434. {
  435. ui->actionSelect_None->setChecked(false);
  436. ui->actionSelect_Kick->setChecked(false);
  437. ui->actionSelect_Point->setChecked(true);
  438. mnSelectMode = 2;
  439. mbInsertMapPoint = false;
  440. ui->actionInsert_Map_Point->setText(tr("Start Insert Map Point"));
  441. }
  442. void MainWindow::on_actionDelete_Map_Point_triggered()
  443. {
  444. if(mnIndexSelectWayPoint == -1)
  445. {
  446. return;
  447. }
  448. iv::siasun::waypointarray xarray;
  449. // xarray.CopyFrom(msissunmap.mwayarray());
  450. int i;
  451. for(i=0;i<msissunmap.mutable_mwayarray()->mwaypoint_size();i++)
  452. {
  453. if(i != mnIndexSelectWayPoint)
  454. {
  455. iv::siasun::waypoint * p = xarray.add_mwaypoint();
  456. p->CopyFrom(msissunmap.mutable_mwayarray()->mwaypoint(i));
  457. }
  458. }
  459. msissunmap.mutable_mwayarray()->clear_mwaypoint();
  460. msissunmap.mutable_mwayarray()->CopyFrom(xarray);
  461. mpscene->removeItem(mvectorMapPointItem[(unsigned int)mnIndexSelectWayPoint]);
  462. mvectorMapPointItem.erase(mvectorMapPointItem.begin()+mnIndexSelectWayPoint);
  463. mnIndexSelectWayPoint = -1;
  464. mpscene->removeItem(mpSelectMapPointItem);
  465. mpSelectMapPointItem = NULL;
  466. }
  467. void MainWindow::on_actionDistance_triggered()
  468. {
  469. if(mvectorlinemap.size() == 0 )
  470. {
  471. QMessageBox::warning(this,tr("Warning"),tr("No Map"),QMessageBox::YesAll);
  472. return;
  473. }
  474. if(mvectorPickPointItem.size() == 0)
  475. {
  476. QMessageBox::warning(this,tr("Warning"),tr("No Kick Point"),QMessageBox::YesAll);
  477. return;
  478. }
  479. int nindexkick,nindexline;
  480. sissunmap xsis;
  481. double fdis = xsis.GetDisTance(mvectorlinemap,&msissunmap,nindexkick,nindexline);
  482. if(nindexkick != -1)
  483. {
  484. QString strmsg = tr("Distance from kickpoint 2 line: ")+QString::number(fdis,'f',3);
  485. QMessageBox::information(this,tr("Information"),strmsg,QMessageBox::YesAll);
  486. iv::siasun::kickpoint * p = msissunmap.mutable_mkickarray()->mutable_mkick(nindexkick);
  487. double p1x,p1y;
  488. GaussProjCal(p->mflon(),p->mflat(),&p1x,&p1y);
  489. double xv,yv;
  490. double x0,y0;
  491. GaussProjCal(mlon0,mlat0,&x0,&y0);
  492. xv = p1x ;
  493. yv = p1y ;
  494. mnIndexSelectKick = nindexkick;
  495. double ratio = mmyview->getbeishu();
  496. double fscale = 1.0/ratio;
  497. if(mpSelectPointItem == NULL)
  498. {
  499. QGraphicsEllipseItem * pmainitem;
  500. pmainitem = new QGraphicsEllipseItem(0-mfPointSize*2.0/2.0,0*(-1)-mfPointSize*2.0/2.0,mfPointSize*2.0,mfPointSize*2.0);
  501. pmainitem->setBrush(Qt::red);
  502. pmainitem->setPen(Qt::NoPen);
  503. pmainitem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  504. pmainitem->setScale(fscale);
  505. mpscene->addItem(pmainitem);
  506. mpSelectPointItem = pmainitem;
  507. }
  508. else
  509. {
  510. mpSelectPointItem->setPos(VIEW_WIDTH/2 + xv-x0,VIEW_HEIGHT/2 -(yv-y0));
  511. mpSelectPointItem->setScale(fscale);
  512. }
  513. }
  514. else
  515. {
  516. QMessageBox::warning(this,tr("Warning"),tr("Get Distance Fail."),QMessageBox::YesAll);
  517. }
  518. }