VTK SetLayer设置图层

        在VTK中,你可以通过设置vtkRenderer的层级来控制渲染的顺序。例如,你可以将体绘制的vtkRenderer设置在第0层,将面模型的vtkRenderer设置在第1层。这样,面模型就会覆盖显示在下一层的体绘制模型上,有时我们会有这样的需求。

        直接通过vtkRenderer的SetLayer设置即可,如果想两个图层的交互同步则需将上层renderer的相机设置给下层即可。

例子
#include <vtkActor.h>
#include <vtkLineSource.h>
#include <vtkNamedColors.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkPolyData.h>
#include <vtkPointData.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkRenderer.h>
#include <vtkTubeFilter.h>
#include <vtkParametricSpline.h>
#include <vtkParametricFunctionSource.h>
#include <vtkTupleInterpolator.h>
#include <vtkDoubleArray.h>int main(int, char* [])
{vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();// 画线vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();points->InsertPoint(0, 1, 0, 0);points->InsertPoint(1, 2, 0, 0);points->InsertPoint(2, 3, 1, 0);points->InsertPoint(3, 4, 1, 0);points->InsertPoint(4, 5, 0, 0);points->InsertPoint(5, 6, 0, 0);// 插值样条曲线vtkSmartPointer<vtkParametricSpline> spline =vtkSmartPointer<vtkParametricSpline>::New();spline->SetPoints(points);vtkSmartPointer<vtkParametricFunctionSource> functionSource = vtkSmartPointer<vtkParametricFunctionSource>::New();functionSource->SetParametricFunction(spline);functionSource->SetUResolution(10 * points->GetNumberOfPoints());functionSource->Update();// Create a tube (cylinder) around the line.double rad = 0;vtkSmartPointer<vtkTupleInterpolator> interpolatedRadius = vtkSmartPointer<vtkTupleInterpolator>::New();interpolatedRadius->SetInterpolationTypeToLinear();interpolatedRadius->SetNumberOfComponents(1);rad = .3;interpolatedRadius->AddTuple(0, &rad);rad = .3;interpolatedRadius->AddTuple(1, &rad);rad = .2;interpolatedRadius->AddTuple(2, &rad);rad = .2;interpolatedRadius->AddTuple(3, &rad);rad = .1;interpolatedRadius->AddTuple(4, &rad);rad = .1;interpolatedRadius->AddTuple(5, &rad);// Generate the radius scalars.vtkSmartPointer<vtkDoubleArray> tubeRadius = vtkSmartPointer<vtkDoubleArray>::New();unsigned int n = functionSource->GetOutput()->GetNumberOfPoints();tubeRadius->SetNumberOfTuples(n);tubeRadius->SetName("TubeRadius");auto tMin = interpolatedRadius->GetMinimumT();auto tMax = interpolatedRadius->GetMaximumT();std::cout << tMin<<std::endl;std::cout << tMax <<std::endl;double r = 0;for (unsigned int i = 0; i < n; ++i){auto t = (tMax - tMin) / (n - 1) * i + tMin;interpolatedRadius->InterpolateTuple(t, &r);tubeRadius->SetTuple1(i, r);}// Add the scalars to the polydata.auto tubePolyData = functionSource->GetOutput();tubePolyData->GetPointData()->AddArray(tubeRadius);tubePolyData->GetPointData()->SetActiveScalars("TubeRadius");vtkSmartPointer<vtkTubeFilter> tubeFilter = vtkSmartPointer<vtkTubeFilter>::New();tubeFilter->SetInputData(tubePolyData);tubeFilter->SetNumberOfSides(50);tubeFilter->SetVaryRadiusToVaryRadiusByAbsoluteScalar();tubeFilter->Update();// Create a mapper and actor.vtkSmartPointer<vtkPolyDataMapper> lineMapper =vtkSmartPointer<vtkPolyDataMapper>::New();lineMapper->SetInputData(functionSource->GetOutput());lineMapper->ScalarVisibilityOff();vtkSmartPointer<vtkActor> lineActor =vtkSmartPointer<vtkActor>::New();lineActor->GetProperty()->SetColor(colors->GetColor3d("Blue").GetData());lineActor->SetMapper(lineMapper);lineActor->GetProperty()->SetLineWidth(3);// Create a mapper and actor.vtkSmartPointer<vtkPolyDataMapper> tubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();tubeMapper->SetInputData(tubeFilter->GetOutput());vtkSmartPointer<vtkActor> tubeActor = vtkSmartPointer<vtkActor>::New();tubeActor->SetMapper(tubeMapper);// Create a renderer, render window, and interactor.vtkSmartPointer<vtkRenderer> tube_renderer = vtkSmartPointer<vtkRenderer>::New();tube_renderer->AddActor(tubeActor);tube_renderer->SetLayer(0);tube_renderer->SetBackground(colors->GetColor3d("DarkSlateGray").GetData());vtkSmartPointer<vtkRenderer> line_renderer = vtkSmartPointer<vtkRenderer>::New();line_renderer->AddActor(lineActor);line_renderer->SetLayer(1);line_renderer->SetBackground(colors->GetColor3d("DarkSlateGray").GetData());tube_renderer->SetActiveCamera(line_renderer->GetActiveCamera()); // 两个图层交互同步line_renderer->ResetCamera();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(tube_renderer);renderWindow->AddRenderer(line_renderer);renderWindow->SetNumberOfLayers(2); // 设置图层数量renderWindow->SetWindowName("TubeFilter");vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderWindowInteractor->SetInteractorStyle(style);// Render and interact.renderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

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

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

相关文章

人工智能|推荐系统——基于tensorflow的个性化电影推荐系统实战(有前端)

代码下载&#xff1a; 基于tensorflow的个性化电影推荐系统实战(有前端).zip资源-CSDN文库 项目简介&#xff1a; dl_re_web : Web 项目的文件夹re_sys&#xff1a; Web app model&#xff1a;百度云下载之后&#xff0c;把model放到该文件夹下recommend&#xff1a; 网络模型相…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法&#xff08;续篇五&#xff09; 1.1 种子词 ​ 种子词&#xff08;seed word&#xff09;通常指的是在对话中使用的初始提示或关键词&#xff0c;用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子&#xff0c;通常与对话的主题…

u8 bit0 :1; “:”位字段的声明(也称为位段)

在C语言中&#xff0c;冒号&#xff08;:&#xff09;用于声明bit字段&#xff0c;也称为位域(Bit-field)。位域允许我们在结构体中对结构成员进行位级的精确操作&#xff0c;主要用于对寄存器和硬件操作进行描述和访问。冒号后面的数字表示该位域的位宽度。 在通信中&#xff…

SpringBoot和SpringMVC

目录 一、springboot项目 &#xff08;1&#xff09;创建springboot项目 &#xff08;2&#xff09;目录介绍 &#xff08;3&#xff09;项目启动 &#xff08;4&#xff09;运行一个程序 &#xff08;5&#xff09;通过其他方式创建和运行springboot项目 二、SpringMVC…

【MySQL】-11 MySQL 架构及优化原理

MySQL 架构及优化原理 1 MySQL逻辑架构2 MySQL逻辑架构整体分为三层 :3 MySQL查询过程MySQL 整个查询执行过程&#xff0c;总的来说分为 5 个步骤 :3.1 客户端/服务端通信协议3.2 查询缓存3.3 查询优化3.4 查询执行引擎3.5 返回结果给客户端 4 查询系统性能1 分析查询语句2 索…

【多模态大模型】GLIP:零样本学习 + 目标检测 + 视觉语言大模型

GLIP 核心思想GLIP 对比 BLIP、BLIP-2、CLIP 主要问题: 如何构建一个能够在不同任务和领域中以零样本或少样本方式无缝迁移的预训练模型&#xff1f;统一的短语定位损失语言意识的深度融合预训练数据类型的结合语义丰富数据的扩展零样本和少样本迁移学习 效果 论文&#xff1a;…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来&#xff0c;影响信创改造的进度。例如&#xff0c;某金融企业积极响应国产化信创替代战略&#xff0c;购置了一批麒麟操作系统电脑。分发使用中发现了如下问题&#xff1a; • 当前麒麟操作系统电脑无法做到统一身份认证&…

Flask 入门7:使用 Flask-Moment 本地化日期和时间

如果Web应用的用户来自世界各地&#xff0c;那么处理日期和时间可不是一个简单的任务。服务器需要统一时间单位&#xff0c;这和用户所在的地理位置无关&#xff0c;所以一般使用协调世界时&#xff08;UTC&#xff09;。不过用户看到 UTC 格式的时间会感到困惑&#xff0c;他们…

Javaweb之SpringBootWeb案例之登录校验功能的详细解析

2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试&#xff0c;在我们登录成功后就可以进入到后台管理系统中进行数据的操作。 但是当我们在浏览器中新的页面上输入地址&#xff1a;http://localhost:9528/#/system/dept&#xff0c;发现没有登录仍然可以进…

FX110网:高盛因监管不力被罚51.2万美元

近日&#xff0c;高盛因其监控流程和系统存在漏洞&#xff0c;被美国金融业监管局(FINRA)处以512500美元的罚款。 FINRA调查发现&#xff0c;2009年2月至2023年4月中旬&#xff0c;高盛未能将认证权证、股权、单位信托和部分场外交易股票证券纳入9份用于检测该公司及其客户是否…

网络安全产品之认识准入控制系统

文章目录 一、什么是准入控制系统二、准入控制系统的主要功能1. 接入设备的身份认证2. 接入设备的安全性检查 三、准入控制系统的工作原理四、准入控制系统的特点五、准入控制系统的部署方式1. 网关模式2. 控制旁路模式 六、准入控制系统的应用场景七、企业如何利用准入控制系统…

Java玩转《啊哈算法》纸牌游戏之小猫钓鱼

缘起性空 文章目录 缘起代码地址纸牌游戏分析代码演示优化 缘起 各位小伙伴们好呀&#xff0c;还有几天就要过年了&#xff0c;祝大家新年快乐&#xff0c;万事胜意&#xff01; 本人最近看了下《啊哈算法》&#xff0c;确实阔以。 但稍显遗憾的是&#xff0c;书籍示例代码是…

文件上传的另类应用

1.Imagemagick CVE-2016-3714 CVE-2022-44268 CVE-2020-29599可在vulhub靶场进行复现1.1.Imagemagick简介 ImageMagic是一款图片处理工具&#xff0c;当传入一个恶意图片时&#xff0c;就有可能存在命令注入漏洞。 ImageMagick默认支持一种图片格式mvg&#xff0c;而mvg与svg…

1572.矩阵对角线元素的和(Java)

题目描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入&#xff1a; mat [[1,2,3], [4,5,6], [7,8,9]] 输出&#xff1a; 25 解释&#xff1a;对角线的和为&…

网络编程..

1.互联网 有了互联网的出现 我们就可以足不出户的实现看电影、购物等等操作 我们认知中可能的互联网模型 较为真实的互联网模型 那么数据是如何从一个设备传递到另外一个设备的呢&#xff1f; 2.网络互联模型 统共有三种&#xff1a; 3.TCP/IP协议 TCP/IP是一群协议 里面…

spring boot打完jar包后使用命令行启动,提示xxx.jar 中没有主清单属性

在对springBoot接口中间件开发完毕后&#xff0c;本地启动没有任何问题&#xff0c;在使用package命令打包也没异常&#xff0c;打完包后使用命令行&#xff1a;java -jar xxx.jar启动发现报异常&#xff1a;xxx.jar 中没有主清单属性&#xff0c;具体解决方法如下&#xff1a;…

基于SpringBoot和PostGIS的震中影响范围可视化实践

目录 前言 一、基础数据 1、地震基础信息 2、全国行政村 二、Java后台服务设计 1、实体类设计 2、Mapper类设计 3、控制器设计 三、前端展示 1、初始化图例 2、震中位置及影响范围标记 3、行政村点查询及标记 总结 前言 地震等自然灾害目前还是依然不能进行准确的预…

关于网络和Linux常见的十道面试题汇总

TCP丢失的消息会一直重传吗&#xff1f;说一下TCP的超时重传策略是啥&#xff1f; 造成消息丢失和超时重传的场景有以下两种&#xff1a; 发送消息时丢失ACK确认消息发送丢失 无论哪种情况&#xff0c;TCP不会一直重传丢失的消息&#xff0c;因为这样如果对方真正的下线&…

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一&#xff0e;设置 vim 首行缩进 二.Makefile 基本语法…

项目02《游戏-10-开发》Unity3D

【完成本集功能后共享1-10集整套代码】 基于 项目02《游戏-09-开发》Unity3D &#xff0c; 任务&#xff1a;传送至其他场景&#xff0c; 首先在场景中加入传送门&#xff0c; 设置人物标签&#xff0c; using UnityEngine; using UnityEngine.SceneManagement; u…