VTK的学习方法-第一类型应用

相信很多做研究的人都在使用VTK,其实VTK的学习分成两类。一类就是使用VTK中现有的算法来完成自己的工作,比如数据的显示和渲染。另外一类是需要继承里面的算法类,自己根据自己的需求来重新写一个算法。

对于第一种类型的应用,不要觉得使用C++来写代码会很复杂,其实不复杂。此种应用一般都是从数据源出发,然后顺着数据流管线一路往下走,最后显示。是面向过程的。

图1 简单的VTK管线流

下面的一个例子,就是这样的一个简单的应用,使用了AppendFilter算法。

#include <vtkActor.h>
#include <vtkAppendFilter.h>
#include <vtkDataSetMapper.h>
#include <vtkGlyph3DMapper.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPointSource.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkUnstructuredGrid.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <iostream>

vtkSmartPointer<vtkActor> Point2Glyph(vtkPoints* points,double const& scale);

int main(int,char**)
{
    // Create 9 points
    vtkNew<vtkPointSource> pointSource;
    pointSource->SetNumberOfPoints(9);
    pointSource->Update();

    vtkSmartPointer<vtkPolyData> polydata=pointSource->GetOutput();
    std::cout<<"There are "<<polydata->GetNumberOfPoints()
            <<" points in the polydata set."<<std::endl;

    // Create 2 points in a vtkUnstructuredGrid
    vtkNew<vtkPoints> points;
    points->InsertNextPoint(0,0,0);
    points->InsertNextPoint(0,0,1);

    vtkNew<vtkUnstructuredGrid> ug;
    ug->SetPoints(points);
    std::cout<<"There are "<<ug->GetNumberOfPoints()
            <<" points in the unstructured grid."<<std::endl;

    // Combine the two data sets
    vtkNew<vtkAppendFilter> appendFilter;
    appendFilter->AddInputData(polydata);
    appendFilter->AddInputData(ug);
    appendFilter->Update();

    vtkSmartPointer<vtkUnstructuredGrid> combined=appendFilter->GetOutput();
    std::cout<<"There are "<<combined->GetNumberOfPoints()
            <<" points combined."<<std::endl;

    // Create a mapper and actor
    vtkNew<vtkNamedColors> colors;
    vtkNew<vtkDataSetMapper> mapper;
    mapper->SetInputConnection(appendFilter->GetOutputPort());

    vtkNew<vtkActor> actor;
    actor->SetMapper(mapper);

    vtkSmartPointer<vtkActor> sphereActor=Point2Glyph(appendFilter->GetOutput()->GetPoints(),0.25);
    sphereActor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData());

    // Create renderer window and interactor
    vtkNew<vtkRenderer> ren;
    vtkNew<vtkRenderWindow> renWin;
    renWin->SetSize(1024,1024);
    renWin->AddRenderer(ren);
    vtkNew<vtkRenderWindowInteractor> iren;
    iren->SetRenderWindow(renWin);
    vtkNew<vtkInteractorStyleTrackballCamera> style;
    iren->SetInteractorStyle(style);

    ren->AddActor(actor);
    ren->AddActor(sphereActor);
    ren->SetBackground(colors->GetColor3d("RoyalBlue").GetData());
    iren->Initialize();
    iren->Start();

    return 0;
}

vtkSmartPointer<vtkActor> Point2Glyph(vtkPoints* points,double const& scale){
    double* bounds=points->GetBounds();
    double maxLen=0;
    for(int i=1;i<3;++i){
        maxLen=std::max(bounds[i+1]-bounds[i],maxLen);
    }
    vtkNew<vtkSphereSource> sphereSource;
    sphereSource->SetRadius(scale*maxLen);
    sphereSource->SetThetaResolution(30);
    sphereSource->SetPhiResolution(30);

    vtkNew<vtkPolyData> pd;
    pd->SetPoints(points);

    vtkNew<vtkGlyph3DMapper> mapper;
    mapper->SetInputData(pd);
    mapper->SetSourceConnection(sphereSource->GetOutputPort());
    mapper->ScalarVisibilityOff();
    mapper->ScalingOff();

    vtkNew<vtkActor> actor;
    actor->SetMapper(mapper);
    return actor;
}

输出的结果如下:

图2 输出结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

E43.【C语言】练习:传值调用和传址调用混淆点解释

1.问题 阅读下列代码,在Function函数返回前,px的值会因malloc的返回值而发生改变吗? #include <stdlib.h> void Function(int* ptr) {ptr (int*)malloc(sizeof(int)); }int main() {int* px NULL;Function(px);return 0; }2.分析 VS2022进入调试模式,下断点在retur…

利用客户端导入有关联的业务数据(DBeaver+sql)

前言 最近有点坑&#xff0c;麻辣烫的活落手上了&#xff0c;上个迭代除了自己的开发任务&#xff0c;还有处理接手的工作。然后节后问题又多&#xff0c;还有前1个迭代没有测试的模块本迭代测试&#xff0c;烦死了。 这次这个数据处理的活&#xff0c;以后希望可以交出…

Android 判断手机放置的方向

#1024程序员节&#xff5c;征文# 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 需求 老板&#xff1a;我有个手持终端&#xff0c;不能让他倒了&#xff0c;当他倒或者倾斜的时候要发出报警&#xff1b; 程序猿&#xff1a;我这..... 老板…

uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用

uniapp 常用的地区行业各种多选多选&#xff0c;支持回显 必须导入uni-popup 弹出层 该组件 1.目前项目开发中使用到这类似挺多的&#xff0c;记录一下&#xff0c;方便以后是使用 2.使用前提&#xff0c;目前不做无限级&#xff0c;只支持二维数组&#xff0c;模板里只循环了两…

GitLab+Jenkins 实现 Webhook 自动化触发构建

在持续集成和持续部署&#xff08;CI/CD&#xff09;过程中&#xff0c;如何实现代码提交后自动触发构建&#xff1f;今天&#xff0c;我们将通过GitLab与Jenkins的集成&#xff0c;利用Webhook实现自动化触发构建&#xff0c;为你的开发流程注入高效能量&#xff01; 在每次代…

从零开始:AI制作PPT工具大比拼

现在真的万物皆可AI了&#xff0c;甚至是令人头疼的PPT&#xff0c;也可以直接用AI来搞定了。作为一个PPT新手&#xff0c;我最近对AI制作PPT这个话题产生了浓厚的兴趣。我决定亲自试一试市面上几款热门的AI制作PPT工具&#xff1a;笔灵AIPPT、轻竹PPT、博思白板AIPPT和KimiAI。…

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI &#xff0c;不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本&#xff0c;能够提供比 GPT-4 Turbo 更多的内容和信息&#xff0c;但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…

kaggle在线训练深度学习模型

kaggle https://www.kaggle.com/ code 通过jupyter notebook上传代码&#xff0c;执行训练 dataset 支持手动上传本地资源文件到input /kaggle/input&#xff0c;dataset通过input访问&#xff0c;input目录是只读的 /kaggle/working&#xff0c;保存文件到working&#…

多厂商的实现不同vlan间通信

Cisco单臂路由 Cisco路由器配置 -交换机配置 -pc配置 华三的单臂路由 -路由器配置 -华三的接口默认是打开的 -pc配置及ping的结果 -注意不要忘记配置默认网关 Cisco-SVI -交换机的配置 -创建vlan -> 设置物理接口对应的Acess或Trunk -> 进入vlan接口&#xff0c;打开接…

ctfshow-web入门-web172

//拼接sql语句查找指定ID用户 $sql "select username,password from ctfshow_user2 where username !flag and id ".$_GET[id]." limit 1;"; 联合查询 该题目与上一个题目不是同一个类型&#xff0c;该题目需要进行sql联合查询。 第一步&#xff1a;确…

微信小程序中关闭默认的 `navigationBar`,并使用自定义的 `nav-bar` 组件

要在微信小程序中关闭默认的 navigationBar&#xff0c;并使用自定义的 nav-bar 组件&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 关闭默认的 navigationBar 在你的页面的配置文件 *.json 中设置 navigationBar 为 false。你需要在页面的 JSON 配置文件中添加以下代码…

Echarts_柱状图属性汇总

目录 1、基础 柱状图属性 2、常用 柱状图属性 3、双Y轴双柱 柱状图属性 4、渐变圆角 柱状图属性 5、横向渐变圆角 柱状图属性 6、嵌套圆角 柱状图属性 7、堆叠 柱状图属性 1、基础 柱状图属性 var myChart echarts.init(document.getElementById(charts)); var option …

二叉树的基本概念及运用

二叉树的概念&#xff1a;一棵二叉树是结点的一个有限集合&#xff0c;该集合&#xff1a; 1.或者为空 2.或者是由一个根节点加上两棵别称为为左子树和右子树的二叉树组成。 2.2&#xff1a; 两种特殊的二叉树&#xff1a; 1.满二叉树&#xff1a;一课二叉树&#xff0c;如…

Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法

今天打开博客的时候&#xff0c;意外发现页面&#xff0c;打开均显示错误&#xff1a;Undefined array key 0 (set_error_handler)。 博客程序采用的是Z-BlogPHP。百度了一圈没有找到解决办法&#xff0c;在官方论坛里也没找到解决办法。 于是开始自己排查原因。我服务器采用…

问:MySQL表过大,你有哪些优化实践?

当MySQL单表记录数过大时&#xff0c;数据库的CRUD&#xff08;创建、读取、更新、删除&#xff09;性能会明显下降。为了提升性能&#xff0c;我们需要采取一些优化措施。本文将详细介绍几种常见的优化方案。 1. 限定数据的范围 描述 务必禁止不带任何限制数据范围条件的查…

新品发布:Manus Metagloves Pro虚拟现实手套

Manus 全新发布的 Metagloves Pro量子追踪手套能够支持您捕捉手部的每一个细节动作&#xff0c;您的手指捕捉将不再有任何限制。Manus Metagloves Pro可帮助您节省在制作动画时的宝贵时间&#xff0c;提供更加真实的手部动作表现。 Manus Metagloves Pro支持快速设置&#xff0…

C++从入门到起飞之——红黑树 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 红⿊树的概念 2. 红⿊树的实现 2.1 构建整体框架 2.2 红黑树的插入 2.3 红黑树的验证 2.4 红黑树…

解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)

文章目录 引言I 解决方案方案1:使用JsonAutoDetect注解方案2:手动编写get方法,JsonProperty注解加到方法上。方案3:首字母改成小写的II 知识扩展:对象默认是怎样被序列化?引言 需求: JSON序列化时,使用@JsonProperty注解,将字段名序列化为首字母大写,兼容前端和第三方…

万字图文实战:从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f…

使用 NumPy 和 Matplotlib 实现交互式数据可视化

使用 NumPy 和 Matplotlib 实现交互式数据可视化 在数据分析中&#xff0c;交互式可视化可以更好地帮助我们探索和理解数据。虽然 Matplotlib 是静态绘图库&#xff0c;但结合一些技巧和 Matplotlib 的交互功能&#xff08;widgets、event handlers&#xff09;&#xff0c;我…