(16)VTK C++开发示例 --- 转换文件格式


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1. 概述

此示例演示如何读取文件,然后将其写入不同类型的文件。

在此示例中,我们读取一个 vtp 文件并写入一个 ply 文件,但只需更改实例化的 reader/writer 类,就可以实现不同的行为。

VTK是一个开源的、跨平台的、用于三维计算机图形学、图像处理和可视化的软件系统。

VTP(VTK PolyData)文件是一种用于存储三维几何数据的文件格式,它通常与VTK(Visualization Toolkit)库一起使用。

VTP文件主要存储多边形数据,包括顶点、面片、颜色、纹理坐标等信息。

PLY(Polygon File Format或Stanford Triangle Format)是一种用于存储三维多边形模型的文件格式。

PLY文件可以包含顶点、面片、颜色、法线、纹理坐标等多种信息。PLY格式最初由斯坦福大学开发,现在已被广泛用于三维图形和计算机视觉领域。

  • VTP文件:主要用于存储与VTK库相关的三维多边形数据,广泛应用于科学计算和工程设计领域。
  • PLY文件:一种通用的三维多边形文件格式,支持多种数据格式,广泛用于三维扫描、三维打印和计算机图形学等领域。

vtkXMLPolyDataReader

功能

  • 数据读取:专门用于读取VTK的XML格式多边形数据文件(.vtp 文件)。
  • 数据转换:将XML文件中存储的vtkPolyData结构(如点、线、多边形、顶点等几何拓扑数据)转换为内存中的VTK数据结构。

关键特性

  • 基于XML:支持VTK的XML数据格式,这种格式具有可读性好、扩展性强、支持并行IO等优点。
  • 高效解析:利用VTK的XML解析器,可处理大规模数据集。
  • 元数据支持:可读取文件中的字段数据(如标量、向量、张量等属性)。

vtkPLYWriter

功能

  • 数据写入:将vtkPolyData对象写入斯坦福PLY格式文件(.ply 文件),常用于3D模型存储。
  • 格式支持:支持ASCII和二进制格式,默认使用二进制以减小文件体积。

关键特性

  • 属性保留:可导出顶点颜色、法线、纹理坐标等附加属性。
  • 兼容性:PLY是通用的3D模型格式,支持MeshLab、Blender等软件直接打开。
  • 配置灵活:通过API控制输出格式(如是否包含法线、颜色等)。

演示使用的vtp文件下载地址

在线加载PLY文件地址:用于在线查看 3D PLY 文件的免费在线工具 - ImageToStl

环境说明
系统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
CommonCore
IOPLY
IOXML
) 
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-14 20:40:25
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkNew.h>
#include <vtkPLYWriter.h> // 读取ply文件的头文件
#include <vtkXMLPolyDataReader.h> // 读取xml文件的头文件
#include <string>
using namespace std;

int main()
{
  string inFile = "E:/Code/C++/vtk1/bin/Bunny.vtp"; // 输入文件路径
  string outFile = "E:/Code/C++/vtk1/bin/Bunny.ply"; // 输出文件路径

  vtkNew<vtkXMLPolyDataReader> reader; // 读取xml文件
  reader->SetFileName(inFile.c_str()); // 设置输入文件路径
  reader->Update(); // 更新读取器

  vtkNew<vtkPLYWriter> writer; // 写入ply文件
  writer->SetFileName(outFile.c_str()); // 设置输出文件路径
  writer->SetInputConnection(reader->GetOutputPort()); // 设置输入连接
  writer->Write(); // 写入文件
  cout << "转换完成" << endl; // 输出提示信息
  return 0;
}

4. 演示效果

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mahuifa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值