【VTKExamples::Visualization】第一期 Arbitrary3DCursor

很高兴在雪易的CSDN遇见你 

VTK技术爱好者 QQ:870202403


前言

本文分享Example中Visualization模块中的Arbitrary3DCursor样例,主要解析vtkProbefileter,希望对各位小伙伴有所帮助!

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO


1. vtkProbeFilter

         在指定的点位置采样数据值。

        vtkProbeFilter是一个过滤器,在指定的点位置计算点属性(例如,标量,向量等)。过滤器有两个输入: Input和Source。输入的几何结构通过过滤器。输入点位置的Point属性通过插值到Source数据。例如:我们可以通过Volume(Source数据)计算平面上的数据值(平面指定为输入)。Source数据中的Cell数据根据每个输入点所在的源单元格复制到输出。如果在源的点数据和单元数据中都存在同名的数组,则只探测来自点数据的数组。

        此过滤器可用于重新采样数据,或将一个数据集表单转换为另一个数据集表单。例如,一个非结构化网格(vtkUnstructuredGrid)可以用一个体(三维vtkImageData)来探测,然后体渲染技术可以用来可视化结果。另一个例子:一条线或曲线可以用来探测数据,从而沿着这条线或曲线生成x-y图。

2. 应用示例

  

 

// This does the actual work: updates the probe.
// Callback for the interaction
class vtkmyPWCallback : public vtkCommand
{
public:vtkmyPWCallback() = default;static vtkmyPWCallback* New(){return new vtkmyPWCallback;}virtual void Execute(vtkObject* caller, unsigned long, void*){vtkPointWidget* pointWidget = reinterpret_cast<vtkPointWidget*>(caller);pointWidget->GetPolyData(this->PolyData);double position[3];pointWidget->GetPosition(position);std::ostringstream text;text << "cursor: " << std::fixed << std::setprecision(4) << position[0]<< ", " << position[1] << ", " << position[2];this->PositionActor->SetInput(text.str().c_str());this->CursorActor->VisibilityOn();}vtkPolyData* PolyData = nullptr;vtkActor* CursorActor = nullptr;vtkTextActor* PositionActor = nullptr;
};void QtWidgetsApplication1::on_arbitrary3DCursorAct_triggered()
{vtkSmartPointer<vtkPolyData> inputPolyData;auto line = vtkSmartPointer<vtkLineSource>::New();line->SetResolution(2);line->SetPoint1(0., 0., 0.);line->SetPoint2(10, 0, 0);line->Update();inputPolyData = line->GetOutput();/*auto plane = vtkSmartPointer<vtkPlaneSource>::New();plane->Update();inputPolyData = plane->GetOutput();*//*auto sphereSource =vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetPhiResolution(15);sphereSource->SetThetaResolution(15);sphereSource->Update();inputPolyData = sphereSource->GetOutput();*/auto colors =vtkSmartPointer<vtkNamedColors>::New();auto point =vtkSmartPointer<vtkPolyData>::New();auto probe =vtkSmartPointer<vtkProbeFilter>::New();probe->SetInputData(point);probe->SetSourceData(inputPolyData);// create glyphauto cone =vtkSmartPointer<vtkConeSource>::New();cone->SetResolution(16);auto glyph =vtkSmartPointer<vtkGlyph3D>::New();glyph->SetInputConnection(probe->GetOutputPort());glyph->SetSourceConnection(cone->GetOutputPort());glyph->SetVectorModeToUseVector();glyph->SetScaleModeToDataScalingOff();glyph->SetScaleFactor(inputPolyData->GetLength() * 0.1);auto glyphMapper =vtkSmartPointer<vtkPolyDataMapper>::New();glyphMapper->SetInputConnection(glyph->GetOutputPort());auto glyphActor =vtkSmartPointer<vtkActor>::New();glyphActor->SetMapper(glyphMapper);glyphActor->GetProperty()->SetColor(1.,0.,0.);glyphActor->VisibilityOn();auto mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(inputPolyData);auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetRepresentationToWireframe();actor->GetProperty()->SetColor(colors->GetColor3d("gold").GetData());auto textActor =vtkSmartPointer<vtkTextActor>::New();textActor->GetTextProperty()->SetFontSize(12);textActor->SetPosition(10, 20);textActor->SetInput("cursor:");textActor->GetTextProperty()->SetColor(0.,1.,0.);// Create the RenderWindow, Render1er and both Actors//auto ren1 =vtkSmartPointer<vtkRenderer>::New();auto renWin =vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(ren1);auto iren =vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);// The SetInteractor method is how 3D widgets are associated with the render// window interactor. Internally, SetInteractor sets up a bunch of callbacks// using the Command/Observer mechanism (AddObserver()).auto myCallback =vtkSmartPointer<vtkmyPWCallback>::New();myCallback->PolyData = point;myCallback->CursorActor = glyphActor;myCallback->PositionActor = textActor;// The point widget is used probe the dataset.//auto pointWidget =vtkSmartPointer<vtkPointWidget>::New();pointWidget->SetInteractor(iren);pointWidget->SetInputData(inputPolyData);pointWidget->AllOff();pointWidget->PlaceWidget();pointWidget->AddObserver(vtkCommand::InteractionEvent, myCallback);ren1->AddActor(glyphActor);ren1->AddActor(actor);ren1->AddActor2D(textActor);// Add the actors to the renderer, set the background and size//ren1->GradientBackgroundOn();ren1->SetBackground(colors->GetColor3d("SlateGray").GetData());ren1->SetBackground2(colors->GetColor3d("Wheat").GetData());renWin->SetSize(300, 300);renWin->Render();pointWidget->On();// render the image//iren->Initialize();renWin->Render();iren->Start();
}

结论:

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的赞赏是我的最最最最大的动力(^U^)ノ~YO

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

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

相关文章

【Docker基础二】Docker安装Mysql8

下载镜像 安装mysql&#xff08;版本&#xff1a;8.0.35&#xff09; # 拉取镜像 docker pull mysql:8.0.35 # 查看镜像是否已经下载 docker images 创建挂载目录 # 宿主机上创建挂载目录 (可以不创建&#xff0c;docker run -v配置了挂载目录&#xff0c;docker会自动…

Priors in Deep Image Restoration and Enhancement: A Survey

深度图像恢复和增强中的先验&#xff1a;综述 论文链接&#xff1a;https://arxiv.org/abs/2206.02070 项目链接&#xff1a;https://github.com/VLIS2022/Awesome-Image-Prior (Preprint. Under review) Abstract 图像恢复和增强是通过消除诸如噪声、模糊和分辨率退化等退化…

【python入门】day21:向文件输出“奋斗成就更好的你”、输出北京的天气预报

向文件输出“奋斗成就更好的你” #向文件输出‘奋斗成就更好的你’ 第一种方式&#xff1a;使用print方式进行输出&#xff08;输出目的地是文件&#xff09; fpopen(e:/text.txt,w)#w只写模式&#xff0c;也可以用a读写模式 print(奋斗成就更好的你,filefp) fp.close() 第二种…

python统计分析——箱线图(plt.boxplot)

参考资料&#xff1a;用python动手学统计学 使用matplotlib.pyplot.boxplot()函数绘制箱线图 import numpy as np import pandas as pd from matplotlib import pyplot as pltdata_set1np.array([2,3,3,4,4,4,4,5,5,6]) data_set2np.array([[2,3,3,4,4,4,4,5,5,6],[5,6,6,7,7…

Linux程序、进程和计划任务

目录 一.程序和进程 1.程序的概念 2.进程的概念 3.线程的概念 4.单线程与多线程 5.进程的状态 二.查看进程信息相关命令&#xff1a; 1.ps&#xff1a;查看静态进程信息状态 2.top&#xff1a;查看动态进程排名信息 3.pgrep&#xff1a;查看指定进程 4.pstree&#…

使用 pdfh5 实现 pdf 预览功能

1. 安装 npm install pdfh5 2. 使用 html部分&#xff1a; <div id"showPdf" style"width: 100%;"></div> js部分&#xff1a; <script> //合同展示组件 import Pdfh5 from pdfh5 //合同组件样式 import pdfh5/css/pdfh5.css expo…

Educational Codeforces Round 160 (Rated for Div. 2) D. Array Collapse(单调栈+dp)

题目 给定一个长为n(n<2e5)的排列&#xff0c;你可以执行以下操作若干次&#xff0c; 每次你可以选择一个区间[l,r]&#xff0c;只保留这个区间内的最小值&#xff0c;将其他值都删除 删完之后前后位置会自动接上&#xff0c;形成一个新的数组 求这样操作若干次后&#…

docker 安装elasticsearch、kibana、cerebro、logstash

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…

Ps:混合颜色带 - 应用篇

混合颜色带 Blend If是基于亮度&#xff08;灰色&#xff09;或颜色通道的特定范围来显示或隐藏图层的特定区域。 当前图层 Current Layer&#xff0c;可根据当前图层的亮度值来隐藏该图层中的像素。 下一图层 Underlying Layer&#xff0c;可根据下方所有图层的复合图像的亮度…

地理空间分析5——空间关联分析与Python

目录 写在开头1.空间自相关2.空间回归分析2.1 构建地理权重矩阵2.2 执行空间回归分析2.3 解释结果3 地理加权回归3.1 构建地理权重矩阵3.2 执行地理加权回归分析3.3 解释地理加权回归结果写在最后写在开头 空间关联分析是数据科学领域中一个重要的技术,尤其在地理信息系统(G…

数据密集型应用系统设计--3.1 数据库核心:数据结构

3.1 数据库核心&#xff1a;数据结构 数据库只需做两件事情&#xff1a;向它插入数据肘&#xff0c;它就保存数据&#xff1a;之后查询时&#xff0c;它应该返回那些数据。 本章我们主要从数据库的角度再来探讨同样的问题&#xff0c;即如何存储输入的数据&#xff0c;井在收到…

单向可控硅充电电路图

单向可控硅工作原理 单向可控硅有阳极A、阴极K、控制极G三个电极&#xff0c;由四层半导体PNPN构成。单向可控硅有三个PN结&#xff0c;其内部结构与等效电路符号如图4-10所示。单相可控硅可等效看成一个PNP型三极管Vl和一个NPN型三极管V2组合而成&#xff0c;Vl基极和V2集电极…

电子学会C/C++编程等级考试2023年12月(三级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:因子问题 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 时间限制:10000 内存限制:65536 输入 包括两个整数N、M。N不超过1,000,000。 输出 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存…

MSCKF+OpenVins梳理

reference&#xff1a; openvins学习中的问题https://zhuanlan.zhihu.com/p/355319559 OpenVins代码梳理https://www.zhihu.com/people/anson2004110/posts OpenVINS能观一致性分析和FEJhttps://zhuanlan.zhihu.com/p/101478814 MSCKF那些事https://zhuanlan.zhihu.com/p/76894…

React16源码: React中FiberRoot的源码实现

关于 FiberRoot 1 &#xff09;概述 在 ReactDOM.render 过程当中&#xff0c;创建了一个 ReactRoot的对象这个 ReactRoot 对象最主要承担了创建 FiberRoot 对象这个对象它非常重要&#xff0c;在后期整个应用调度过程当中都会跟它有关关于 FiberRoot 对象 A. 它是整个应用的起…

es6中箭头函数 原型

箭头函数 特性 箭头函数的特性 不绑定arguments&#xff0c;用rest参数…解决本身没有this的概念&#xff0c;捕获其所在上下文的 this 值作为自己的 this 值&#xff0c;this指向全局箭头函数不能使用new&#xff08;会报错&#xff09;箭头函数没有原型属性(prototype)箭头函…

力扣labuladong一刷day54天前缀树

力扣labuladong一刷day54天前缀树 文章目录 力扣labuladong一刷day54天前缀树一、208. 实现 Trie (前缀树)二、648. 单词替换三、211. 添加与搜索单词 - 数据结构设计四、1804. 实现 Trie &#xff08;前缀树&#xff09; II五、677. 键值映射 一、208. 实现 Trie (前缀树) 题…

linux源码解读系列

Linux 源码解读是一个深入且复杂的领域&#xff0c;涵盖了操作系统的核心部分&#xff0c;包括内核架构、进程管理、内存管理、文件系统、网络通信等。由于 Linux 内核源码庞大且复杂&#xff0c;通常需要具备扎实的操作系统理论知识和C语言编程能力。下面是一些推荐的资源和方…

一键了解获取网页requests方式

目录 一、爬虫原理&#xff1a; 二、安装&#xff1a; 测试&#xff1a; 三、文件的操作 方式一 方式二: 方式三 四、认识User-Agent 4.1、为什么用User-Agent&#xff1a; 步骤&#xff1a; 五、请求方式 5.1、get 5.2、post 六、爬出有中国关键字页面案例 一、爬…

C++用宏实现类成员反射

序 本文我们看下用宏来实现反射&#xff0c;在一些伙伴使用c版本还不是那么高的情况下但又需要反射的一些技巧&#xff0c;这里使用的代码是iguana里的实现&#xff0c;我对它关于反射的地方提炼一下&#xff0c;稍微改动了下。iguana是比较优秀的序列化库&#xff0c;其中使用…