(29)VTK C++开发示例 ---绘制两条彩色线
文章目录
- 1. 概述
- 2. CMake链接VTK
- 3. main.cpp文件
- 4. 演示效果
更多精彩内容 |
---|
👉内容导航 👈 |
👉VTK开发 👈 |
1. 概述
使用VTK(Visualization Toolkit)库来创建一个简单的3D图形可视化程序。程序的主要功能是绘制两条线,分别连接原点到点0和原点到点1,并为这两条线设置不同的颜色。
代码结构
├── 头文件引入 │ ├── VTK核心库(vtkActor/vtkRenderer等) │ ├── 线对象专用组件(vtkLine/vtkCellArray) │ └── 颜色处理组件(vtkNamedColors/vtkUnsignedCharArray) │ ├── 数据结构构建 │ ├── 几何点定义(原点、p0、p1三个坐标点) │ ├── 线单元构建(两条从原点出发的线段) │ └── 颜色数据绑定(红/绿双色分别对应两条线) │ ├── 可视化管线 │ ├── 映射器(将几何数据转换为可渲染格式) │ ├── 演员(设置线宽为5像素的可视化实体) │ ├── 渲染器(管理场景和石板灰背景) │ └── 交互系统(窗口渲染和用户交互控制) │ └── 运行效果├── 显示三维坐标系式双色线段└── 支持鼠标旋转/缩放操作
环境 | 说明 |
---|---|
系统 | ubuntu22.04、windows11 |
cmake | 3.22、3.25 |
Qt | 5.14.2 |
编译器 | g++11.4、msvc2017 |
VTK | 9.4.1 |
2. CMake链接VTK
cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS
CommonColor
CommonCore
CommonDataModel
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可执行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 链接VTK库
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模块
3. main.cpp文件
/********************************************************************************
* 文件名: main.cpp
* 创建时间: 2025-03-21 21:17:36
* 开发者: MHF
* 邮箱: 1603291350@qq.com
* 功能:
*********************************************************************************/
#include<iostream>
#include <vtkActor.h>
#include <vtkCellArray.h>
#include <vtkCellData.h>
#include <vtkLine.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkUnsignedCharArray.h>
using namespace std;int main()
{vtkNew<vtkPolyData> polyData; //创建一个多边形数据对象double origin[3] = {0.0, 0.0, 0.0}; //设置原点坐标double p0[3] = {1.0, 0.0, 0.0}; //设置点0坐标double p1[3] = {0.0, 1.0, 0.0}; //设置点1坐标vtkNew<vtkPoints> points; //创建点对象points->InsertNextPoint(origin);points->InsertNextPoint(p0);points->InsertNextPoint(p1);polyData->SetPoints(points); //设置点对象vtkNew<vtkLine> line; //创建线对象line->GetPointIds()->SetId(0, 0); //设置线起点line->GetPointIds()->SetId(1, 1); //设置线终点,这里的点是上面设置的点索引vtkNew<vtkLine> line2; //创建线对象line2->GetPointIds()->SetId(0, 0); //设置线起点line2->GetPointIds()->SetId(1, 2); //设置线终点vtkNew<vtkCellArray> lin; //创建线数组对象lin->InsertNextCell(line); //插入线对象lin->InsertNextCell(line2); //插入线对象polyData->SetLines(lin); //设置线数组对象vtkNew<vtkNamedColors> colors; //创建颜色对象vtkNew<vtkUnsignedCharArray> lineColors; //创建颜色数组对象lineColors->SetNumberOfComponents(3); //设置颜色数组对象的组件数lineColors->InsertNextTypedTuple(colors->GetColor3ub("Red").GetData()); //插入颜色lineColors->InsertNextTypedTuple(colors->GetColor3ub("Green").GetData()); //插入颜色polyData->GetCellData()->SetScalars(lineColors); //设置颜色数组对象/******************开始绘制******************/vtkNew<vtkPolyDataMapper> mapper; //创建多边形数据映射器mapper->SetInputData(polyData); //设置多边形数据对象vtkNew<vtkActor> actor; //创建演员对象actor->SetMapper(mapper); //设置映射器actor->GetProperty()->SetLineWidth(5); //设置线宽vtkNew<vtkRenderer> renderer; //创建渲染器对象renderer->AddActor(actor); //添加演员对象renderer->SetBackground(colors->GetColor3d("SlateGray").GetData()); //设置背景颜色vtkNew<vtkRenderWindow> renderWindow; //创建渲染窗口对象renderWindow->AddRenderer(renderer); //添加渲染器对象vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow); //设置渲染窗口对象renderWindow->Render(); //渲染renderWindowInteractor->Start(); //开始交互return 0;
}