MainWnd.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from PyQt5.QtGui import *
  2. from PyQt5.QtWidgets import *
  3. from CustomFrame import *
  4. import os
  5. import datetime
  6. class MainWindow(QMainWindow):
  7. """docstring for Mainwindow"""
  8. def __init__(self, parent = None):
  9. super(MainWindow,self).__init__(parent)
  10. self.basic()
  11. self.Controller = ControlFrame()
  12. self.viewerFrame = ViewerFrame(self.Controller.OnAction)
  13. self.Controller.btnSaveAllCloud.clicked.connect(self.saveAllCloud)
  14. self.Controller.btnSaveWheelSampleCloud.clicked.connect(self.saveWheelSampleCloud)
  15. splitter= self.split_()
  16. self.setCentralWidget(splitter)
  17. def saveAllCloud(self):
  18. fileName2, ok2 = QFileDialog.getSaveFileName(self, "文件保存", "C:/","All Files (*);;Text Files (*.txt)")
  19. if fileName2=="":
  20. return
  21. with open(fileName2,"w+") as f:
  22. for point in self.viewerFrame.pcViewer1.pointCloud:
  23. prob=point[3]
  24. f.write("%f %f %f %d %d %d\n"%(point[0],point[1],point[2],int(255*prob),int(255-prob*255),255-int(prob*255)))
  25. for point in self.viewerFrame.pcViewer2.pointCloud:
  26. prob=point[3]
  27. f.write("%f %f %f %d %d %d\n"%(point[0],point[1],point[2],int(255*prob),int(255-prob*255),255-int(prob*255)))
  28. for point in self.viewerFrame.pcViewer3.pointCloud:
  29. prob=point[3]
  30. f.write("%f %f %f %d %d %d\n"%(point[0],point[1],point[2],int(255*prob),int(255-prob*255),255-int(prob*255)))
  31. for point in self.viewerFrame.pcViewer4.pointCloud:
  32. prob=point[3]
  33. f.write("%f %f %f %d %d %d\n"%(point[0],point[1],point[2],int(255*prob),int(255-prob*255),255-int(prob*255)))
  34. #窗口基础属性
  35. def saveWheelSampleCloud(self):
  36. print(" save wheel sample")
  37. path="./wheelSamples"
  38. folder=os.path.exists(path)
  39. if not folder:
  40. os.mkdir(path)
  41. str=datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
  42. sampleFolder=path+"/"+str
  43. folder2=os.path.exists(sampleFolder)
  44. if not folder2:
  45. os.mkdir(sampleFolder)
  46. with open(sampleFolder+"/1.txt","w+") as f:
  47. for point in self.viewerFrame.pcViewer1.pointCloud:
  48. prob=point[3]
  49. if prob>0.8:
  50. f.write("%f %f %f\n"%(point[0],point[1],point[2]))
  51. with open(sampleFolder+"/2.txt","w+") as f:
  52. for point in self.viewerFrame.pcViewer2.pointCloud:
  53. prob=point[3]
  54. if prob>0.8:
  55. f.write("%f %f %f\n"%(point[0],point[1],point[2]))
  56. with open(sampleFolder+"/3.txt","w+") as f:
  57. for point in self.viewerFrame.pcViewer3.pointCloud:
  58. prob=point[3]
  59. if prob>0.8:
  60. f.write("%f %f %f\n"%(point[0],point[1],point[2]))
  61. with open(sampleFolder+"/4.txt","w+") as f:
  62. for point in self.viewerFrame.pcViewer4.pointCloud:
  63. prob=point[3]
  64. if prob>0.8:
  65. f.write("%f %f %f\n"%(point[0],point[1],point[2]))
  66. text="样本已保存到:%s 文件夹下"%(sampleFolder)
  67. QMessageBox.information(self, '保存轮胎样本',text,QMessageBox.Ok,QMessageBox.Ok)
  68. def basic(self):
  69. #设置标题,大小,图标
  70. self.setWindowTitle("RPC3DView")
  71. self.resize(490*2+300, 370*2)
  72. #self.setWindowIcon(QIcon("./image/Gt.png"))
  73. #居中显示
  74. screen = QDesktopWidget().geometry()
  75. self_size = self.geometry()
  76. self.move(int((screen.width() - self_size.width())/2),int((screen.height() - self_size.height())/2))
  77. def closeEvent(self, QCloseEvent):
  78. self.Controller.close()
  79. self.viewerFrame.close()
  80. #分割窗口
  81. def split_(self):
  82. splitter = QSplitter(Qt.Horizontal)
  83. splitter.addWidget(self.viewerFrame)
  84. splitter.addWidget(self.Controller)
  85. splitter.setStretchFactor(0,3)
  86. splitter.setStretchFactor(1,1)
  87. return splitter
  88. def OnImagesHandle(self,images:pb.ResImage):
  89. self.viewerFrame.DisplayImage(images)
  90. self.Controller.OnImages(images)
  91. def OnCloudHandle(self,clouds:pb.ResCloud):
  92. self.viewerFrame.DisplayCloud(clouds)
  93. def OnMeasureDataHandle(self,measure:pb.MeasureInfo):
  94. self.Controller.DisplayMeasureInfo(measure)