千家信息网

怎么使用Python VTK高亮显示actor

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,今天小编给大家分享一下怎么使用Python VTK高亮显示actor的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收
千家信息网最后更新 2025年11月11日怎么使用Python VTK高亮显示actor

今天小编给大家分享一下怎么使用Python VTK高亮显示actor的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

前言:

VTK,(visualizationtoolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。

主要函数介绍:

NewPickedActor.GetProperty(): 通过该函数,可以设置actor的性质,如颜色、表面样式等。

vtk.vtkSphereSource(): 创建球体的函数,文中通过一个for循环创建了10个球体。

vtk.vtkMinimalStandardRandomSequence(): VTK的随机数生成器,用于代码中的十个球体,随机生成球体的大小和位置。

MouseInteractorHighLightActor: 定义actor操作方法,这个是一个鼠标操作控件的控制方法。

leftButtonPressEvent(self, obj, event): 这是一个事件触发函数,当鼠标左键点击对应的actor时,会触发函数,对点的actor高亮显示。

主要代码如下:

#!/usr/bin/env python# noinspection PyUnresolvedReferencesimport vtkcolors = vtk.vtkNamedColors()NUMBER_OF_SPHERES = 10class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):    def __init__(self, parent=None):        self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)        self.LastPickedActor = None        self.LastPickedProperty = vtk.vtkProperty()    def leftButtonPressEvent(self, obj, event):        clickPos = self.GetInteractor().GetEventPosition()        picker = vtk.vtkPropPicker()        picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())        # 创建一个新的actor        self.NewPickedActor = picker.GetActor()        # If something was selected        if self.NewPickedActor:            # If we picked something before, reset its property            if self.LastPickedActor:                self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)            # Save the property of the picked actor so that we can            # restore it next time            self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty())            # 高亮选中球体,并显示边缘            self.NewPickedActor.GetProperty().SetColor(colors.GetColor3d('Red'))            self.NewPickedActor.GetProperty().SetDiffuse(1.0)            self.NewPickedActor.GetProperty().SetSpecular(0.0)            self.NewPickedActor.GetProperty().EdgeVisibilityOn()            # 保存最后一个选中的actor            self.LastPickedActor = self.NewPickedActor        self.OnLeftButtonDown()        returndef main():    # 创建render和window    renderer = vtk.vtkRenderer()    renderer.SetBackground(colors.GetColor3d('SteelBlue'))    renwin = vtk.vtkRenderWindow()    renwin.AddRenderer(renderer)    renwin.SetSize(640, 480)    renwin.SetWindowName('HighlightPickedActor')    # 建立interactor(交互操作)    interactor = vtk.vtkRenderWindowInteractor()    interactor.SetRenderWindow(renwin)    # 交互操作方法    style = MouseInteractorHighLightActor()    style.SetDefaultRenderer(renderer)    interactor.SetInteractorStyle(style)    randomSequence = vtk.vtkMinimalStandardRandomSequence()    # randomSequence.SetSeed(1043618065)    # randomSequence.SetSeed(5170)    randomSequence.SetSeed(8775070)    # 添加球体    for i in range(NUMBER_OF_SPHERES):        source = vtk.vtkSphereSource()        # random position and radius        x = randomSequence.GetRangeValue(-5.0, 5.0)        randomSequence.Next()        y = randomSequence.GetRangeValue(-5.0, 5.0)        randomSequence.Next()        z = randomSequence.GetRangeValue(-5.0, 5.0)        randomSequence.Next()        radius = randomSequence.GetRangeValue(0.5, 1.0)        randomSequence.Next()        source.SetRadius(radius)        source.SetCenter(x, y, z)        source.SetPhiResolution(11)        source.SetThetaResolution(21)        mapper = vtk.vtkPolyDataMapper()        mapper.SetInputConnection(source.GetOutputPort())        actor = vtk.vtkActor()        actor.SetMapper(mapper)        r = randomSequence.GetRangeValue(0.4, 1.0)        randomSequence.Next()        g = randomSequence.GetRangeValue(0.4, 1.0)        randomSequence.Next()        b = randomSequence.GetRangeValue(0.4, 1.0)        randomSequence.Next()        actor.GetProperty().SetDiffuseColor(r, g, b)        actor.GetProperty().SetDiffuse(.8)        actor.GetProperty().SetSpecular(.5)        actor.GetProperty().SetSpecularColor(colors.GetColor3d('White'))        actor.GetProperty().SetSpecularPower(30.0)        renderer.AddActor(actor)    # 运行    interactor.Initialize()    renwin.Render()    interactor.Start()if __name__ == '__main__':    main()

显示结果如下: 未选择球体:

已选取球体后:

以上就是"怎么使用Python VTK高亮显示actor"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0