文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用Python VTK高亮显示actor

2023-06-30 04:47

关注

今天小编给大家分享一下怎么使用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

已选取球体后: 

怎么使用Python VTK高亮显示actor

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯