当前位置: 首页 > news >正文

(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
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.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;
}

4. 演示效果

在这里插入图片描述



http://www.xdnf.cn/news/217243.html

相关文章:

  • 想做博闻强记的自己
  • IoTDB数据库建模与资源优化指南
  • Python中的defaultdict方法
  • 驱动开发硬核特训 · Day 24(下篇):深入理解 Linux 内核时钟子系统结构
  • 【深度学习的灵魂】图片布局生成模型LayoutPrompt(1)
  • MATLAB函数调用全解析:从入门到精通
  • 【Linux】g++安装教程
  • Linux 命名管道+日志
  • 婴幼儿托育实训室生活照料流程标准化设计
  • Flowable7.x学习笔记(十五)动态指定用户分配参数启动工作流程
  • AutogenStudio使用
  • 快速掌握向量数据库-Milvus探索2_集成Embedding模型
  • AI技术前沿:Function Calling、RAG与MCP的深度解析与应用实践
  • 基于PyTorch的图像分类特征提取与模型训练文档
  • 集群系统的五大核心挑战与困境解析
  • EtherCAT转CANopen方案落地:推动运动控制器与传感器通讯的工程化实践
  • CKESC Breeze 6S 40A_4S 50A FOC BEC电调测评:全新vfast 技术赋能高效精准控制
  • 低代码平台部署方案解析:百特搭四大部署方式
  • 大模型推理:Qwen3 32B vLLM Docker本地部署
  • 强化学习贝尔曼方程推导
  • 流量守门员:接口限流艺术
  • Manus AI多语言手写识别技术全解析:从模型架构到实战部署
  • JavaScript 中深拷贝浅拷贝的区别?如何实现一个深拷贝?
  • 信雅达 AI + 悦数 Graph RAG | 大模型知识管理平台在金融行业的实践
  • C# 类的基本概念(实例成员)
  • 【2024-NIPS-版权】Evaluating Copyright Takedown Methods for Language Models
  • 《云原生》核心内容梳理和分阶段学习计划
  • Alibaba第四版JDK源码学习笔记2025首次开源
  • HCIP【VLAN技术(详解)】
  • Java高频面试之并发编程-11