当前位置: 首页 > news >正文

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

前言:

    本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。

效果:

 VTK

      VTK,(visualizationtoolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建。

主要函数介绍:

NewPickedActor.GetProperty(): 

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

vtk.vtkSphereSource(): 

创建球体的函数,文中通过一个for循环创建了6个球体。

vtk.vtkMinimalStandardRandomSequence():

 VTK的随机数生成器,用于代码中的球体,随机生成球体的大小和位置。

MouseInteractorHighLightActor: 

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

leftButtonPressEvent(self, obj, event): 

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

Code:

#!/usr/bin/env python# noinspection PyUnresolvedReferences
import vtkcolors = vtk.vtkNamedColors()
NUMBER_OF_SPHERES = 6class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):def __init__(self, parent=None):self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)self.LastPickedActor = Noneself.LastPickedProperty = vtk.vtkProperty()def leftButtonPressEvent(self, obj, event):clickPos = self.GetInteractor().GetEventPosition()picker = vtk.vtkPropPicker()picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())# 创建一个新的actorself.NewPickedActor = picker.GetActor()# If something was selectedif self.NewPickedActor:# If we picked something before, reset its propertyif self.LastPickedActor:self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)if self.LastPickedActor == self.NewPickedActor:self.NewPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)self.LastPickedActor=Noneelse:# Save the property of the picked actor so that we can# restore it next timeself.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()# 保存最后一个选中的actorself.LastPickedActor = self.NewPickedActorself.OnLeftButtonDown()returndef main():# 创建render和windowrenderer = vtk.vtkRenderer()renderer.SetBackground(colors.GetColor3d('SteelBlue'))renwin = vtk.vtkRenderWindow()renwin.AddRenderer(renderer)renwin.SetSize(640, 600)renwin.SetWindowName('HighlightPickedActor')# 建立interactor(交互操作)interactor = vtk.vtkRenderWindowInteractor()interactor.SetRenderWindow(renwin)# 交互操作方法style = MouseInteractorHighLightActor()style.SetDefaultRenderer(renderer)interactor.SetInteractorStyle(style)randomSequence = vtk.vtkMinimalStandardRandomSequence()randomSequence.SetSeed(8775070)# 添加球体for i in range(NUMBER_OF_SPHERES):source = vtk.vtkSphereSource()# random position and radiusx = 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.1, 1.0)randomSequence.Next()b = randomSequence.GetRangeValue(0.6, 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(10.0)renderer.AddActor(actor)# 运行interactor.Initialize()renwin.Render()interactor.Start()if __name__ == '__main__':main()

相关文章:

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

前言: 本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。 效果: VTK VTK,&…...

TCP和UDP通信对比

tcp通信流程 服务器: 创建流式套接字 绑定 监听 提取 读写 关闭 客户端: 创建流式套接字 连接 读写 关闭 收发数据: read recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); //flagsMSG_PEEK 读数据不会删除缓冲区的数据 write send ssize_t send(int…...

SpringCloud:ElasticSearch之自动补全

当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。 因为需要根据拼音字母来推断,因此要用到拼音分词功能。 1.拼音分词器…...

TOOM解析如何搭建一套适合自己的舆情监测系统?完整的实战指南

随着互联网的普及和社交媒体的盛行,人们在网络上的活动越来越多,同时也涌现出大量的信息和舆情。这些信息和舆情在一定程度上会影响社会和个人的发展和进步。因此,舆情监测逐渐成为一项重要的任务。在本篇文章中,我们将为大家介绍…...

技术分享 | OceanBase 手滑误删了数据文件怎么办

作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 手滑误删了数据文件,并且没有可替换的节点时&…...

windows上Git Bash支持常用命令gcc tree zip wget cmake ninja

windows上Git Bash支持常用命令gcc tree zip wget cmake ninja 前言 Git Bash基于MinGW64, 提供了win32下的linux命令环境,如ls、cat、tar等。 但是Git Bash还是缺少一些命令,如gcc、make、tree、zip、wget、cmake、ninja等 1. Git Bash支持其他命令…...

面试题30天打卡-day10

1、String 和 StringBuffer、StringBuilder 的区别是什么? String、StringBuffer、StringBuilder主要的区别在于执行效率和线程安全上。 String:String字符串常量,意味着它是不可变的,导致每次对String都会生成新的String对象&a…...

【python】制作一个简单的界面,有手就行的界面~

目录 前言准备工作试手小案例开始我们今天的案例教学尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! ttkbootstrap 是一个基于 tkinter 的界面美化库, 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序。 ttkbootstrap …...

基于RK3568的Linux驱动开发—— GPIO知识点(二)

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主系列基于RK3568的Linux驱动开发——GPIO知识点(一)_daisy.skye的博客-CSDN博客 查看goio使用情况 cat /sys/kernel/debug/gpio 1|rk3568_r:# cat /sys/kernel/debug/gpio gpiochip0: GPIOs 0-3…...

item_get-获得aliexpress商品详情API的调用参数说明

item_get-获得aliexpress商品详情 aliexpress.item_get 公共参数 名称类型必须描述keyString是调用key(免)(测)(试)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中&…...

【Python_Scrapy学习笔记(三)】Scrapy框架之全局配置文件settings.py详解

Scrapy框架之全局配置文件settings.py详解 前言 settings.py 文件是 Scrapy框架下,用来进行全局配置的设置文件,可以进行 User-Agent 、请求头、最大并发数等的设置,本文中介绍 settings.py 文件下的一些常用配置 正文 1、爬虫的项目目录…...

spark读写时序数据库 TDengine 错误总结

最近在用spark读取、写入TDengine 数据库遇到了这样一个问题: JDBCDriver找不到动态链接库(no taos in java.library.path) 我本地都好好的,但是一上服务器写入就会报这个错误,看了很久没有排查出问题,后…...

Web中间件常见漏洞

一、IIS中间组件 1、PUT漏洞 原理:IIS开启了WebDAV,配置了可以写入的权限,造成了任意文件上传漏洞。 防御:关闭webDAV;关闭写入权限 2、短文件名猜解 原理: IIS的短文件名机制,可以暴力破解…...

Python Web 深度学习实用指南:第三部分

原文:Hands-On Python Deep Learning for the Web 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关…...

C#基础学习--预处理指令

目录 什么是预处理指令 基本规则 #define 和 #undef 指令 条件编译 条件编译结构 诊断指令 行号指令 ​编辑 区域指令 #pragam warning 指令 什么是预处理指令 源代码指定了程序的定义,预处理指令指示编译器如何处理源代码 基本规则 #define 和 #undef 指令…...

Spring Boot 接口加解密

1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提…...

大公司为什么禁止SpringBoot项目使用Tomcat?

前言 在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内…...

2023年第十三届MathorCup高校数学建模挑战赛|A题|量子计算机在信用评分卡组合优化中的应用

目录 题目详情 最终收入 贷款利息收入 - 坏账损失 赛题说明 1:流程简化及示例 赛题说明 2:QUBO 模型简介 赛题说明 3:赛题数据 问题​ 题目详情 在银行信用卡或相关的贷款等业务中,对客户授信之前,需…...

linux下搭建Hbase分布式数据库

文章目录 Hbase概念1.安装Hbase1.jdk的配置2.安装hbase 2.启动和操作1.启动服务2 **web-ui访问地址:http://node01:16010/master-status** 3.简单的操作1.连接 HBase2.帮助命令3.创建一张表 create a table4.使用查看表是否存在5.describe 查看表描述6.put命令插入数据到表7. s…...

unity,射手游戏

文章目录 介绍一,制作玩家具体函数脚本PlayerCharacter三、 制作玩家控制脚本 PlayerController,调用上面的函数方法四、 制作子弹脚本 shell五、 给玩家挂载脚本六、 制作坦克脚本七、 给坦克添加组件八、 开始游戏,播放动画九、 下载 介绍 …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...