千家信息网

怎么使用Python VTK高亮显示actor

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天小编给大家分享一下怎么使用Python VTK高亮显示actor的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收
千家信息网最后更新 2025年01月19日怎么使用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"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

球体 函数 高亮 知识 篇文章 代码 方法 内容 鼠标 生成 不同 很大 事件 位置 免费软件 内核 前言 原理 图像 图像处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 批量更新数据库一个字段 信息系统安全数据库技术要求 战双不同服务器可以一起玩吗 数据库装好后 sql不到 佳星网络技术公司官网 高中网络技术应用题 可乐数据库营销案例 计算机网络安全技术... 网络安全技术论文学习方法 黑马软件开发 封锁机制属于数据库什么措施 网络安全发展趋势毕业论文 方舟手游服务器管理密码分享 网络安全防护电脑 网络安全法贯彻落实情况 崇明区直销软件开发创新服务 linux个人版和服务器哪个好 服务器上的cpu能用台式电脑吗 江夏软件开发团队 项目数据库 软件开发 计算机网络技术读研 大话手游藏宝阁如何找服务器 组态王建立站点服务器 后台软件开发做什么 邮箱打开文件服务器出错 中学生网络安全案例及分析 齐安顺网络安全公司 手机微信代理服务器 汽车网络技术的发展历程 计算机网络技术能升什么专业
0