多actor实体组合并统一应用变换_vtkAssembly


开发环境:

  1. Windows 11 家庭中文版
  2. Microsoft Visual Studio Community 2019
  3. VTK-9.3.0.rc0
  4. vtk-example
  5. 参考代码

demo解决问题:创建了一个球体和立方体的三维可视化,将它们组合成一个装配体,应用变换,调整不透明度,并使用 VTK 显示场景。
在这里插入图片描述

关键流程:

  1. 组装: 使用 vtkAssembly 将球体和立方体组合成一个装配体,使它们被视为一个单独的实体。

  2. 变换 对整个装配体应用变换 (vtkTransform),将其平移到三维空间中的新位置。

  3. 获取actor集合assembly->GetActors(collection);, 改变actor不透明度

关键代码:

  // Combine the sphere and cube into an assembly./*创建 vtkProp3D 的层次结构(可转换道具)vtkAssembly 是一个将 vtkProp3Ds、其子类和其他程序集组合成树状层次结构的对象。vtkProp3Ds 和程序集可以通过只转换层次结构中的根程序集来一起转换。vtkAssembly 对象可以用来代替 vtkProp3D,因为它是 vtkProp3D 的子类。区别在于,vtkAssembly 会维护一个构成装配体的 vtkProp3D 实例(其 "部件")列表。然后,任何转换(即缩放、旋转、平移)父装配体的操作都会转换其所有部件。请注意,这个过程是递归的:您可以创建由任意深度的装配体和/或 vtkProp3D 组成的组。*/vtkNew<vtkAssembly> assembly;assembly->AddPart(sphereActor);assembly->AddPart(cubeActor);// Apply a transform to the whole assembly.vtkNew<vtkTransform> transform;transform->PostMultiply(); // This is the key line.transform->Translate(5.0, 0, 0);assembly->SetUserTransform(transform);// Extract each actor from the assembly and change its opacity.vtkNew<vtkPropCollection> collection;//遍历assemblyassembly->GetActors(collection);collection->InitTraversal();for (vtkIdType i = 0; i < collection->GetNumberOfItems(); i++){dynamic_cast<vtkActor*>(collection->GetNextProp())->GetProperty()->SetOpacity(0.5);}

prj name: Assembly

#include <vtkActor.h>
#include <vtkAssembly.h>
#include <vtkCubeSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
#include <vtkTransform.h>int main(int, char*[])
{vtkNew<vtkNamedColors> namedColors;// Create a sphere.vtkNew<vtkSphereSource> sphereSource;sphereSource->Update();vtkNew<vtkPolyDataMapper> sphereMapper;sphereMapper->SetInputConnection(sphereSource->GetOutputPort());vtkNew<vtkActor> sphereActor;sphereActor->SetMapper(sphereMapper);sphereActor->GetProperty()->SetColor(namedColors->GetColor3d("Banana").GetData());// Create a cube.vtkNew<vtkCubeSource> cubeSource;cubeSource->SetCenter(5.0, 0.0, 0.0);cubeSource->Update();vtkNew<vtkPolyDataMapper> cubeMapper;cubeMapper->SetInputConnection(cubeSource->GetOutputPort());vtkNew<vtkActor> cubeActor;cubeActor->SetMapper(cubeMapper);cubeActor->GetProperty()->SetColor(namedColors->GetColor3d("Tomato").GetData());// Combine the sphere and cube into an assembly./*创建 vtkProp3D 的层次结构(可转换道具)vtkAssembly 是一个将 vtkProp3Ds、其子类和其他程序集组合成树状层次结构的对象。vtkProp3Ds 和程序集可以通过只转换层次结构中的根程序集来一起转换。vtkAssembly 对象可以用来代替 vtkProp3D,因为它是 vtkProp3D 的子类。区别在于,vtkAssembly 会维护一个构成装配体的 vtkProp3D 实例(其 "部件")列表。然后,任何转换(即缩放、旋转、平移)父装配体的操作都会转换其所有部件。请注意,这个过程是递归的:您可以创建由任意深度的装配体和/或 vtkProp3D 组成的组。*/vtkNew<vtkAssembly> assembly;assembly->AddPart(sphereActor);assembly->AddPart(cubeActor);// Apply a transform to the whole assembly.vtkNew<vtkTransform> transform;transform->PostMultiply(); // This is the key line.transform->Translate(5.0, 0, 0);assembly->SetUserTransform(transform);// Extract each actor from the assembly and change its opacity.vtkNew<vtkPropCollection> collection;//遍历assemblyassembly->GetActors(collection);collection->InitTraversal();for (vtkIdType i = 0; i < collection->GetNumberOfItems(); i++){dynamic_cast<vtkActor*>(collection->GetNextProp())->GetProperty()->SetOpacity(0.5);}// VisualizationvtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(renderer);vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow);renderer->AddActor(assembly);renderer->SetBackground(namedColors->GetColor3d("SlateGray").GetData());renderer->ResetCamera();renderWindow->SetWindowName("Assembly");renderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

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

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

相关文章

App Inventor 2 数字转文本

App Inventor 2 是弱语言类型&#xff0c;文本和数字之间不用刻意去转换&#xff0c;之间赋值就可以了。 案例&#xff1a;数字转文本 App Inventor 2 是弱语言类型&#xff0c;同理数字也能直接赋值给文本变量&#xff1a; 更多请参考&#xff1a;App Inventor 2 文本代码块…

什么是网络爬虫技术?它的重要用途有哪些?

网络爬虫&#xff08;Web Crawler&#xff09;是一种自动化的网页浏览程序&#xff0c;能够根据一定的规则和算法&#xff0c;从互联网上抓取和收集数据。网络爬虫技术是随着互联网的发展而逐渐成熟的一种技术&#xff0c;它在搜索引擎、数据挖掘、信息处理等领域发挥着越来越重…

可以ping通IP但是无法远程连接-‘telnet‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

起因 一开始远程连接IP&#xff0c;报错&#xff0c;怀疑是自己网络原因&#xff0c;但是同事依旧无法连接 怀疑是自己防火墙的原因&#xff0c;查看关闭依旧无法连接 问题 两个地址可以ping通排除防火墙缘故 怀疑端口&#xff0c;测试端口 然 解决方案 winR 输入control…

SPASS-信度分析

信度分析概述 效度 效度指的是量表是否真正反映了我们希望测量的东西。一般来说&#xff0c;有4种类型的效度&#xff1a;内容效度、标准效度、结构效度和区分效度。内容效度是一种基于概念的评价指标&#xff0c;其他三种效度是基于经验的评价指标。如果一个量表实际上是有效…

构建智能工厂设施的“智能电机保护和信息监控解决方案”

“智能电机保护和信息监控解决方案”是施耐德电气韩国公司直接为对设施数字化、工厂智能化和节能感兴趣的客户和国内外公司量身定制的集成解决方案。 最大的特点是包含以HMI为中心&#xff0c;轻松高效地处理IT和OT的复杂数据。通过添加工业物联网&#xff08;IIoT&#xff09…

CBTC 2023氢能展倒计时6天,最新同期会议活动Plus版发布

随着时间的推移&#xff0c;CBTC2023深圳氢能技术展览会即将拉开序幕。这场盛会将于11月30日在深圳福田会展中心盛大开幕&#xff0c;以“以储赋能&#xff0c;智造未来”为主题&#xff0c;旨在搭建一个商务交流、供需合作、创新产品发布的平台&#xff0c;让氢能全产业链之间…

JoySSL OV证书

JoySSL OV证书全称为Organization Validation SSL证书&#xff0c;属于组织验证型SSL证书。它是一种增强型的SSL证书&#xff0c;不仅能够提供基本的数据加密功能&#xff0c;还能提供更高级别的安全保障。通过验证申请者身份的方式&#xff0c;确保了用户访问的网站是由合法的…

tomcat国密ssl测试

文章目录 程序包准备部署配置访问测试 程序包准备 下载 tomcat8.5 https://www.gmssl.cn/gmssl/index.jsp 下载 tomcat 国密组件及证书 本次测试所有的程序文件均已打包&#xff0c;可以直接 点击下载 部署配置 自行完成 完成centos 的jdk配置。 部署tomcat,将 gmssl4t.jar…

「德州仪器嵌入式技术创新发展研讨会」落幕,飞凌嵌入式携手TI推动技术创新

11月22日&#xff0c;德州仪器嵌入式技术创新发展研讨会&#xff08;北京站&#xff09;顺利举行&#xff0c;本次研讨会邀请了众多业界领先的企业和专家到场&#xff0c;飞凌嵌入式作为TI生态伙伴受邀参加&#xff0c;与众多业内伙伴共话嵌入式技术的未来发展趋势。 在本次研…

深度学习图像风格迁移 - opencv python 计算机竞赛

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

K8S如何部署ActiveMQ(单机、集群)

前言 大家好&#xff0c;在今天的讨论中&#xff0c;我们将深入研究如何将ActiveMQ迁移到云端&#xff0c;以便更好地利用Kubernetes的容器调度和资源管理能力&#xff0c;确保ActiveMQ的高可用性和可扩展性。 ActiveMQ是Apache开源组织推出的一款开源的、完全支持JMS1.1和J2…

opencv-背景减除

背景减除&#xff08;Background Subtraction&#xff09;是一种用于从视频序列中提取前景对象的计算机视觉技术。该技术的主要思想是通过建模和维护场景的背景&#xff0c;从而检测出在不同时间点出现的前景对象。 OpenCV 提供了一些用于背景减除的函数&#xff0c;其中最常用…