OpenCASCADE 7.7.0 完全教程(四):数据交换与格式转换
# OpenCASCADE 7.7.0 完全教程(四):数据交换与格式转换
STEP 格式
STEP 是 CAD 数据交换的标准格式,支持 AP203/AP214/AP242 协议。
读取 STEP 文件
#include <STEPControl_Reader.hxx>
#include <IFSelect_ReturnStatus.hxx>
STEPControl_Reader reader;
IFSelect_ReturnStatus status = reader.ReadFile("part.step");
if (status == IFSelect_RetDone) {
reader.TransferRoots();
TopoDS_Shape shape = reader.OneShape();
std::cout << "STEP 导入成功" << std::endl;
}
写入 STEP 文件
#include <STEPControl_Writer.hxx>
STEPControl_Writer writer;
writer.Transfer(shape, STEPControl_AsIs);
writer.Write("output.step");
IGES 格式
读取 IGES 文件
#include <IGESControl_Reader.hxx>
IGESControl_Reader reader;
reader.ReadFile("part.igs");
reader.TransferRoots();
TopoDS_Shape shape = reader.OneShape();
写入 IGES 文件
#include <IGESControl_Writer.hxx>
IGESControl_Writer writer;
writer.Transfer(shape, IGESControl_StepSolid);
writer.Write("output.igs");
STL 格式(3D 打印)
导出 STL(ASCII)
#include <StlAPI_Writer.hxx>
StlAPI_Writer writer;
writer.Write(shape, "output.stl"); // ASCII 格式
导出 STL(二进制)
StlAPI_Writer writer;
writer.ASCIIMode() = Standard_False; // 二进制模式
writer.Write(shape, "output_binary.stl");
控制网格精度
#include <BRepMesh_IncrementalMesh.hxx>
// 设置网格精度
Standard_Real linearDeflection = 0.001;
Standard_Real angularDeflection = 0.5;
BRepMesh_IncrementalMesh mesher(shape, linearDeflection, false, angularDeflection);
// 导出
StlAPI_Writer writer;
writer.Write(shape, "high_quality.stl");
VRML 格式(虚拟现实)
#include <VRMLControl_Writer.hxx>
VRMLControl_Writer writer;
writer.Transfer(shape, VRML_V2_0);
writer.Write("output.wrl");
glTF 格式(现代 3D)
#include <RWGltf_CafWriter.hxx>
// 创建 glTF 写入器
RWGltf_CafWriter writer("output.gltf");
writer.Perform(shape);
OBJ 格式
#include <RWObj_CafWriter.hxx>
RWObj_CafWriter writer("output.obj");
writer.Perform(shape);
BREP 格式(OCCT 原生)
写入 BREP
#include <BRepTools.hxx>
BRepTools::Write(shape, "shape.brep");
读取 BREP
#include <BRepTools.hxx>
TopoDS_Shape shape;
BRep_Builder builder;
BRepTools::Read(shape, "shape.brep", builder);
格式对比
| 格式 | 类型 | 用途 | 支持 |
|---|---|---|---|
| STEP | 实体模型 | CAD 数据交换 | 读写 |
| IGES | 曲面/线框 | 旧标准 | 读写 |
| STL | 网格 | 3D 打印 | 读写 |
| glTF | 网格+材质 | Web/实时渲染 | 读写 |
| VRML | 网格+材质 | 虚拟现实 | 写 |
| OBJ | 网格 | 3D 软件交换 | 读写 |
| BREP | 实体模型 | OCCT 原生 | 读写 |
批量转换工具
#include <STEPControl_Reader.hxx>
#include <StlAPI_Writer.hxx>
void convertStepToStl(const std::string& stepFile, const std::string& stlFile) {
// 读取 STEP
STEPControl_Reader reader;
reader.ReadFile(stepFile.c_str());
reader.TransferRoots();
TopoDS_Shape shape = reader.OneShape();
// 网格化
BRepMesh_IncrementalMesh mesher(shape, 0.001);
// 导出 STL
StlAPI_Writer writer;
writer.Write(shape, stlFile.c_str());
}
总结
数据交换是 CAD 工作流的关键环节,选择合适的格式很重要。
字数:约 1800 字 | 分类:OpenCASCADE 教程 | 难度:实战 | 版本:7.7.0