说明:研究QT+VTK有段时间了,准备把学到的东西分享给大家,这篇博客以VS+QT+VTK为主进行展开学习的。
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库导入就不多说了,直接进入正题。
这是我创建的项目,项目名称大家随意起。

设计界面vtkStudy.ui的操作
创建一个Widge控件,选中Widget控件右击,点击提升为。

在提升的类名称中编辑:QVTKOpenGLNativeWidget。然后点击添加。

进行勾选,并点击提升。

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-

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

被折叠的 条评论
为什么被折叠?



