I want to import my STL file into Qt. The code is written in VTK to obtain and read the STL file, and now I want to transfer it to Qt by using the QtWidgets.QOpenGLWidget class. Finally, I need to add some code to the original program to transfer the VTK code to Qt, specifically between the vtkRenderWindowInteractor() and QOpenGLWidget classes. I should also mention that I have used two separate files, and the UI has to be separated.
here is first part which is VTK part:
import vtkmodules.all as vtk
from UI.lcd import Ui_Form
from PyQt5 import QtCore, QtGui, QtWidgets
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
class MyInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
self.AddObserver('MiddleButtonPressEvent', self.middle_button_press_event)
self.AddObserver('MiddleButtonReleaseEvent', self.middle_button_release_event)
def middle_button_press_event(self, obj, event):
print('Middle Button pressed')
self.OnMiddleButtonDown()
return
def middle_button_release_event(self, obj, event):
print('Middle Button released')
self.OnMiddleButtonUp()
return
def main():
colors = vtk.vtkNamedColors()
filename = r'C:\Users\meysam_computer\Desktop\stl.stl'
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetDiffuse(0.8)
actor.GetProperty().SetDiffuseColor(colors.GetColor3d('LightSteelBlue'))
actor.GetProperty().SetSpecular(0.3)
actor.GetProperty().SetSpecularPower(60.0)
# Create a rendering window and renderer
ren = vtk.vtkRenderer()
# Assign actor to the renderer
ren.AddActor(actor)
ren.SetBackground(colors.GetColor3d('Yellow'))
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetWindowName('STL')
# Create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# tarif classs dakhel parantez??
iren.SetInteractorStyle(MyInteractorStyle())
# Enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()
if name == 'main':
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
main()
sys.exit(app.exec_())
and here is the UI part : (that have to be still seprated )
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(446, 380)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.LCD = QtWidgets.QOpenGLWidget(Form)
self.LCD.setObjectName("LCD")
self.verticalLayout.addWidget(self.LCD)
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))