如何在 python vtk 中连接两个单独的设置位置值?
How to connect two separate set position values in python vtk?
我为 stl 放置了两个单独的滑块以在 X 方向和 Y 方向上移动它。
为了将滑块值连接到位置,我在下面编写了代码
#First STL file
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
self.transform = vtk.vtkTransform()
self.transform.Scale(1, 1, 1)
self.transformFilter = vtk.vtkTransformPolyDataFilter()
self.transformFilter.SetTransform(self.transform)
self.transformFilter.SetInputConnection(reader.GetOutputPort())
self.transformFilter.Update()
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(self.transformFilter.GetOutput())
else:
mapper.SetInputConnection(self.transformFilter.GetOutputPort())
self.actor = vtk.vtkActor()
self.vtkwidget = QVTKRenderWindowInteractor(self.centralwidget)
self.gridLayout.addWidget(self.vtkwidget, 0, 0, 1, 1)
self.ren = vtk.vtkRenderer()
self.vtkwidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkwidget.GetRenderWindow().GetInteractor()
self.actor.SetMapper(mapper)
self.ren.AddActor(self.actor)
self.iren.Start()
self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
self.horizontalSlider.setGeometry(QtCore.QRect(70, 360, 291, 22))
self.horizontalSlider.setMinimum(-100)
self.horizontalSlider.setMaximum(100)
self.horizontalSlider.setProperty("value", 0)
self.horizontalSlider.setSliderPosition(0)
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.valueChanged.connect(self.handler)
self.horizontalSlider_2 = QtWidgets.QSlider(self.centralwidget)
self.horizontalSlider_2.setGeometry(QtCore.QRect(70, 410, 291, 22))
self.horizontalSlider_2.setMinimum(-100)
self.horizontalSlider_2.setMaximum(100)
self.horizontalSlider_2.setProperty("value", 0)
self.horizontalSlider_2.setSliderPosition(0)
self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider_2.valueChanged.connect(self.handler2)
def handler(self, value):
self.positionx = value
self.actor.SetPosition(value, 0, 0)
self.iren.GetRenderWindow().Render()
def handler2(self, value2):
self.positiony = value2
self.actor.SetPosition(0, value2, 0)
self.iren.GetRenderWindow().Render()
(这只是节目的一部分)
但是正如您所见,当我更改一个方向(例如 X)时,所有应用的方向(Y 或 Z)都被删除,并且 stl 文件开始从起始位置(0 ,0 ,0)开始移动。
有什么方法可以合并这两个滑块输出一起工作吗?
或者将两个处理程序合并为一个?
self.actor.SetPosition(value, 0, 0)
是你的问题:你明确地将 y 和 z 坐标设置为 0!
y 和 z 应使用当前位置:
pos = self.actor.GetPosition()
self.actor.SetPosition(value, pos[1], pos[2])
与第二个处理程序类似。
我为 stl 放置了两个单独的滑块以在 X 方向和 Y 方向上移动它。 为了将滑块值连接到位置,我在下面编写了代码
#First STL file
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
self.transform = vtk.vtkTransform()
self.transform.Scale(1, 1, 1)
self.transformFilter = vtk.vtkTransformPolyDataFilter()
self.transformFilter.SetTransform(self.transform)
self.transformFilter.SetInputConnection(reader.GetOutputPort())
self.transformFilter.Update()
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(self.transformFilter.GetOutput())
else:
mapper.SetInputConnection(self.transformFilter.GetOutputPort())
self.actor = vtk.vtkActor()
self.vtkwidget = QVTKRenderWindowInteractor(self.centralwidget)
self.gridLayout.addWidget(self.vtkwidget, 0, 0, 1, 1)
self.ren = vtk.vtkRenderer()
self.vtkwidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkwidget.GetRenderWindow().GetInteractor()
self.actor.SetMapper(mapper)
self.ren.AddActor(self.actor)
self.iren.Start()
self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
self.horizontalSlider.setGeometry(QtCore.QRect(70, 360, 291, 22))
self.horizontalSlider.setMinimum(-100)
self.horizontalSlider.setMaximum(100)
self.horizontalSlider.setProperty("value", 0)
self.horizontalSlider.setSliderPosition(0)
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.valueChanged.connect(self.handler)
self.horizontalSlider_2 = QtWidgets.QSlider(self.centralwidget)
self.horizontalSlider_2.setGeometry(QtCore.QRect(70, 410, 291, 22))
self.horizontalSlider_2.setMinimum(-100)
self.horizontalSlider_2.setMaximum(100)
self.horizontalSlider_2.setProperty("value", 0)
self.horizontalSlider_2.setSliderPosition(0)
self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider_2.valueChanged.connect(self.handler2)
def handler(self, value):
self.positionx = value
self.actor.SetPosition(value, 0, 0)
self.iren.GetRenderWindow().Render()
def handler2(self, value2):
self.positiony = value2
self.actor.SetPosition(0, value2, 0)
self.iren.GetRenderWindow().Render()
(这只是节目的一部分)
但是正如您所见,当我更改一个方向(例如 X)时,所有应用的方向(Y 或 Z)都被删除,并且 stl 文件开始从起始位置(0 ,0 ,0)开始移动。
有什么方法可以合并这两个滑块输出一起工作吗?
或者将两个处理程序合并为一个?
self.actor.SetPosition(value, 0, 0)
是你的问题:你明确地将 y 和 z 坐标设置为 0!
y 和 z 应使用当前位置:
pos = self.actor.GetPosition()
self.actor.SetPosition(value, pos[1], pos[2])
与第二个处理程序类似。