qt_cutter.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import sys
  2. from PyQt5 import Qt
  3. from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
  4. from vedo import Plotter, Mesh, BoxCutter, dataurl
  5. class MainWindow(Qt.QMainWindow):
  6. def __init__(self, parent=None):
  7. Qt.QMainWindow.__init__(self, parent)
  8. self.frame = Qt.QFrame()
  9. self.layout = Qt.QVBoxLayout()
  10. self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
  11. # Create renderer and add the vedo objects and callbacks
  12. self.plt = Plotter(qt_widget=self.vtkWidget)
  13. mesh = Mesh(dataurl+'cow.vtk')
  14. self.cutter = BoxCutter(mesh)
  15. self.plt += [mesh, self.cutter]
  16. self.plt.show()
  17. box_cutter_button_on = Qt.QPushButton("Start the box cutter")
  18. box_cutter_button_on.clicked.connect(self.ctool_start)
  19. box_cutter_button_off = Qt.QPushButton("Stop the box cutter")
  20. box_cutter_button_off.clicked.connect(self.ctool_stop)
  21. # Set-up the rest of the Qt window
  22. self.layout.addWidget(self.vtkWidget)
  23. self.layout.addWidget(box_cutter_button_on)
  24. self.layout.addWidget(box_cutter_button_off)
  25. self.frame.setLayout(self.layout)
  26. self.setCentralWidget(self.frame)
  27. self.show()
  28. def ctool_start(self):
  29. self.cutter.on()
  30. def ctool_stop(self):
  31. self.cutter.off()
  32. def on_close(self):
  33. #Disable the interactor before closing to prevent it
  34. #from trying to act on already deleted items
  35. self.vtkWidget.close()
  36. if __name__ == "__main__":
  37. app = Qt.QApplication(sys.argv)
  38. window = MainWindow()
  39. app.aboutToQuit.connect(window.on_close) # <-- connect the onClose event
  40. app.exec_()