如何将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
相关产品推荐
相关产品推荐

