Python-VTK boxwidget旋转处理程序

问题描述 投票:1回答:1

到目前为止,我所看到的是,有一个小部件显示了带有6个手柄的3D边界框。Python Boxwidget Exampler

我想通过单击[cntrl] +拖动手柄来平移该框,并通过单击[shift] +拖动手柄来仅绕y轴旋转...

每个交互只应发生在场景中的框上,而别无其他。

我必须覆盖box-widget函数吗?还是应该修改哪个确切功能。我应该添加一个交互观察者吗?

并且以某种方式,在前2到3个交互中,句柄的大小越来越大,有人遇到过同样的问题吗?

编辑:

enter image description here

这是我当前的代码:

                self.boxWidget = vtk.vtkBoxWidget()
                self.boxWidget.SetInteractor(self.renderWindowInteractor)
                self.boxWidget.SetProp3D(self.boxes_3d_actors[obj_cls_name][0])
                self.boxWidget.SetPlaceFactor(1.0)
                self.boxWidget.PlaceWidget()

其中self.boxes_3d_actors是vtk.vtkAssembly()的数组,由多义线组成。

现在我需要某种方式来覆盖手柄的交互事件。最好的办法是使用自己的交互功能创建vtkBoxwidget的继承类。

python qt opengl pyqt vtk
1个回答
0
投票

您必须根据需要设置Interactor。对于常见的平移和旋转,下面是代码。

#Setting Renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(self.boxes_3d_actors[obj_cls_name][0])
renwin = vtk.vtkRenderWindow()
renwin.AddRenderer(renderer)

# Setting interactor
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(renwin)

boxWidget = vtk.vtkBoxWidget()
boxWidget.SetInteractor(interactor)
boxWidget.SetProp3D(self.boxes_3d_actors[obj_cls_name][0])
boxWidget.SetPlaceFactor(1.0)
boxWidget.PlaceWidget()

用于设置对象的旋转和平移,您可以看到以下文档链接:https://vtk.org/Wiki/VTK/Examples/Python/Interaction/MouseEventshttps://vtk.org/doc/nightly/html/classvtkCamera.html

© www.soinside.com 2019 - 2024. All rights reserved.