电商网站免费设计包头教育云网站建设

张小明 2026/1/10 3:32:57
电商网站免费设计,包头教育云网站建设,wordpress不能后台,爱站网是什么意思Vtk的了解学习途径跟随代码中的示例#xff0c;循序渐进。本篇详细解析Cone2.exe#xff0c;在Cone.exe基础上新增了观察者的概念#xff0c;在Qt中复现一样的观察者。Demo在这里插入图片描述观察者模式概述观察者模式#xff08;Observer Pattern#xff09;#xff0c;…Vtk的了解学习途径跟随代码中的示例循序渐进。本篇详细解析Cone2.exe在Cone.exe基础上新增了观察者的概念在Qt中复现一样的观察者。Demo在这里插入图片描述观察者模式概述观察者模式Observer Pattern允许一个对象观察者关注另一个对象被观察者的状态变化并在事件发生时自动执行预定操作。观察者回调Observer-Callback 是一种事件驱动的编程机制用于处理 VTK 对象状态变化或特定事件的响应。核心概念事件EventVTK 对象在特定操作或状态变化时会触发事件例如 数据更新如vtkCommand::ModifiedEvent 渲染完成如vtkCommand::EndEvent 鼠标交互如vtkCommand::LeftButtonPressEvent 每个事件都有唯一的标识符如枚举值或字符串。观察者Observer 注册到 VTK 对象上用于 “监听” 特定事件的对象。当被监听的事件触发时观察者会执行关联的回调函数。 回调函数Callback 事件触发时实际执行的代码逻辑通常是自定义函数或方法用于响应事件如更新 UI、处理数据、日志记录等。工作流程步骤一定义回调函数实现处理事件的逻辑需符合 VTK 的回调接口规范。步骤二获取被观察者确定需要监听的 VTK 对象如vtkRenderer、vtkActor等。步骤三注册观察者将回调函数与特定事件绑定到被观察者上。步骤四事件触发与响应当被观察者触发事件时VTK 自动调用对应的回调函数。简单示例在这里插入图片描述在这里插入图片描述观察者实现vtkCommandvtkCommand是观察器/命令设计模式的实现。在这种设计模式中可以“观察”vtkObject的任何实例以了解它可能调用的任何事件。例如vtkRenderer在开始渲染时调用StartEvent在完成渲染时调用EndEvent。过滤器vtkProcessObject的子类在过滤器处理数据时调用StartEvent、ProgressEvent和EndEvent。事件的观察者是通过vtkObject中的AddObserver()方法添加的。AddObserver()除了需要一个事件id或名称外还需要一个vtkCommand实例或子类。请注意vtkCommand旨在被子类化以便可以打包支持回调所需的信息。事件处理可以按优先级列表进行组织因此可以通过设置AbortFlag变量截断特定事件的处理。优先级是通过以下方式设定的AddObserver()方法。默认情况下优先级为0具有相同优先级的事件将按第一个处理顺序中的最后一个处理。事件的排序/中止对于像3D小部件这样的东西很重要如果选择了小部件它们会处理事件然后中止对该事件的进一步处理。否则。事件被传递以供进一步处理。当vtkObject的实例调用事件时它还会将可选的void指针传递给callData。这个callData在大多数时候都是空的。callData并不特定于某一类型的事件而是特定于调用特定事件的vtkObject类型。例如 vtkCommand::PickEvent由vtkProp使用空指针调用但由vtkInteractiorStyleImage使用指向 vtkInteractitorStyleImage对象本身的指针调用。以下是可以使用非nullptr callData调用的事件列表在这里插入图片描述在这里插入图片描述复现Demo有一个很重要的点这个示例代码是阻塞时的循环刷新与Qt的基于消息的编程处理方式不一样这是过程式的编程我们复刻示例保持一块Demo就一个函数否则的话可以使用Qt定时器来实现更新位置就可以了。步骤一创建圆锥体数据源在这里插入图片描述步骤二创建多边形映射器在这里插入图片描述在这里插入图片描述步骤三创建演员类类似osg模型结点在这里插入图片描述在这里插入图片描述步骤四创建渲染器在这里插入图片描述在这里插入图片描述步骤五设置渲染器到渲染窗口在这里插入图片描述步骤六设置观察者回调函数这里回调类放在函数里面定义方便归类demo在这里插入图片描述步骤七用Qt的方式实现不阻塞又是过程化旋转为了看到更加清晰我们设置过渡延迟一循环为1000ms在这里插入图片描述在这里插入图片描述运行效果在这里插入图片描述在这里插入图片描述Demo源码VTKWidget.cppvoid VTKWidget::test_demo4_createCone(){// 步骤一创建圆锥体数据源vtkSmartPointervtkConeSource pConeSource VTKManager::createConeSource(0, 0, 0, 10, 30, 10);// 步骤二创建多边形映射器#if 0vtkSmartPointervtkPolyDataMapper pPolyDataMapper VTKManager::createPolyDataMapper(pConeSource);#elsevtkSmartPointervtkPolyDataMapper pPolyDataMapper VTKManager::createPolyDataMapper(pConeSource-GetOutputPort());#endif// 步骤三创建演员vtkSmartPointervtkActor pActor VTKManager::createActor(pPolyDataMapper);// 步骤四创建渲染器vtkSmartPointervtkRenderer pRenderer VTKManager::createRenderer(pActor, 0.1, 0.2, 0.4);// 步骤五渲染器添加到QVTKWidget渲染_pQVTKWidget-GetRenderWindow()-AddRenderer(pRenderer);// 步骤六设置观察者触发回调函数交互回调class vtkMyCallback : public vtkCommand{public:static vtkMyCallback *New() {return new vtkMyCallback;}void Execute(vtkObject *caller, unsigned long, void*) override{// 注意这个类在函数里面定义其函数内部无法直接-或者.来得到成员函数vtkRenderer *pRenderer reinterpret_castvtkRenderer*(caller);LOG pRenderer-GetActiveCamera()-GetPosition()[0] pRenderer-GetActiveCamera()-GetPosition()[1] pRenderer-GetActiveCamera()-GetPosition()[2];}};vtkMyCallback *pVtkMyCallback vtkMyCallback::New();pRenderer-AddObserver(vtkCommand::StartEvent, pVtkMyCallback);pVtkMyCallback-Delete();// 步骤七过程循环的方式实现旋转QElapsedTimer elapsedTimer;for(int index 0; index 360; index){LOG index;if(!isVisible()){continue;}// 渲染一次_pQVTKWidget-GetRenderWindow()-Render();elapsedTimer.start();while(elapsedTimer.elapsed() 100){qApp-processEvents();}if(!isVisible()){continue;}// 渲染器相机绕焦点旋转VTKManager::rotateAzimuth(pRenderer, 1);}}VTKManager.cppvtkSmartPointervtkConeSource VTKManager::createConeSource(double x, double y, double z, double r, int h, int n){// 步骤一智能指针定义vtkSmartPointervtkConeSource pConeSource;// 步骤二智能指针实例化pConeSource vtkSmartPointervtkConeSource::New();// 步骤三设置中心坐标pConeSource-SetCenter(x, y, z);// 步骤三设置半径pConeSource-SetRadius(r);// 步骤四设置圆锥的高度pConeSource-SetHeight(h);// 步骤五设置圆锥球体的经度分辨率即横向的切片数量横向/水平精细度pConeSource-SetResolution(n);return pConeSource;}vtkSmartPointervtkPolyDataMapper VTKManager::createPolyDataMapper(vtkAlgorithmOutput *pAlgorithmOutput){// 步骤一智能指针定义vtkSmartPointervtkPolyDataMapper pPolyDataMapper;// 步骤二智能指针实例化pPolyDataMapper vtkSmartPointervtkPolyDataMapper::New();// 步骤三设置pPolyDataMapper-SetInputConnection(pAlgorithmOutput);return pPolyDataMapper;}vtkSmartPointervtkActor VTKManager::createActor(vtkPolyDataMapper *pPolyDataMapper){// 步骤一智能指针定义vtkSmartPointervtkActor pActor;// 步骤二智能指针实例化pActor vtkSmartPointervtkActor::New();// 步骤三设置映射器pActor-SetMapper(pPolyDataMapper);return pActor;}vtkSmartPointervtkRenderer VTKManager::createRenderer(std::vectorvtkActor * vectorPActor, double r, double g, double b){// 步骤一智能指针定义vtkSmartPointervtkRenderer pRenderer;// 步骤二智能指针实例化pRenderer vtkSmartPointervtkRenderer::New();// 步骤三设置映射器for(int index 0; index vectorPActor.size(); index){pRenderer-AddActor(vectorPActor.at(index));}// 步骤四设置背景色pRenderer-SetBackground(r, g, b);return pRenderer;}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

四川省住房与城乡建设厅网站官网公司网站建设预算

作为一款功能强大的跨平台开源数字音频工作站,LMMS为音乐创作者提供了完整的音乐制作解决方案。无论你是初学者还是专业音乐人,这款软件都能满足从作曲编曲到混音母带的全流程需求。 【免费下载链接】lmms Cross-platform music production software 项…

张小明 2026/1/9 18:04:36 网站建设

电商网站的支付接入该怎么做呢注册网站会员需填写

第一章:Open-AutoGLM 体温数据记录在智能健康监测系统中,Open-AutoGLM 提供了一套高效的体温数据采集与记录机制,支持多设备接入和实时数据上传。该系统通过轻量级协议实现低功耗传输,适用于可穿戴设备、医疗终端等场景。数据采集…

张小明 2026/1/9 14:47:17 网站建设

南阳微信网站浦东区网站建设

一、单项选择题(本大题共 15 小题)1、在 Python 中,直接出现在代码中的具体值,如 10、3.14、"Python",被称为:① 变量② 常量③ 表达式④ 字面量2、type() 是 Python 的一个内置函数,…

张小明 2026/1/9 18:27:25 网站建设

如何制作钓鱼网站公众号二次开发

C 语言进阶之避坑指南:作用域与生命周期 —— 走出 “变量迷雾” 陷阱 变量作用域是 C 语言的基础特性,指变量在程序中可被访问的范围。看似简单的概念,却暗藏诸多陷阱 —— 从局部变量的内存释放陷阱,到全局变量的命名冲突,再到静态变量的生命周期误区,这些问题轻则导致…

张小明 2026/1/9 13:27:40 网站建设

网站建设工作情况汇报wordpress积分主题

YOLO模型部署到云服务器完整流程 在智能制造工厂的质检线上,成千上万的产品正以每分钟数百件的速度通过视觉检测工位。传统人工目检早已无法满足这种高节奏、高精度的要求——而此时,云端运行的YOLO模型正在GPU集群中实时分析每一帧图像,毫秒…

张小明 2026/1/9 14:59:02 网站建设

拉链网站源码wordpress 超时

页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。包的使用及引用import router from ohos.router1.pushUrl-压栈跳转pushUrl(options:…

张小明 2026/1/9 12:51:33 网站建设