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

这篇具有很好参考价值的文章主要介绍了(八)vtk常用类的常用函数介绍(附带代码示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 *):设置添加映射器。

GetProperty():获取属性。

SetPosition(double, double, double):设置位置。

VisibilityOff():设置不可见。

VisibilityOn():设置可见。

RotateX(double):沿x轴旋转角度。

RotateY(double):沿y轴旋转角度。

RotateZ(double):沿z轴旋转角度。

五、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 = vtkSmartPointer<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);

效果展示

(八)vtk常用类的常用函数介绍(附带代码示例),QT,pcl+vtk,vtk,开发语言,qt

(八)vtk常用类的常用函数介绍(附带代码示例),QT,pcl+vtk,vtk,开发语言,qt文章来源地址https://www.toymoban.com/news/detail-722687.html

到了这里,关于(八)vtk常用类的常用函数介绍(附带代码示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PCL】ubuntu20.04安装 VTK7.1与PCL1.8(PCL依赖VTK,要先装且最好源码安装)

    Ref: 源码安装 (apt安装的方式会出现.so文件缺失的情况!!!)) ubuntu16.04 安装Qt5 + VTK7.1.1 + PCL1.8.0 第二部分 Ubuntu20.04安装VTK 下载 下载地址 依赖安装 VTK安装 方法一出现的错误: make过程中出现的 错误: Could not find  a package configuration file provided by \\\"Qt5X11Extras\\\" with any of the followi

    2024年02月03日
    浏览(46)
  • python实战应用讲解-【numpy数组篇】常用函数(八)(附python示例代码)

    目录 Python Numpy MaskedArray.cumprod()函数 Python Numpy MaskedArray.cumsum()函数 Python Numpy MaskedArray.default_fill_value()函数 Python Numpy MaskedArray.flatten()函数 Python Numpy MaskedArray.masked_equal()函数 numpy.MaskedArray.cumprod() 返回在给定轴上被屏蔽的数组元素的累积乘积。在计算过程中,被屏蔽的值在内部

    2024年02月02日
    浏览(57)
  • 【小程序开发必备】微信小程序常用API全介绍,附示例代码和使用场景

    ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入:全栈弄潮儿的个人社区 📙 专栏地址:小程序从入门到精通 【分享几个国内免费可用的ChatGPT镜像】 【10几个类ChatGPT国内AI大模型】 【用《文心一言》1分钟写一篇博客简直yyds】

    2023年04月09日
    浏览(50)
  • Spring Boot 项目优雅关闭(两种完善解决方案附带示例代码)

    Spring Boot 项目优雅关闭常用两种方案,一种是使用 kill -2 和 -15 发送程序终止信号,另一种是使用 spring-boot-actuator 包提供一个优雅下线接口,这两种方案根据自己喜好来,万不得已别用 kill -9 就行,个人推荐第一种,对于Spring Boot 项目来说两种方法只是入口不同,最终关闭逻

    2024年02月03日
    浏览(41)
  • stm32红绿灯源代码示例(附带Proteus电路图)

    本代码不能直接用于红路灯,只是提供一个思路 可以看到如果只是输入输出,已经跟51单片机差不多了,就是操作寄存器。而且提供了一个很方便的东西就是GPIO_PIN_X这样的宏,已经不用我自己来写了。不过我写的时候并不知道这个东西

    2024年02月12日
    浏览(44)
  • java 逐行读取文件(读取文件每一行、按行读取文件)附带示例代码

    最快的读取每一行 相比较Scanner慢一点 行数达到一定规模,使用此方法读取会非常慢 一次把所有数据都读到内存中,当文件非常大时,会消耗掉内存资源导致程序崩掉,文件规模小推荐使用 统计每一行日志ip出现的次数

    2024年02月11日
    浏览(47)
  • C++中string类的常用函数

    引言:在C语言中对于字符串的一些操作,例如在字符串末尾增加字符,对字符串拷贝等,我们可以通过调用库中函数来完成这些操作,在C++中,我们把这些常规操作封装成了string类,可以通过类对象直接调用这些函数,使得更加符合了面向对象的思想。 作用:返回字符串的有效字符长度

    2024年02月08日
    浏览(40)
  • C++中size_t类型详解:探究其特性与用途,附带源代码示例

    C++中size_t类型详解:探究其特性与用途,附带源代码示例 在C++编程语言中,\\\"size_t\\\"是一个常见的数据类型,用于表示内存大小或对象大小。在本文中,我们将深入了解size_t类型的特性和用途,并提供相应的源代码示例。 一、size_t类型概述 size_t是C/C++中定义的一个无符号整数类

    2024年02月06日
    浏览(39)
  • c++系列之string类的常用接口函数

    💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 string时表示字符串的字符类 //使用 string类包含#include 头文件 以及 using namespace std string容量相关接口 (size(),capacity(),clear(),empty) 1.size()是元素个数 //. size()与length()方

    2024年02月10日
    浏览(35)
  • c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)

      后面这个是接收端代码  另外发现一个奇怪的现象:如果把T1口改为T0口没有办法正常模拟

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包