CallBack 两种回调方式

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①vtk的两种回调方式函数回调和类方法回调


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, \ vtkRenderer, vtkCamera from vtkmodules.vtkFiltersSources import vtkConeSource from vtkmodules.vtkFiltersModeling import vtkOutlineFilter from vtkmodules.vtkRenderingAnnotation import vtkAxesActor from vtkmodules.vtkInteractionWidgets import vtkOrientationMarkerWidget def main(): use_function_callback = True colors = vtkNamedColors() ren = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(ren) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) source = vtkConeSource() source.SetCenter(0, 0, 0) source.SetRadius(1) source.SetHeight(1.61) source.SetResolution(128) source.Update() mapper = vtkPolyDataMapper() mapper.SetInputConnection(source.GetOutputPort()) actor = vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetColor(colors.GetColor3d("peacock")) actor.GetProperty().SetAmbient(0.3) actor.GetProperty().SetDiffuse(0.0) actor.GetProperty().SetSpecular(1.0) actor.GetProperty().SetSpecularPower(20.0) outline = vtkOutlineFilter() outline.SetInputConnection(source.GetOutputPort()) outlineMapper = vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtkActor() outlineActor.GetProperty().SetColor(colors.GetColor3d('Black')) outlineActor.SetMapper(outlineMapper) ren.AddActor(actor) ren.AddActor(outlineActor) ren.SetBackground(colors.GetColor3d('AliceBlue')) renWin.SetSize(512, 512) camera = vtkCamera() camera.SetPosition(4.6, -2.0, 3.8) camera.SetFocalPoint(0, 0, 0) camera.SetClippingRange(3.2, 10.2) # 摄像机的近平面(Near Clipping Plane)和远平面(Far Clipping Plane)之间的可见空间范围 camera.SetViewUp(0.3, 1.0, 0.13) ren.SetActiveCamera(camera) renWin.Render() renWin.SetWindowName('CallBack') axes1 = MakeAxesActor() om1 = vtkOrientationMarkerWidget() om1.SetOrientationMarker(axes1) om1.SetViewport(0, 0, 0.2, 0.2) om1.SetInteractor(iren) om1.EnabledOn() om1.InteractiveOn() """ 这里是两种回调方法,一种是函数回调,即GetOrientation,另外一种是类方法回调,即OrientationObserver, """ if use_function_callback: """ 在这段代码之前,要先解释一件事情,在 Python 中,函数不仅仅是一段可执行的代码块,它本身也是一个对象(就像数字、字符串、列表一样)。 那么,函数对象也可以拥有属性 下面这段代码 def my_function(a, b): return a + b # my_function 是一个对象。现在我们给它添加一个属性叫做 'data' my_function.data = "这是函数my_function存储的数据" # 我们可以随时访问这个属性 print(my_function.data) # 输出: 这是函数my_function存储的数据 """ GetOrientation.cam = ren.GetActiveCamera() iren.AddObserver('EndInteractionEvent', GetOrientation) """ 为什么要这样写??? VTK 的 iren.AddObserver 要求回调函数必须只接受两个参数:caller(事件发起者)和 ev(事件类型) 想在GetOrientation里面操作相机,又不能参数传入,就只能通过这种方式 在回调之前,把相机对象存进GetOrientation函数里面 """ else: iren.AddObserver('EndInteractionEvent', OrientationObserver(ren.GetActiveCamera())) def GetOrientation(caller, ev): print(caller.GetClassName(), 'Event Id:', ev) # 输出:vtkWin32RenderWindowInteractor Event Id: EndInteractionEvent CameraOrientation(GetOrientation.cam) def CameraOrientation(cam): fmt1 = '{:>15s}' fmt2 = '{:9.6g}' print(fmt1.format('Position:'), ', '.join(map(fmt2.format, cam.GetPosition()))) print(fmt1.format('Focal point:'), ', '.join(map(fmt2.format, cam.GetFocalPoint()))) print(fmt1.format('Clipping range:'), ', '.join(map(fmt2.format, cam.GetClippingRange()))) print(fmt1.format('View up:'), ', '.join(map(fmt2.format, cam.GetViewUp()))) print(fmt1.format('Distance:'), fmt2.format(cam.GetDistance())) class OrientationObserver(object): def __init__(self, cam): self.cam = cam def __call__(self, caller, ev): print(caller.GetClassName(), 'Event Id:', ev) CameraOrientation(self.cam) def MakeAxesActor(): axes = vtkAxesActor() axes.SetShaftTypeToCylinder() axes.SetXAxisLabelText('X') axes.SetYAxisLabelText('Y') axes.SetZAxisLabelText('Z') axes.SetTotalLength(1.0, 1.0, 1.0) axes.SetCylinderRadius(0.5 * axes.GetCylinderRadius()) axes.SetConeRadius(1.025 * axes.GetConeRadius()) axes.SetSphereRadius(1.5 * axes.GetSphereRadius()) return axes if __name__ == '__main__': main()

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

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

相关文章

OpenXLSX:C++ Excel处理库的终极使用指南

OpenXLSX:C Excel处理库的终极使用指南 【免费下载链接】OpenXLSX A C library for reading, writing, creating and modifying Microsoft Excel (.xlsx) files. 项目地址: https://gitcode.com/gh_mirrors/op/OpenXLSX 在现代软件开发中,Excel文…

Z-Image照片级生成实战:云端1小时1块,比本地快5倍

Z-Image照片级生成实战:云端1小时1块,比本地快5倍 1. 为什么选择云端Z-Image生成? 作为一名电商运营,我深知产品图生成的重要性。本地运行Z-Image需要20分钟一张,效率太低,而deadline又迫在眉睫。这时候&…

多租户虚拟线程隔离关键技术突破(仅限资深架构师阅读的内部资料)

第一章:多租户虚拟线程隔离概述在现代云原生应用架构中,多租户系统需要高效、安全地共享计算资源,同时确保各租户之间的逻辑隔离。虚拟线程(Virtual Threads)作为轻量级的并发执行单元,显著提升了系统的吞吐…

MediaPipe Hands与OpenCV协同:图像处理增强实战

MediaPipe Hands与OpenCV协同:图像处理增强实战 1. 引言:AI手势识别的现实意义与技术演进 随着人机交互方式的不断演进,手势识别正逐步从科幻场景走向日常生活。无论是智能驾驶中的非接触控制、AR/VR中的自然交互,还是智能家居的…

揭秘静态反射元数据提取全过程:3步实现零成本运行时洞察

第一章:静态反射元数据获取在现代编程语言中,静态反射是一种在编译期或运行期获取类型结构信息的机制。与动态反射不同,静态反射通过预定义的元数据描述类型,避免了运行时性能损耗,同时支持更安全的类型操作。元数据的…

游戏玩家必看:MSVCR120.DLL丢失的5种实战修复方法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个游戏运行环境检测工具,功能包括:1. 检测常见游戏依赖的DLL文件(包括MSVCR120.DLL) 2. 显示缺失文件的具体信息 3. 提供三种修复方案:直…

CellPicking 网格面的选择与变色(vtkCellPicker)

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkCellPicker在3D场景中选取几何对象&am…

AI数智政工软件系统:把思想政治工作装上“智慧大脑”

如果你以为“数智政工”就是把纸质学习材料变成PDF,那就太小看这个系统了。想象一下:一个能理解两万份思想汇报的核心观点、能预判员工思想动态趋势、能个性化匹配教育内容的“AI政委助手”——这才是真正的数智政工系统。 技术内核:三个“智…

AI如何用sprintf简化你的字符串格式化代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Python程序,使用sprintf风格的字符串格式化功能。要求实现以下功能:1) 支持整数、浮点数、字符串等多种数据类型格式化 2) 自动检测变量类型并应用…

CPU亲和性绑定你真的懂吗:99%的工程师忽略的关键细节

第一章:CPU亲和性绑定你真的懂吗:99%的工程师忽略的关键细节在高性能计算与低延迟系统中,CPU亲和性(CPU Affinity)是优化线程调度、减少上下文切换和缓存失效的重要手段。然而,大多数工程师仅停留在使用工具…

AI人脸隐私卫士如何应对戴墨镜人脸?眼部遮挡检测实测

AI人脸隐私卫士如何应对戴墨镜人脸?眼部遮挡检测实测 1. 背景与挑战:当“神秘感”遇上隐私保护 在数字时代,照片和视频中的人脸信息已成为敏感数据的焦点。无论是社交媒体分享、监控录像归档,还是企业内部资料管理,人…

Windows 11安装全攻略:轻松解决硬件限制与驱动兼容性问题

Windows 11安装全攻略:轻松解决硬件限制与驱动兼容性问题 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 还…

树莓派也能跑大模型!通义千问2.5-0.5B轻量部署实测

树莓派也能跑大模型!通义千问2.5-0.5B轻量部署实测 在边缘计算与AI融合的浪潮中,能否让一台树莓派运行真正意义上的“大模型”?过去这或许是天方夜谭,但随着模型压缩、量化和推理引擎的飞速发展,答案已经变为“可以”…

手势交互系统设计:MediaPipe Hands最佳实践

手势交互系统设计:MediaPipe Hands最佳实践 1. 引言:AI 手势识别与追踪的工程价值 随着人机交互技术的演进,非接触式手势控制正逐步从科幻走向现实。在智能设备、虚拟现实(VR)、增强现实(AR)以…

1分钟创建测试用MSI文件的秘密技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个MSI原型生成器,功能:1.通过表单定义基础信息 2.选择预设组件模板 3.自定义安装流程 4.实时生成测试用MSI 5.下载分享功能。技术方案:Py…

Blender VRM插件终极指南:从安装到精通的完整攻略

Blender VRM插件终极指南:从安装到精通的完整攻略 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 or later 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 想要在Blender中轻松创建专…

GLM-4.6V-Flash-WEB部署教程:单卡A10G高效运行实测

GLM-4.6V-Flash-WEB部署教程:单卡A10G高效运行实测 智谱最新开源,视觉大模型。 1. 引言 1.1 学习目标 本文将带你从零开始完成 GLM-4.6V-Flash-WEB 的本地化部署,涵盖环境配置、一键启动脚本使用、网页与API双模式推理调用。通过本教程&…

通义千问2.5-0.5B避坑指南:从部署到应用的全流程解析

通义千问2.5-0.5B避坑指南:从部署到应用的全流程解析 1. 引言:为什么选择 Qwen2.5-0.5B-Instruct? 在边缘计算和端侧AI快速发展的今天,如何在资源受限设备上运行高效、功能完整的语言模型,成为开发者关注的核心问题。…

开源多模态模型推荐:GLM-4.6V-Flash-WEB镜像开箱即用

开源多模态模型推荐:GLM-4.6V-Flash-WEB镜像开箱即用 智谱最新开源,视觉大模型。 1. 背景与技术趋势 1.1 多模态大模型的演进路径 近年来,多模态大模型在AI领域持续升温。从早期的图文匹配、图像描述生成,到如今支持复杂推理、跨…

GEOSERVER性能优化:从30秒到3秒的飞跃

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 编写一个GEOSERVER性能优化工具,自动执行以下操作:1) 分析当前服务响应时间;2) 生成缓存配置建议;3) 优化SQL视图查询语句&#xff…