(八)vtk常用类的常用函数介绍(附带代码示例)

news2025/4/5 13:04:32

vtk中类的说明以及函数使用

https://vtk.org/doc/nightly/html/annotated.html

一、vtkObject派生类

1.vtkPoints 点

InsertNextPoint(double, double, double):插入点。

2.vtkCellArray 单元数组

InsertNextCell (vtkIdType npts, const vtkIdType *pts):插入单元。

3.vtkPolyData 数据集

SetRadius(double):设置球体半径,默认值为 0.5。
SetCenter(double, double, double):设置球体的中心,默认值为 0,0,0。
SetPhiResolution(int):设置纬度方向上的点数,默认值为 8,当为32为是圆滑的。
SetThetaResolution(int):设置经度方向上的点数,默认值为 8,当为32为是圆滑的。

4.vtkConeSource 锥

SetCenter(double, double, double):设置锥体的中心,默认值为 0,0,0。
SetHeight(double):设置锥体的高度,默认值为 1。
SetResolution(double):设置锥体的面数,默认值为 6,当面数足够大时即为圆锥。
SetAngle(double):设置锥体的角度。
SetRadius(double):设置锥体的半径,默认值为 0.5。
SetCapping(bool):设置锥体的底面是否显示,默认值为 1

5.vtkCylinderSource 柱

SetCenter(double, double, double):设置柱体的中心,默认值为 0,0,0。
SetHeight(double):设置柱体的高度,默认值为 1。
SetResolution(double):设置柱体的面数,默认值为 6,当面数足够大时即为圆柱。
SetAngle(double):设置柱体的角度。
SetRadius(double):设置柱体的半径,默认值为 0.5。
SetCapping(bool):设置柱体的底面是否显示,默认值为 1。

6.vtkCubeSource 立方体

方法1:根据中心点长宽高确定立方体。
SetCenter(double, double, double):设置立方体的中心,默认值为 0,0,0。
SetXLength(double):设置立方体的X轴长度。
SetYLength(double):设置立方体的Y轴宽度。
SetZLength(double):设置立方体的Z轴高度。
方法2:根据xyz边界确定一个立方体。
SetBounds(double xMin, double xMax, double yMin, double yMax, double zMin, double zMax):设置立方体的边界。

7.vtkPlaneSource 面

方法1:使用 SetOrigin() SetPoint1() 和SetPoint2()确定不在一条直线上的三个点,决定一个四边形平面
SetOrigin(double, double, double):设置起点。
SetPoint1(double, double, double):设置第一个点。
SetPoint2(double, double, double):设置第二个点。
方法2:第一,SetNormal(),指定平面的法向量。沿着法向量旋转平面。第二,SetCenter(),平移到指定的中心点。第三种方法,Push(),可以沿着平面法向量平移一定的距离。
SetCenter(double, double, double):设置中心点。
SetNormal(double, double, double):设置法向量。
Push(double):设置平移距离。

8.vtkLineSource 线

SetPoint1(double, double, double):设置线的第一个点。
SetPoint2(double, double, double):设置线的第二个点。
SetPoints(vtkPoints *):设置点集。

9.vtkDiskSource 环

SetCenter(double, double, double):设置环中心点。
SetInnerRadius(double):设置内环半径。
SetOuterRadius(double):设置外环半径。
SetCircumferentialResolution(double):设置圆周方向上的点数。

10.vtkPointSource 散点

在指定中心点周围的指定半径内创建用户指定数量的点。默认情况下,点在球体内的位置是随机的。
SetRadius(double):设置半径。
SetCenter(double, double, double):设置中心。

11.vtkTextSource 文本

SetText(const char *):设置文本。
SetForegroundColor(double, double, double):设置文本颜色。
SetBackgroundColor(double, double, double):设置背景颜色。
SetBacking(bool):设置是否显示背景。

12.vtkArrowSource 箭头(测试着看总长度为1)

SetTipLength(double):设置尖端长度,测试看取值范围为0~1。
SetTipRadius(double):设置尖端半径。
SetTipResolution(double):设置尖端面数。
SetShaftRadius(double):设置轴半径。
SetShaftResolution(double):设置轴面数。
SetInvert(bool):设置反转箭头。

二、vtkDataObject派生类

1.vtkPolyData 数据集

SetPoints(vtkPoints*):设置点集。

SetVerts(vtkCellArray* v):设置定义顶点的单元阵列。

三、vtkPolyDataMapper 映射

SetInputData(vtkPolyData *in):设置数据集。

SetInputConnection(vtkAlgorithmOutput* input):设置给定输入端口索引的连接。

四、vtkActor 演员

SetMapper(vtkMapper *):设置添加映射器。

五、vtkRenderer 渲染器

AddActor(vtkProp *p):添加演员。

六、vtkGenericOpenGLRenderWindow 渲染窗口

AddRenderer(vtkRenderer *):添加渲染器

七、代码示例

具体有关库的引用,main.cpp的修改,以及QVTKOpenGLNativeWidget控件的添加请看前面详细介绍的文章,下面只放了主要代码。

头文件引用

#include "vtkAutoInit.h"   // vtk初始化的方式
VTK_MODULE_INIT(vtkRenderingOpenGL2);   // 渲染
VTK_MODULE_INIT(vtkInteractionStyle);   // 相互做用方式
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);  //
VTK_MODULE_INIT(vtkRenderingFreeType);
#include <vtkSmartPointer.h>
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkCubeSource.h>
#include <vtkSphereSource.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkConeSource.h>
#include <vtkCylinderSource.h>
#include <vtkCubeSource.h>
#include <vtkPlaneSource.h>
#include <vtkLineSource.h>
#include <vtkTextSource.h>
#include <vtkDiskSource.h>
#include <vtkPointSource.h>
#include <vtkArrowSource.h>

主要显示代码

    //显示
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();//在构造函数中进行初始化
    vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
    renwindow->AddRenderer(renderer);
    ui->vtk_widget->SetRenderWindow(renwindow.Get());

    //点
    vtkSmartPointer<vtkPoints> points1 = vtkSmartPointer<vtkPoints>::New();
    vtkSmartPointer<vtkCellArray> vertices1  = vtkSmartPointer<vtkCellArray>::New();
    for (int i = 0; i<20; i++)
    {
        vtkIdType pid[1];
        pid[0] =  points1->InsertNextPoint(i, 0, 0);
        vertices1->InsertNextCell(1, pid);
    }
    vtkSmartPointer<vtkPolyData> polyData = vtkPolyData::New();
    polyData->SetPoints(points1);
    polyData->SetVerts(vertices1);
    vtkSmartPointer<vtkPolyDataMapper> mapper_point = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_point->SetInputData(polyData);
    vtkSmartPointer<vtkActor> actor_point = vtkSmartPointer<vtkActor>::New();
    actor_point->SetMapper(mapper_point);
    actor_point->GetProperty()->SetPointSize(3);
    actor_point->GetProperty()->SetColor(1,0,0);
    renderer->AddActor(actor_point);

    //球
    vtkSmartPointer<vtkSphereSource> Sphere = vtkSmartPointer<vtkSphereSource>::New();
    Sphere->SetCenter(0.5,0,0);
    Sphere->SetRadius(0.5);
    Sphere->SetPhiResolution(32);
    Sphere->SetThetaResolution(32);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Sphere = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Sphere->SetInputConnection(Sphere->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Sphere = vtkSmartPointer<vtkActor>::New();
    actor_Sphere->SetMapper(mapper_Sphere);
    renderer->AddActor(actor_Sphere);

    //柱
    vtkSmartPointer<vtkCylinderSource> Cylinder = vtkSmartPointer<vtkCylinderSource>::New();
    Cylinder->SetCenter(1.5,0,0);
    Cylinder->SetHeight(1);
    Cylinder->SetResolution(8);
    Cylinder->SetRadius(0.5);
    Cylinder->SetCapping(1);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Cylinder = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Cylinder->SetInputConnection(Cylinder->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Cylinder = vtkSmartPointer<vtkActor>::New();
    actor_Cylinder->SetMapper(mapper_Cylinder);
    renderer->AddActor(actor_Cylinder);

    //锥
    vtkSmartPointer<vtkConeSource> Cone = vtkSmartPointer<vtkConeSource>::New();
    Cone->SetCenter(2.5,0,0);
    Cone->SetHeight(1);
    Cone->SetResolution(4);
    Cone->SetAngle(45);
    Cone->SetRadius(1);
    Cone->SetCapping(1);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Cone = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Cone->SetInputConnection(Cone->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Cone = vtkSmartPointer<vtkActor>::New();
    actor_Cone->SetMapper(mapper_Cone);
    renderer->AddActor(actor_Cone);

    //立方体
    vtkSmartPointer<vtkCubeSource> Cube = vtkSmartPointer<vtkCubeSource>::New();
    //Cube->SetCenter(3.5,0,0);
    //Cube->SetXLength(1);
    //Cube->SetYLength(2);
    //Cube->SetZLength(2);
    Cube->SetBounds(3,4,-0.5,0.5,-0.5,0.5);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Cube = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Cube->SetInputConnection(Cube->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Cube = vtkSmartPointer<vtkActor>::New();
    actor_Cube->SetMapper(mapper_Cube);
    renderer->AddActor(actor_Cube);

    //面
    vtkSmartPointer<vtkPlaneSource> Plane = vtkSmartPointer<vtkPlaneSource>::New();
    Plane->SetOrigin(5,0,-0.5);
    Plane->SetPoint1(5,0,0.5);
    Plane->SetPoint2(4,0,-0.5);
//    Plane->SetCenter(1,0,0);
//    Plane->SetNormal(2,0,0);
//    Plane->Push(4);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Plane = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Plane->SetInputConnection(Plane->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Plane = vtkSmartPointer<vtkActor>::New();
    actor_Plane->SetMapper(mapper_Plane);
    renderer->AddActor(actor_Plane);

    //线
    vtkSmartPointer<vtkLineSource> Line = vtkSmartPointer<vtkLineSource>::New();
//    Line->SetPoint1(6,0,0.5);
//    Line->SetPoint2(5,0,-0.5);
    vtkSmartPointer<vtkPoints> points_Line = vtkSmartPointer<vtkPoints>::New();
    for (int i = 0; i<3; i++)
    {
        points_Line->InsertNextPoint(5 + i/2, 0, 0);
    }
    Line->SetPoints(points_Line);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Line = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Line->SetInputConnection(Line->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Line = vtkSmartPointer<vtkActor>::New();
    actor_Line->SetMapper(mapper_Line);
    renderer->AddActor(actor_Line);

    //环
    vtkSmartPointer<vtkDiskSource> Disk = vtkSmartPointer<vtkDiskSource>::New();
    Disk->SetInnerRadius(0.25);
    Disk->SetOuterRadius(0.5);
    Disk->SetCircumferentialResolution(100);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Disk = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Disk->SetInputConnection(Disk->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Disk = vtkSmartPointer<vtkActor>::New();
    actor_Disk->SetPosition(6.5,0,0);
    actor_Disk->SetMapper(mapper_Disk);
    renderer->AddActor(actor_Disk);

    //散点
    vtkSmartPointer<vtkPointSource> Point = vtkSmartPointer<vtkPointSource>::New();
    Point->SetCenter(7.5,0,0);
    Point->SetRadius(0.5);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Point = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Point->SetInputConnection(Point->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Point = vtkSmartPointer<vtkActor>::New();
    actor_Point->SetMapper(mapper_Point);
    renderer->AddActor(actor_Point);

//    //文本
//    vtkSmartPointer<vtkTextSource> Text = vtkSmartPointer<vtkTextSource>::New();
//    Text->SetText("test");
//    Text->SetForegroundColor(0,1,0);
//    Text->SetBackgroundColor(0,0,1);
//    Text->SetBacking(0);
//    vtkSmartPointer<vtkPolyDataMapper> mapper_Text = vtkSmartPointer<vtkPolyDataMapper>::New();
//    mapper_Text->SetInputConnection(Text->GetOutputPort());

//    vtkSmartPointer<vtkActor> actor_Text = vtkSmartPointer<vtkActor>::New();
//    actor_Text->SetMapper(mapper_Text);
//    actor_Text->SetPosition(5.5,0,0);
//    renderer->AddActor(actor_Text);

    //箭头
    vtkSmartPointer<vtkArrowSource> Arrow = vtkSmartPointer<vtkArrowSource>::New();
    Arrow->SetTipLength(0.8);
    Arrow->SetTipRadius(0.15);
    Arrow->SetTipResolution(5);
    Arrow->SetShaftRadius(0.05);
    Arrow->SetShaftResolution(100);
    //Arrow->SetInvert(1);
    vtkSmartPointer<vtkPolyDataMapper> mapper_Arrow = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Arrow->SetInputConnection(Arrow->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Arrow = vtkSmartPointer<vtkActor>::New();
    actor_Arrow->SetPosition(8,0,0);
    actor_Arrow->GetProperty()->SetPointSize(2);
    actor_Arrow->SetMapper(mapper_Arrow);
    renderer->AddActor(actor_Arrow);

效果展示

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

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

相关文章

【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程

【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程 Shuffle是什么Shuffle的流程处理map任务的执行流程reduce任务的执行流程 Shuffle过程分析和优化map任务深入分析细化步骤分析1. 数据分片读取2. 分配计算Reduce服务Partitioner分区…

LINUX | hexdump以16进制查看文件内容

LINUX | hexdump以16进制查看文件内容 时间&#xff1a;2023-10-20 文章目录 LINUX | hexdump以16进制查看文件内容1.参考2.示例1.以ASCII字符显示文件中字符2.以16进制和相应的ASCII字符显示文件里的字符3.只显示文件中前n个字符4.以偏移量开始格式输出 1.参考 1.Linux命令–h…

C语言指针精简版(二)

目录 数组名的理解 使⽤指针访问数组 ⼀维数组传参的本质 冒泡排序 ⼆级指针及其解引用 指针数组 实例&#xff1a;指针数组模拟⼆维数组 数组名的理解 对于数组名表示的意义一共有三种情况&#xff1a; *1、数组名&#xff1a;表示数组⾸元素地址。 *2、sizeof(数组名…

中文编程工具开发语言开发的实际案例:触摸屏点餐软件应用场景实例

中文编程工具开发语言开发的实际案例&#xff1a;触摸屏点餐软件应用场景实例 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。软件在关闭的时候&#xff0c;可以设置会员数据备份到U盘&…

@Controller与@RestController

总结 Controller &#xff1a;定义一个控制器类. RequestMapping &#xff1a;给出外界访问方法的路径&#xff0c;或者说触发路径 &#xff0c;触发条件。 具体解析访问路径到某个方法上. ResponseBody &#xff1a;标记Controller类中的方法。把return的结果变成JSON对象…

束从轩的“网红人设”,正在加重老乡鸡的割裂

文 | 螳螂观察 作者 | 图霖 “老乡鸡20周年&#xff0c;我请大家免费吃饭。” 和以往的每场活动一样&#xff0c;“网红老板”束从轩穿着印有老乡鸡品牌Logo的大红短袖T恤&#xff0c;向广大网友发出热情邀请&#xff0c;真诚得像是自家村口小卖部好客的大叔。 这并不是束从…

虹科 | 测试方案 | 汽车示波器 通讯网络(LIN/CAN/FlexRay)测试方案

通讯网络&#xff08;LIN/CAN/FlexRay&#xff09;测试 虹科CAN总线示波器把你的PC电脑变成一台功能强大的汽车测试工具&#xff0c;用于检测车辆网络各类通讯信号&#xff0c;如CAN Bus、CAN FD、LIN、FlexRay&#xff0c;还可以检测车上所有传感器和执行器的信号 串行译码 …

【动态规划】647. 回文子串、516. 最长回文子序列

提示&#xff1a;努力生活&#xff0c;开心、快乐的一天 文章目录 647. 回文子串&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3af;题目总结 516. 最长回文子序列&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3…

计算机网络学习笔记(四):网络层(待更新)

目录 4.1 IP地址、子网划分、合并超网 4.1.1 IP地址、子网掩码、网关 4.1.2 IP地址的编址方法1&#xff1a;IP地址分类&#xff08;A~E类地址、保留的IP地址&#xff09; 4.1.4 IP地址的编址方法2&#xff1a;子网划分&#xff08;等长、变长&#xff09; 4.1.5 IP地址的编…

uview组件使用笔记

图标样式 修改图标的样式 通过color参数修改图标的颜色通过size参数修改图标的大小&#xff0c;单位为rpx 效果图 <u-icon name"photo" color"#2979ff" size"28"></u-icon>图片图标 1.3.0 这里说的图片图标&#xff0c;指的是小…

RSTP详解:对比STP,到底改进了什么?

一、RSTP概述 IEEE 802.1W中定义的RSTP可以视为STP的改进版本&#xff0c;RSTP在许多方面对STP进行了优化&#xff0c;它的收敛速度更快&#xff0c;而且能够兼容STP。 二、RSTP对STP的改进 改进点1&#xff1a;端口角色 、 改进点2&#xff1a;端口状态 RSTP的状态规范缩…

5秒盾,加速乐

5秒盾 1.先清除网站cooke在刷新&#xff0c;如果出现的稍等就有可能是5秒盾 2.用fd抓搜索参数关键字定位到包 3.抓到包后查找加密参数 4.搜索看那个位置在赋值 5.搜索赋值的参数.去找加密的js 6.删除没用的代码&#xff0c;把检测指纹的赋值过去 7.还原代码在网站的页面…

搞懂TypeScript的类型声明

.d.ts 类型声明/定义文件是 TypeScript 重要的一部分&#xff0c; 希望本文可以带你搞懂下面几个问题&#xff1a; 类型声明是怎么被TypeScirpt识别到的?怎么使用第三方包的类型声明文件&#xff1f;TypeScript代码怎么编译生成类型声明文件&#xff1f;怎么为第三方包编写类…

94. 递归实现排列型枚举

题目&#xff1a; 94. 递归实现排列型枚举 - AcWing题库 思路&#xff1a; 1.全排列问题&#xff08;坑位问题&#xff09;---->递归搜索树---->用dfs深度优先搜索。 2. u表示当前坑位&#xff0c;state[u]表示坑位u存储的数据。因为不同坑位的数据不可以重复&#…

掌握高效创作的艺术:AI助你轻松生成高质量文章

在这个信息爆炸的时代&#xff0c;高效创作已成为一种必需。无论是写作、编辑&#xff0c;还是策划&#xff0c;我们都需要快速、准确地完成工作。然而&#xff0c;我们都有过这样的经历&#xff1a;在创作过程中&#xff0c;我们可能会遇到思路阻塞、词汇匮乏等问题&#xff0…

【IBIS 模型与仿真 - IBISWriter and Write_IBIS】

本文将介绍如何从用户设计中编写自定义IBIS模型。 本文是 SelectIO 解决方案中心&#xff08;Xilinx 答复 50924&#xff09;的设计助手部分&#xff08;Xilinx 答复 50926&#xff09;的一部分。 原文链接&#xff1a;https://support.xilinx.com/s/article/50957?languagee…

大势山维 | 全盘自主可控的实景三维中国建设解决方案

实景三维中国建设是面向新时期测绘地理信息事业服务于社会经济建设和生态文明建设的新定位、新需求。多年来&#xff0c;大势智慧与山维科技深耕数字化建设&#xff0c;以技术研发为立身之本&#xff0c;逐步成长为空间地理信息建设领域的领跑企业。 大势智慧围绕三维重建国产…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(1)

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分&#xff1a;通信协议&#xff08;1&#xff09;前言通信协议REST API vs. GraphQL 对比GraphQL gRPC 运行原理步骤说明 什么是 WebHook &#xff08;网络钩子&#xff09;如何提升 …

[HCTF 2018] Hide and seek(buuctf),Unzip(ctfshow)

考核完对python软连接还是不熟悉&#xff0c;把这两道题在做一下 [HCTF 2018]Hideandseek 登录注册之后发现可以上传文件&#xff0c;随便上传一个 回显说不是zip文件 上传一个zip文件&#xff0c;发现他会自动解析 上传了一个 GIF89a <?php eval($_POST[zxc]); ?> …

mstsc改端口为33389

windows 远程默认端口3389不太安全&#xff0c;改成33389防下小人 把下面的2个文本存在后缀.reg的文件&#xff0c;双击导入注册表&#xff0c;"PortNumber"dword:0000826d 这个就是33389对应的端口号的16进制值&#xff0c;要想自己改成其它的换下值即可 Windows …