我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用Python VTK高亮显示actor

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用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 PyUnresolvedReferences
import vtk

colors = vtk.vtkNamedColors()
NUMBER_OF_SPHERES = 10


class 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()
        return


def 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()

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

image.png

已选取球体后: 

image.png

到此这篇关于如何使用Python VTK高亮显示actor的文章就介绍到这了,更多相关Python VTK高亮显示actor内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

如何使用Python VTK高亮显示actor

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用Python VTK高亮显示actor

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

Python如何对文件进行语法高亮显示

本文介绍了如何使用Python对文件进行语法高亮显示,包括使用Pygments、rainbow_text和colorama等库的方法。这些库提供丰富的API,允许自定义高亮显示行为,如创建配色方案、定义样式和使用外部样式表。此外,还讨论了其他工具,如SourceInsight和SyntaxVisualizer,用于Python语法高亮显示。通过使用这些库和工具,开发者可以提高代码的可读性和可维护性,从而简化软件开发过程。
Python如何对文件进行语法高亮显示
2024-04-02

Python如何对字符串进行语法高亮显示

Python提供colorama库,用于对字符串进行语法高亮,提高代码的可读性和可维护性。安装colorama库并初始化,使用ANSI转义序列设置文本颜色和样式,实现高亮效果。colorama支持高亮关键字、变量、字符串,还允许设置背景颜色、字体样式、创建自定义颜色代码。优点包括提高可读性、可维护性和生产力;缺点是仅适用于支持ANSI转义序列的终端,可能与其他库冲突,需要初始化。
Python如何对字符串进行语法高亮显示
2024-04-02

linux下如何实现vim语法高亮显示

这篇文章给大家分享的是有关linux下如何实现vim语法高亮显示的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。高亮标签 *tag-highlight* 如果你想高亮文件里的所有标签,可以使用如下映射。
2023-06-13

PHP如何对文件进行语法高亮显示

PHP提供了多种方式实现语法高亮,包括内置函数和第三方库。语法高亮有助于提高代码可读性和维护性,识别错误,并增强开发体验。可选择合适的高亮器,考虑主题配色优化可读性,并定期更新语法高亮器以支持新语言和功能。对于大型代码文件,渐进式高亮技术可避免性能影响。
PHP如何对文件进行语法高亮显示
2024-04-02

Java如何对文件进行语法高亮显示

Java文件语法高亮显示本文介绍了如何在Java中使用JFlex(词法分析)和CUP(语法分析)工具对文本文件进行语法高亮显示。JFlex将正则表达式规则转换为Java代码,识别文件中的标记。CUP将语法规则定义转换为Java代码,解析标记序列。集成JFlex和CUP可实现语法高亮显示,例如用不同颜色突出显示不同的词法标记。本文提供了一个示例代码,展示了如何加载文本文件并对其进行语法高亮显示。
Java如何对文件进行语法高亮显示
2024-04-02

Java如何对字符串进行语法高亮显示

Java中语法高亮显示字符串涉及正则表达式、语法解析器和着色引擎。第一步是选择一个库(如JSyntaxPane),配置高亮显示规则,并使用库的方法(如JSyntaxPane的setSyntaxStyle)对字符串进行着色。最后,将高亮显示的文本呈现到用户界面。高亮显示库的选择、语法规则的配置和着色引擎的性能是考虑的因素。
Java如何对字符串进行语法高亮显示
2024-04-02

PHP如何对字符串进行语法高亮显示

本文介绍了PHP中语法高亮字符串的方法。可以通过使用highlight_string()函数或借助第三方库(如highlight.php、PHP-Syntax-Highlighter、GeSHi)实现。highlight_string()函数简单易用,而第三方库提供更多灵活性。选择方法取决于需求。此外,本文还提供了优化高亮效果和使用CSS定制外观的提示。
PHP如何对字符串进行语法高亮显示
2024-04-02

C语言如何对文件进行语法高亮显示

C语言语法高亮显示通过正则表达式识别代码元素,并定义颜色和样式关联规则。它可以提升代码可读性,协助发现语法错误,加快编码效率,美化代码外观。实现步骤包括使用正则表达式匹配代码元素,定义颜色和样式,将正则表达式与样式关联,然后应用语法高亮显示。
C语言如何对文件进行语法高亮显示
2024-04-02

Go语言如何对文件进行语法高亮显示

本指南详细阐述了如何使用Go语言对文件进行语法高亮显示。通过使用gosyntaxhighlighting包,您可以:安装包并初始化高亮显示器加载语法文件以定义语法规则高亮显示代码字符串并获取HTML代码将高亮显示的代码输出到终端、文件或Web界面使用自定义主题更改高亮显示的外观gosyntaxhighlighting包还支持:多语言支持覆盖范围高亮显示行号自动语法检测通过使用此包,您可以轻松地提高代码的可读性和可维护性。
Go语言如何对文件进行语法高亮显示
2024-04-02

Go语言如何对字符串进行语法高亮显示

本篇文章介绍了Go语言中使用内置函数(fmt.Printf()、bytes.Buffer)和第三方库(github.com/alecthomas/repr、github.com/goccmack/termcolor)对字符串进行语法高亮显示的方法。文章还提供了实现代码示例,并强调了语法高亮显示的终端支持要求和注意事项。
Go语言如何对字符串进行语法高亮显示
2024-04-02

C语言如何对字符串进行语法高亮显示

在C语言中,实现语法高亮有助于提高代码可读性。本文探讨了四种常见方法:正则表达式:使用模式匹配来识别文本中的语法元素。字符指针和字符串比较:逐个字符扫描文本,并比较预定义关键字。有限状态机:模拟语法状态转换,根据输入过渡到不同状态。代码解析器:分解代码并生成语法树,用于语法高亮。选择方法取决于任务的复杂度,从简单的正则表达式到更复杂的代码解析器。
C语言如何对字符串进行语法高亮显示
2024-04-02

如何使用Vue3实现文章内容中多个"关键词"标记高亮显示

高亮显示是我们日常开发中经常会遇到的需求,下面这篇文章主要给大家介绍了关于如何使用Vue3实现文章内容中多个"关键词"标记高亮显示的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-16

如何在Android中使用高亮引导库

这期内容当中小编将会给大家带来有关如何在Android中使用高亮引导库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,
2023-06-14

如何使用tqdm在Python应用中显示进度

本篇内容主要讲解“如何使用tqdm在Python应用中显示进度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用tqdm在Python应用中显示进度”吧!阿拉米语,希伯来语和阿拉伯语中的闪米
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录