如何解决立即在python vtk中翻译
我使用下面的代码旋转和平移对象,但是每次查看结果都需要运行程序。我添加了一个滑块,但是每次更改滑块的位置时,都需要运行它以查看结果。
有什么办法可以立即旋转和平移?
transform = vtk.vtkTransform()
transform.Translate(-30,150,0)
transform.Scale(1,1,1)
transform.RotateWXYZ(-90,0)
transformFilter = vtk.vtkTransformPolyDataFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputConnection(reader.GetOutputPort())
transformFilter.Update()
解决方法
import sys
import vtk
from PyQt5 import QtGui
from PyQt5.QtCore import Qt
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QHBoxLayout,QDialog,QGridLayout,QApplication,QWidget,QSlider,QLabel
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
filename = "F:\Amir\STL\example.stl"
filename1 = "F:\Amir\STL\wetenschap_ct_w._r_femur_5_001_mesh.stl"
class Window(QWidget):
def __init__(self):
super().__init__()
global size
self.title = "PyQt5 Slider"
self.top = 200
self.left = 500
self.width = 400
self.height = 300
self.setWindowIcon(QtGui.QIcon("icon.png"))
self.setWindowTitle(self.title)
self.setGeometry(self.left,self.top,self.width,self.height)
hbox = QHBoxLayout()
self.slider = QSlider()
self.slider.setOrientation(Qt.Vertical)
self.slider.setTickPosition(QSlider.TicksBelow)
self.slider.setTickInterval(5)
self.slider.setMinimum(-100)
self.slider.setMaximum(100)
self.slider.valueChanged.connect(self.changedValue)
self.label = QLabel("0")
self.label.setFont(QtGui.QFont("Sanserif",15))
hbox.addWidget(self.slider)
hbox.addWidget(self.label)
self.setLayout(hbox)
def changedValue(self):
global size
self.size = self.slider.value()
print(self.size)
self.label.setText(str(self.size))
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
global size
self.widget = QtWidgets.QWidget()
self.gridLayout = QtWidgets.QGridLayout()
#First STL file
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
#self.size1 = Window()
#size2 = self.size1.size
transform = vtk.vtkTransform()
transform.Translate(**self.size**,0)
transform.Scale(1,1,1)
transformFilter = vtk.vtkTransformPolyDataFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputConnection(reader.GetOutputPort())
transformFilter.Update()
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(transformFilter.GetOutput())
else:
mapper.SetInputConnection(transformFilter.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
#Second STL File
reader1 = vtk.vtkSTLReader()
reader1.SetFileName(filename1)
mapper1 = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper1.SetInput(reader1.GetOutput())
else:
mapper1.SetInputConnection(reader1.GetOutputPort())
actor1 = vtk.vtkActor()
actor1.SetMapper(mapper1)
self.vtkwidget = QVTKRenderWindowInteractor(self.widget)
self.gridLayout.addWidget(self.vtkwidget,3,3)
# Create a rendering window and renderer
self.ren = vtk.vtkRenderer()
self.vtkwidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkwidget.GetRenderWindow().GetInteractor()
self.ren.AddActor(actor)
self.ren.AddActor(actor1)
self.iren.Initialize()
# Enable user interface interactor
self.widget.setLayout(self.gridLayout)
self.setCentralWidget(self.widget)
self.ren.ResetCamera()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
window1 = Window()
window1.show()
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。