使用Python在VTK-7中进行2D演员挑选

兰维尔

我在Python-VTK(7)中有一个简单的程序,该程序具有3D 2D磁盘,可以单击并移动它们。

我通过创建自定义的交互器样式来做到这一点,在该样式中,我将选定的元素存储在LeftButtonClick事件中,更改先前选定的元素在MouseMove事件中的位置,并将选定的元素设置为NoneonLeftButtonRelease事件。

这是完整的VTK代码(理想情况下)应该这样做:

import vtk

class CustomInteractor(vtk.vtkInteractorStyleTrackballCamera):

    def __init__(self, renderer, renWin):
        self.AddObserver('LeftButtonPressEvent', self.OnLeftButtonDown)
        self.AddObserver('LeftButtonReleaseEvent', self.OnLeftButtonRelease)
        self.AddObserver('MouseMoveEvent', self.OnMouseMove)

        self.renderer = renderer
        self.chosenPiece = None
        self.renWin = renWin

    def OnLeftButtonRelease(self, obj, eventType):
        self.chosenPiece = None
        vtk.vtkInteractorStyleTrackballCamera.OnLeftButtonUp(self)

    def OnLeftButtonDown(self, obj, eventType):
        clickPos = self.GetInteractor().GetEventPosition()

        picker = vtk.vtkPropPicker()
        picker.Pick(clickPos[0], clickPos[1], 0, self.renderer)
        actor = picker.GetActor2D()

        self.chosenPiece = actor

        vtk.vtkInteractorStyleTrackballCamera.OnLeftButtonDown(self)

    def OnMouseMove(self, obj, eventType):
        if self.chosenPiece is not None:

            mousePos = self.GetInteractor().GetEventPosition()

            self.chosenPiece.SetPosition(mousePos[0], mousePos[1])

            self.renWin.Render()
        else :
            vtk.vtkInteractorStyleTrackballCamera.OnMouseMove(self)


def buildDiskActor(inner_radius = 10, outer_radius = 20, position = (100, 20), color = (1, 1, 1)):
    disk = vtk.vtkDiskSource()
    disk.SetInnerRadius(inner_radius)
    disk.SetOuterRadius(outer_radius)
    disk.SetRadialResolution(100)
    disk.SetCircumferentialResolution(100)
    disk.Update()

    mapper = vtk.vtkPolyDataMapper2D()
    mapper.SetInputConnection(disk.GetOutputPort())

    actor = vtk.vtkActor2D()
    actor.SetMapper(mapper)

    actor.SetPosition(position[0], position[1])

    actor.GetProperty().SetColor(color)

    return actor

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetSize(600, 600)

elements = [
    buildDiskActor(position = (200, 400), color=(1, 0, 0)),
    buildDiskActor(position = (400, 400), color=(0, 1, 0)),
    buildDiskActor(position = (300, 200), color=(0, 0, 1)),
]

for actor in elements:
    ren.AddActor(actor)

iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
inStyle = CustomInteractor(ren, renWin)
iren.SetInteractorStyle(inStyle)

renWin.Render()
iren.Start()

结果看起来像这样:

在此处输入图片说明

即,无论我选择哪个磁盘,都只会选择绿色的磁盘vtkPropPicker

由于某些原因,当我使用Python2-VTK6.3.0而不是Python3-VTK7时,事情按预期工作。这是VTK7中的错误吗?还是以某种方式更改了实现?或者是别的什么?

马克斯·斯摩棱斯

VTK 7切换到新的渲染后端。在7.0中,渲染后端存在一个选择2D actor的错误。

该错误已在7.1中修复;请参阅Kitware / VTK @5559c11

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用python和VTK进行内存管理

来自分类Dev

使用vtk python显示3D图像

来自分类Dev

使用Python从vtk文件中的数据绘制轮廓图

来自分类Dev

使用Python从vtk文件中的数据绘制轮廓图

来自分类Dev

寻找分钟 在列表/ 2D数组中并在Python中进行计算

来自分类Dev

使用PyOpenCL在OpenCL中进行快速2d直方图

来自分类Dev

使用1D X,Y和Z变量在python中进行2D等高线图

来自分类Dev

使用python读取VTK文件

来自分类Dev

使用python读取VTK文件

来自分类Dev

VTK旋转操作使用Python

来自分类Dev

使用OpenGL在2D梯形中进行纹理的投影插值

来自分类Dev

使用OpenGL在2D梯形中进行纹理的投影插值

来自分类Dev

使用 VTK 在 3D 图像中清除血管分割

来自分类Dev

在python中对2d numpy数组进行下采样

来自分类Dev

在Python中对2D词典进行排序

来自分类Dev

将python中的2D数组与条件进行比较

来自分类Dev

使用推力对Cuda中的2D数组进行排序

来自分类Dev

我想在 vtk (python) 中制作均匀分布的球体

来自分类Dev

使用vtk调整dicom文件中的窗口级别

来自分类Dev

使用 C++ 在 wxpanel 中嵌入 VTK 输出

来自分类Dev

通过血管树的STL模型进行Python-VTK 3D样条回归

来自分类Dev

通过血管树的STL模型进行Python-VTK 3D样条回归

来自分类Dev

使用注释在struts2中进行验证

来自分类Dev

使用PhpManager在Yii2中进行RBAC

来自分类Dev

使用YAML在Symfony2中进行主义映射

来自分类Dev

使用wordpress在Apache2中进行Proxyreverse

来自分类Dev

VTK:使用vtkDelaunay2D创建多边形和孔不起作用

来自分类Dev

使用python TVTK或MayaVi探测/采样/插值VTK数据

来自分类Dev

使用python3.8和Ubuntu 20.04设置VTK

Related 相关文章

热门标签

归档