VTK Python PyQt 监听键盘 控制 Actor 移动 变色

news2025/1/23 17:38:02

KeyPressInteractorStyle

在vtk 中有时我们需要监听 键盘或鼠标做一些事;

1. 创建 Actor;

Sphere = vtk.vtkSphereSource()
Sphere.SetRadius(10)

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(Sphere.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(0.0, 1.0, 0.0)

2.创建 vtkRenderer vtkRenderWindow  vtkRenderWindowInteractor

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

3.重写交互器 Style

class KeyPressInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):

    def __init__(self, parent=None):
        self.parent = vtk.vtkRenderWindowInteractor()
        if (parent is not None):
            self.parent = parent

        self.AddObserver("KeyReleaseEvent", self.keyRelease)

    def keyRelease(self, obj, event):
        key = self.parent.GetKeySym()
        if key == 'Up':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0],pt[1]+5,pt[2])
        elif key == 'Down':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0],pt[1]-5,pt[2])
        if key == 'Left':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0]-5,pt[1],pt[2])
        elif key == 'Right':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0]+5,pt[1],pt[2])

        elif key== 'c':
            # 产生随机颜色
            r = vtk.vtkMath.Random()
            g = vtk.vtkMath.Random()
            b = vtk.vtkMath.Random()
            actor.GetProperty().SetColor(r, g, b)
        renWin.Render()
 4.添加交互器:
iren.SetInteractorStyle(KeyPressInteractorStyle(parent=iren))

ren.AddActor(actor)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1454532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis篇】详解布隆过滤器(原理 | 操作 | 代码)

文章目录 🍔简述布隆过滤器🌺原理🛸存入过程🛸查询过程 🏳️‍🌈优缺点⭐优点⭐缺点 🌹代码实现(本地)🌹代码实现(分布式) &#x1f3…

【鸿蒙系统学习笔记】TypeScript开发语言

一、背景 HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScrip…

第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录前言一、三种语音引擎支持介绍和示例代码二、SAPI5引擎适用场景介绍和示例代码三、nsss引擎适用场景介绍和示例代码四、eSpeak适用场景介绍和示例代码五、归纳总结 系列短博文目…

【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

文章目录 前言一、W25Q64操作方法基本概念1.1 读数据1.2 写使能1.3 读状态1.4 擦除扇区1.5 烧写页 总结 前言 在嵌入式系统开发中,使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间,以存储程序代码、配置数据等。W25Q64 是一款常见的…

说说对BOM的理解(常见的BOM对象了解哪些)

文章目录 一、是什么二、window三、location四、navigator五、screen六、history 一、是什么 BOM (Browser Object Model),浏览器对象模型,提供了独立于内容与浏览器窗口进行交互的对象 其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退&…

数据库小技能:事务隔离级别

文章目录 引言I 数据库1.1 事务的隔离级别1.2 报表业务场景:可重复读1.3 高并发场景:读已提交1.4 读写分离1.5 分表规范1.6 分析数据库死锁引言 事务隔离级别的选择: 报表业务场景:可重复读报表业务场景需要同一时间维度进行统计,反应数据趋势,进行查询的时候需要使用re…

基于springboot车辆充电桩管理系统源码和论文

随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,…

Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136131310 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

2023年全球架构师峰会(ArchSummit北京站2023):核心内容与学习收获(附大会核心PPT下载)

本次峰会是一场集结了全球顶级技术专家和行业领袖的盛会。作为一年一度的重要技术交流活动,本次峰会聚焦当前及未来软件架构的发展趋势、技术挑战与创新实践,旨在为参会者提供一个深度交流、学习与合作的平台。在为期两天的会议中,与会者不仅…

宠物赛道都卷出了哪些花样?媒介盒子分享

如今的宠物市场,已经从让宠物吃饱喝足的基本生理需求,拓展到五花八门的精神需求,与“马斯洛需求定理”高度一致。商家们看到宠物经济的潜力,不再满足于给人类造节,给毛孩子造节也是重中之重,今天媒介盒子就…

vcruntime140.dll文件下载的多种方案分享,最新下载安装方法解析

安装或运行软件时常遇到缺失系统文件的相关问题,一个典型的例子是vcruntime140.dll​丢失错误,这种情况经常发生在运行那些基于Visual Studio 2015开发的应用上。缺乏这个文件的提示可能会严重拖慢程序的响应速度,并有可能阻碍用户使用受影响…

[每周一更]-(第87期):主流软件负载均衡器对比(LVS、Nginx、HAproxy)

负载均衡的实现方式一般来说有以下三种: 基于DNS负载均衡:直接通过DNS来实现负载均衡。优点是非常简单,缺点是调整后不知道啥时生效(当然正常情况下几十分钟,长的也可能更长) 基于硬件负载均衡:购买硬件,也…

三勾点餐系统源码,java后台+微信小程序 实现完整的餐厅点餐

三勾点餐系统基于javaspringbootelement-plusuniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能介绍 1.…

(22.12.20)matlab2022+yalmip+cplex安装教程,win11 x64

前言 Hi,你好!最近刚刚更换新的电脑设备,安装软件时尽量选择最新版本,但也遇到了大大小小的安装问题,这里把踩到的坑一并总结出来,给出一份还算合理的MATLAByalmipCPLEX安装教程(win11)。 MAT…

Code Composer Studio (CCS) - Build All

Code Composer Studio [CCS] - Build All 1. Build AllReferences 1. Build All Project -> Build All (Ctrl B) References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

LeetCode LCR 085. 括号生成

题目链接https://leetcode.cn/problems/IDBivT/description/ 正整数 n 代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 class Solution {public List<String> generateParenthesis(int n) {List<String>…

Ubuntu开启SSH远程登录

正文共&#xff1a;555 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 很久很久之前&#xff0c;我们装了一台Ubuntu&#xff08;66%的经验丰富开发者和69%的学生更喜欢的Ubuntu的安装初体验&#xff09;&#xff0c;今天翻出来准备重新使用一下&#xff0c;突然发现它竟…

boost搜索引擎项目

目录 一、对数据源的数据清洗(去标签)操作&#xff1a;parse.cc二、根据去标签之后的干净的数据构建正排和倒排索引&#xff1a;index.hpp三、提供搜索功能&#xff1a;searcher.hpp四、放公用方法的头文件(包括boost库中的一些方法以及jieba分词的方法)&#xff1a;util.hpp五…

【IntelliJ IDEA】IDEA自动生成serialVersionUID的办法

digest&#xff1a;实体对象实现了java.io.Serializable接口后&#xff0c;一般都会提供一个serialVersionUID一做版本区分。在IDEA里&#xff0c;可以通过一些设置&#xff0c;帮助我们快速生成serialVersionUID。 1.IDEA设置序列化类检测序列化标识 File --> Settings --…

王力宏胜诉,事实胜于雄辩,真相终将大白。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 好的&#xff0c;以下是对“2月5日&#xff0c;王力宏工作室在…