You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将VTK中Marching Cubes生成的网格保存为VTK文件?

保存VTK Marching Cubes生成的网格到VTK文件

没问题!我来帮你搞定这个——VTK里保存Marching Cubes生成的网格其实很简单,只要用对应的PolyData写入类就行,我给你分步骤讲清楚:

首先,确保你已经通过vtkMarchingCubes完成了网格提取,并且已经更新了数据(如果还没更新,记得先调用marchingCubes->Update();,不然输出可能是空的)。

步骤1:获取Marching Cubes的输出网格

首先从你的Marching Cubes对象中提取生成的PolyData:

// 假设你的vtkMarchingCubes实例名为marchingCubes
vtkSmartPointer<vtkPolyData> generatedMesh = marchingCubes->GetOutput();

步骤2:选择并配置文件写入器

VTK提供了两种常用的写入器来保存PolyData,你可以根据需求选择:

选项1:推荐的XML格式(.vtp文件)

这种格式跨平台性更好,文件结构更易读,也支持更多特性:

#include <vtkXMLPolyDataWriter.h>
#include <vtkSmartPointer.h>

// 创建写入器实例
vtkSmartPointer<vtkXMLPolyDataWriter> writer = vtkSmartPointer<vtkXMLPolyDataWriter>::New();
// 关联要保存的网格数据
writer->SetInputData(generatedMesh);
// 设置保存路径和文件名
writer->SetFileName("extracted_mesh.vtp");
// 执行写入操作
writer->Write();

选项2:传统ASCII/二进制格式(.vtk文件)

如果需要兼容旧版本的VTK工具,可以用这个:

#include <vtkPolyDataWriter.h>
#include <vtkSmartPointer.h>

vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
writer->SetInputData(generatedMesh);
writer->SetFileName("extracted_mesh.vtk");

// 可选:设置为二进制格式(文件体积更小,读写更快)
// writer->SetFileTypeToBinary();

writer->Write();

一些关键注意点

  • 编译时要确保链接了对应的VTK模块:XML写入器需要vtkIOXML模块,传统写入器需要vtkIOGeometry模块
  • 文件名路径要正确,如果是相对路径,要注意程序的工作目录
  • 如果你的Marching Cubes处理的是大型体数据,推荐用二进制格式写入,能节省磁盘空间和读写时间

内容的提问来源于stack exchange,提问作者MGM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:07:11