VTK学习(入门级教程,包括安装和使用)~持续更新中

博主分享VS+QT+VTK的学习内容。给出VTK安装及库导入VS的博客链接,之后进入代码编写。介绍设计界面vtkStudy.ui的操作,还展示vtkStudy.h头文件及完整代码,在vtkStudy.cpp中介绍绘制多种几何体的方法,最后呈现可缩放、旋转、平移的运行结果。

说明:研究QT+VTK有段时间了,准备把学到的东西分享给大家,这篇博客以VS+QT+VTK为主进行展开学习的。

VTK安装和使用教程

详细VTK安装教程我写了一篇博客,博客链接: https://blog.csdn.net/HXX904/article/details/133639010?spm=1001.2014.3001.5502
VTK库导入VS教程,博客链接: https://blog.csdn.net/HXX904/article/details/133650565?spm=1001.2014.3001.5502
这些准备好之后,就可以开始QT+VTK代码编写之旅了。

VTK入门级教程

项目创建以及VTK库导入就不多说了,直接进入正题。

这是我创建的项目,项目名称大家随意起。

Alt

设计界面vtkStudy.ui的操作

创建一个Widge控件,选中Widget控件右击,点击提升为
Alt
在提升的类名称中编辑:QVTKOpenGLNativeWidget。然后点击添加。
Alt
进行勾选,并点击提升。
Alt

vtkStudy.h

头文件说明

//该头文件包含了用于生成球体几何数据的类。
#include <vtkSphereSource.h>

//该头文件包含了用于将vtkPolyData数据映射为可视化对象的类。
#include <vtkPolyDataMapper.h>

//该头文件包含了表示可视化对象的类,可以将vtkPolyDataMapper封装为一个可视化对象。
#include "vtkActor.h"

///该头文件包含了用于设置可视化对象属性(例如颜色、透明度等)的类。
#include <vtkProperty.h>

//该头文件包含了管理和渲染可视化对象的类,可以将多个vtkActor添加到vtkRenderer中进行渲染。
#include "vtkRenderer.h"

//该头文件包含了与特定平台无关的OpenGL渲染窗口类,用于在不同的图形界面(如Qt)中显示渲染结果。
#include <vtkGenericOpenGLRenderWindow.h>

//该头文件包含了用于生成立方体几何数据的类。
#include <vtkCubeSource.h>

//该头文件包含了用于生成线段几何数据的类。
#include <vtkLineSource.h>

//该头文件包含了用于从线段数据生成管道(圆柱体)几何数据的类。
#include <vtkTubeFilter.h>

//该头文件包含了用于生成圆锥几何数据的类。
#include <vtkConeSource.h>

//该头文件包含了用于旋转挤压操作,将2D几何数据沿轴线进行旋转和拉伸生成3D几何数据的类。
#include <vtkRotationalExtrusionFilter.h>

//该头文件包含了用于对vtkPolyData应用变换操作的类。
#include <vtkTransformPolyDataFilter.h>

//该头文件包含了表示几何变换的类,可以用于平移、旋转、缩放等操作。
#include <vtkTransform.h>

//该头文件包含了用于将多个vtkPolyData数据合并为一个vtkPolyData数据的类。
#include <vtkAppendPolyData.h>

//该头文件包含了用于生成参数样条曲线几何数据的类。
#include <vtkParametricSpline.h>

//该头文件包含了用于计算参数化函数的几何数据的类,可以根据给定的参数化函数生成几何数据。
#include <vtkParametricFunctionSource.h>

//该头文件包含了用于将任何vtkDataSet转换为vtkPolyData的类,可以将各种类型的几何数据转换为vtkPolyData进行后续处理和可视化。
#include <vtkGeometryFilter.h>

完整代码

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_vtkStudy.h"

#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include "vtkActor.h"
#include <vtkProperty.h>
#include "vtkRenderer.h"
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkCubeSource.h>
#include <vtkLineSource.h>
#include <vtkTubeFilter.h>
#include <vtkConeSource.h>
#include <vtkRotationalExtrusionFilter.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkTransform.h>
#include <vtkAppendPolyData.h>
#include <vtkParametricSpline.h>
#include <vtkParametricFunctionSource.h>
#include <vtkGeometryFilter.h>

class vtkStudy : public QMainWindow
{
   
   
    Q_OBJECT

    std::vector<vtkSmartPointer<vtkSphereSource>> sphereSources;    //用于保存多个球体源对象
    std::vector<vtkSmartPointer<vtkCubeSource>> cubeSources;        //用于保存多个长方体源对象
    std::vector<vtkSmartPointer<vtkTubeFilter>> tubeSources;        //用于保存多个柱体源对象
    std::vector<vtkSmartPointer<vtkTransformPolyDataFilter>> ctctransformFilter;//用于保存多个圆台源对象
    std::vector<vtkSmartPointer<vtkConeSource>> coneSources;        //用于保存多个圆锥体源对象
    std::vector<vtkSmartPointer<vtkTransformPolyDataFilter>> arctransformFilter;//用于保存多个圆弧台源对象

public:
    vtkStudy(QWidget *parent = nullptr);
    ~vtkStudy();

    //绘制常见的几何体
    void DrawSphere();//绘制球体

    void DrawCube();//绘制长方体

    void DrawCylinder();//绘制圆柱

    void DrawCone();//绘制圆锥

    void DrawCircularFrustum();//绘制圆台

    void DrawCircularArc();//绘制圆弧台

    void MergeGeometry();//合并创建的几何体

private:
    Ui::vtkStudyClass ui;
};

vtkStudy.cpp

绘制球体

    // 创建一个球体源
    vtkSmartPointer<vtkSphereSource> sphereSource =
        vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetCenter(0.0, 0.0, 0.0);  // 设置球体中心坐标
    sphereSource->SetRadius(3);  // 设置球体半径
    sphereSource->SetPhiResolution(100);  // 设置球体的纬线分辨率
    sphereSource->SetThetaResolution(100);  // 设置球体的经线分辨率
    sphereSource->Update();  // 更新球体数据

绘制长方体

	// 创建立方体源对象
	vtkSmartPointer<vtkCubeSource> cubeSource =
		vtkSmartPointer<vtkCubeSource>::New();
		
	// 设置立方体的中心位置和长宽高
	cubeSource->SetCenter(4, 0, 0);  // 设置立方体中心坐标
	cubeSource->SetXLength(1);       // 设置立方体在 X 方向上的长度
	cubeSource->SetYLength(2);       // 设置立方体在 Y 方向上的长度
	cubeSource->SetZLength(3);       // 设置立方体在 Z 方向上的长度
	cubeSource->Update();    // 更新立方体源的信息

绘制圆柱

	// 创建线源对象
	vtkSmartPointer<vtkLineSource> line =
		vtkSmartPointer<vtkLineSource>::New();
		
	// 设置线的起点和终点坐标
	line->SetPoint1(6, 0, 0);
	line->SetPoint2(10, 0, 0);
	
	// 创建管道化处理对象
	vtkSmartPointer<vtkTubeFilter> tube
		= vtkSmartPointer<vtkTubeFilter>::New();
		
	// 将线源的输出连接到管道中
	tube->SetInputConnection(line->GetOutputPort());
	
	// 设置生成圆柱体的半径、边数以及是否封闭处理
	tube->SetRadius(2);           // 设置半径
	tube->SetNumberOfSides(100);  // 设置边数
	tube->SetCapping(1);          // 是否进行封闭处理,1 表示进行封闭处理
	tube->Update();	// 更新管道信息

绘制圆锥

	// 创建锥体源对象
	vtkSmartPointer<vtkConeSource> coneSource =
		vtkSmartPointer<vtkConeSource>::New();

	// 设置锥体的中心位置、底面半径、高度和分辨率
	coneSource->SetCenter(14, 0, 0);  // 设置锥体中心坐标
	coneSource->SetRadius(2);         // 设置底面半径
	coneSource->SetHeight(4);         // 设置高度
	coneSource->SetResolution(100);   // 设置分辨率

	// 更新锥体源的信息
	coneSource->Update();

绘制圆台

	// 创建存储点的对象
	vtkNew<vtkPoints> points;
	points->InsertPoint(0, 0, 0.0, 18);
	points->InsertPoint(1, 2, 0.0, 18);
	points->InsertPoint(2, 4, 0.0, 18 + 4);
	points->InsertPoint(3, 0.0, 0.0, 18 + 4);

	// 创建存储线段的对象
	vtkNew<vtkCellArray> lines;
	lines->InsertNextCell(4);  // 线段的点数
	lines->InsertCellPoint(0);
	lines->InsertCellPoint(1);
	lines->InsertCellPoint(2);
	lines-
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值