0

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"))

kakou
  • 636
  • 2
  • 7
  • 15
  • Hi, are you trying to add vtk rendering to Qt? I mean, do you want to render the 3D model using vtk in the Qt window? – Jish May 19 '23 at 03:34
  • It's unclear. Are you asking on a widget which can render a VTK scene, or a way to render a ```vtkPolyData``` with OpenGL API? – relent95 May 22 '23 at 09:44

0 Answers0