繁体   English   中英

Python - VTK boxwidget 旋转处理程序

[英]Python - VTK boxwidget rotation-handlers

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

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

每个交互都应该只发生在场景中的盒子上,而不是其他任何东西。

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

不知何故 - 在前 2 或 3 次交互中,手柄的尺寸越来越大,有人遇到过同样的问题吗?

编辑:

在此处输入图片说明

那是我当前的代码:

                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。

您必须根据您的要求设置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/MouseEvents https://vtk.org/doc/nightly/html/ classvtkCamera.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM